AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

url entschlüßeln

Ein Thema von theomega · begonnen am 25. Jul 2002 · letzter Beitrag vom 4. Jan 2003
Antwort Antwort
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

url entschlüßeln

  Alt 25. Jul 2002, 16:44
Hallo wie bekomme ich mit delphi aus dem String

http://www.microsoft.com/download/teset/office2k.exe den Namen office2k.exe heraus. Es geht also um den Dateinamen in einer URL. Und egal wie tief in der Verzeichnissstruktur??
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 25. Jul 2002, 16:54
Weißt du, wie lang der Dateiname ist?

Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 25. Jul 2002, 16:55
Moin TheOmega,

nimm mal einen Button, ein Edit und dann probiers mal im OnClick des Button hiermit:

Code:
ShowMessage(copy(Edit1.Text,LastDelimiter('/',Edit1.Text)+1,Length(Edit1.Text)));
Das mal als Beipspiel.

Theoretisch müsste sich auch ExtractFileName eignen, aber leider hat Borland dabei übersehen, das der Slash (/) ebenso als Trennzeichen dienen darf wie der Backslash. (und dass sogar gemischt)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 25. Jul 2002, 17:46
Zitat von Christian Seehase:
leider hat Borland dabei übersehen, das der Slash (/) ebenso als Trennzeichen dienen darf wie der Backslash. (und dass sogar gemischt)
So kannst du das aber nicht sagen, denn Unter DOS/OS2/Windows Betriebsystemen dient nur, und wirklich nur des Backslash als Trennzeichen für Ordner. Wenn das Programm unter Linux mit Kylix kompiliert werden würde, dann reagiert ExtractFileName nur auf '/' aber nicht auf '\'. Aber solange man nur für Windows entwickelt muss man sich mit dieser Problematik nicht auseinandersetzen. Für URLs die auf Unix-Pfadangaben basieren muss man dann eben seine eigenen Routinen schreiben und dann ggf. in einer eigenen Unit auslagern, so dass man auch in anderen Projekten darauf zugreifen kann.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#5
  Alt 25. Jul 2002, 17:56
@Christian Seehase deine Lösung funzt, danke.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 25. Jul 2002, 19:06
Moin jbg,

Zitat von jbg:
...Windows Betriebsystemen dient nur, und wirklich nur des Backslash als Trennzeichen für Ordner...
sorry, aber da irrst Du.
Unter Windows sind als Trennzeichen von Pfadelementen Slash und Backslash zugelassen (gleichberechtigt).
Der Backslash ist halt nur üblich, aber, zumindest unter Windows (32Bit) nicht zwingend.
Genau wie gerne übersehen wird, dass der Punkt auch am Anfang eines Datei oder Ordnernamens stehen darf (oder mehrere).
Probier doch mal folgendes aus (sl ist vom Typ TStringList):

Code:
sl.SaveToFile('c:\temp/diesmal mit Slash\und mit Backslash/gemischt\....Datei.txt');
Voraussetzung ist natürlich, dass der Pfad existiert.

Da, wie schon erwähnt, Borland diese Eigenart des Dateisystemes nicht berücksichtigt hat, kann man den Pfad allerdings nicht mit ForceDirectories anlegen.
Auch dass es nicht störend ist, wenn mehrere Trenner unmittelbar hintereinander stehen haben sie nicht berücksichtigt.
Folgendes macht zwar keinen Sinn, funktioniert aber (und sollte, falls man den Pfade parsen will auch berücksichtigt werden):

Code:
sl.SaveToFile('c:\temp/diesmal mit Slash\/\/\/\/und mit Backslash/gemischt\....Datei.txt');
Nochmal kurz zu den Punkten am Anfang eines Dateinamens:
Beim Durchsuchen eines Verzeichnisbaumes mit FindFirst usw. wird gerne übersehen, dass explizit nach (SearchRec.Name <> '.') and (SearchRec.Name <> '..') gefiltert werden muss und nicht nach SearchRec.Name[1] <> '.'.
Diesen Fehler sieht man, leider, oft, auch wenn er sehr oft keine Auswirkung hat. Dadurch wird's allerdings nicht richtiger.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 25. Jul 2002, 22:31
Nur noch als abschliessender Tipp: Du solltest in den URLs auch auf Fragezeichen (?) und Rauten (#) achten, da diese direkt nach dem Dateinamen auf Parameter bzw. interne Dokumentziele verweisen können.

Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Robert
Robert

Registriert seit: 4. Jan 2003
36 Beiträge
 
#8
  Alt 4. Jan 2003, 18:16
Delphi-Quellcode:
function extractURLFile(URL:STRING):STRING;
var I,iLast,iFirst:INTEGER;
begin
  iLast:=LENGTH(URL)+1;
  iFirst:=1;
  FOR I:=LENGTH(URL) DOWNTO 1 DO
    BEGIN
      IF URL[I] = '/THEN
        BEGIN
          iFirst:=I+1;
          BREAK;
        END
      ELSE IF URL[I] = '?THEN iLast:=I;

    END;
  Result:=COPY(URL,iFirst,iLast-iFirst);
end;
Wer hat gesagt, dass Borland NUR ein Begriff für ein Ölfeld sei!?

Ban Visual BASIC 4ever
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz