AGB  ·  Datenschutz  ·  Impressum  







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

FTP URL in Bestandteile splitten

Ein Thema von Alois · begonnen am 25. Jul 2005 · letzter Beitrag vom 23. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#1

FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 12:58
Hi,
ich versuche schon die ganze Zeit eine vernünftige Routine zum aufsplitten eines URL Stringes in seine Bestandteile zu programmieren. Komme aber irgendwie nicht weiter.

Ein String im Format 'ftp://benutzername:kennwort@hostname:21/Verzeichnis/Datei.txt' soll in seine Bestandteile zerlegt und mir in einzelnen Stringvariablen
  • Benutzername
  • Kennwort
  • Hostname
  • Port
  • Pfad
  • Dateiname
zurückliefern.

Hat schon jemand von euch so eine Routine programmiert. Ich wäre euch echt dankbar.

Gruss Alois
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 13:07
Zeig doch mal, was du schon hast.

Und warumn sthet das unter 'Programmieren allgemein'? Geht es nicht um Delphi?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 13:10
Mal so ins Blaue: Hier im Forum suchenInternetCrackUrl als erste Idee. Inwieweit das jetzt in dem Spezialfall mit dem Benutzernamen und Kennwort hilft, vermag ich natürlich nicht zu sagen.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 13:19
Hi,

hier mal ein schnelles Quick and Dirty Beispiel. In wie weit das richtig funktioniert, weiß ich nicht, aber mit dem FTP-Dings im ersten Post geht es

Delphi-Quellcode:
type
  TFTPURL = record
    Username, Password, Host, Path, FileName: String;
    Port: Integer;
  end;

// Die passende Funktion:

function ParseFTPURL(const FTPURL: String): TFTPURL;
var
  Temp: String;
begin
  Temp := FTPURL;

  Delete(Temp, 1, 6); // ftp:// entfernen

  Result.Username := Copy(Temp, 0, Pos(':', Temp) - 1); // Benutzername kopieren
  Delete(Temp, 1, Pos(':', Temp)); // Benutzername entfernen

  Result.Password := Copy(Temp, 1, Pos('@', Temp) - 1); // Kennwort kopieren
  Delete(Temp, 1, Pos('@', Temp)); // Kennwort entfernen

  Result.Host := Copy(Temp, 1, Pos(':', Temp) - 1); // Host kopieren
  Delete(Temp, 1, Pos(':', Temp)); // Host entfernen

  Result.Port := StrToInt(Copy(Temp, 1, Pos('/', Temp) - 1)); // Port kopieren
  Delete(Temp, 1, Pos('/', Temp)); // Port entfernen

  Temp := StringReplace(Temp, '/', '\', [rfReplaceAll]);
  Result.Path := ExtractFilePath(Temp);
  Result.FileName := ExtractFileName(Temp);
end;

// Aufruf (z.B.):
procedure TForm1.Button1Click(Sender: TObject);
var
  FTP: TFTPURL;
begin
  FTP := ParseFTPURL(FTP_URL);

  with RichEdit1.Lines do
  begin
    Add(FTP.Username);
    Add(FTP.Password);
    Add(FTP.Host);
    Add(IntToStr(FTP.Port));
    Add(FTP.Path);
    Add(FTP.FileName);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 13:26
Wieso denn so umständlich (das bezieht sich auf InternetCrackUrl...)? Ich meine, wenn die URL tatsächlich immer genau diese Form hat, muss doch nur mit Copy / Pos / Delete nacheinander durch die Bestandteile gegangen werden:
Delphi-Quellcode:
var
  tmpURL, Prot, User, Pass, Host, Dir, File, FileExt: String;

  function GetAndDelete(Delim: String): String;
  begin
    Result := Copy(tmpURL, 1, Pos(Delim, tmpURL) - 1);
    Delete(tmpURL, 1, Pos(Delim, tmpURL) + Length(Delim) - 1);
  end;

begin
  tmpURL := 'ftp://benutzername:kennwort@hostname:21/Verzeichnis/Datei.txt';
  Prot := GetAndDelete('://');
  User := GetAndDelete(':');
  Pass := GetAndDelete('@');
  //Und so weiter...
end;
Dann braucht man nicht InternetCrackUrl benutzen und das damit verbundene Speichermanagement entfällt.
Abgesehen davon kann man so auch auf Fehler besser reagieren, da man bei InternetCrackUrl nur weiß, dass es nicht geklappt hat, aber nicht wo...

Ich seh grad, so ähnlich aber nicht so kompakt hat es auch schon Spider gepostet...
Sebastian Jänicke
  Mit Zitat antworten Zitat
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 14:43
Vielen Dank für eure Antworten. Das ging aber flott...
Werde ich gleich mal ausprobieren.

Noch 'ne Frage:
Wie rufe ich die Funktion CrackUrl eigentlich auf und wie habe ich Zugriff auf die einzelnen Variablen??
Delphi-Quellcode:
type
   TEasyURLComponents = record
     Scheme, HostName: string;
     Port: Integer;
     User, Password, UrlPath, ExtraInfo: string;
   end;
procedure CrackURL(const URL: string; decode, escape: Boolean; var data: TEasyURLComponents );
var
  uc: TURLComponents;
  flags: Cardinal;
begin
  ZeroMemory(@uc, sizeof(uc));
  uc.dwStructSize := sizeof(TURLComponents);

  with data do
  begin
    SetLength(Scheme, 10);
    uc.lpszScheme := PChar(Scheme);
    uc.dwSchemeLength := Length(Scheme);

    SetLength(HostName, 200);
    uc.lpszHostName := PChar(HostName);
    uc.dwHostNameLength := Length(HostName);

    SetLength(User, 200);
    uc.lpszUserName := PChar(User);
    uc.dwUserNameLength := Length(User);

    SetLength(Password, 200);
    uc.lpszPassword := PChar(Password);
    uc.dwPasswordLength := Length(Password);

    SetLength(UrlPath, 1000);
    uc.lpszUrlPath := PChar(UrlPath);
    uc.dwUrlPathLength := Length(UrlPath);

    SetLength(ExtraInfo, 2000);
    uc.lpszExtraInfo := PChar(ExtraInfo);
    uc.dwExtraInfoLength:= Length(ExtraInfo);
  end;

  flags := 0;
  // Converts encoded characters back to their normal form.
  if decode then flags := flags or ICU_DECODE;

  // Converts all escape sequences (%xx) to their corresponding characters.
  if escape then flags := flags or ICU_ESCAPE;

  if not InternetCrackUrl(PChar(URL), Length(URL), flags, uc) then
    RaiseLastWin32Error;

  with data do
  begin
    SetLength(Scheme, uc.dwSchemeLength);
    SetLength(HostName, uc.dwHostNameLength);
    SetLength(User, uc.dwUserNameLength);
    SetLength(Password, uc.dwPasswordLength);
    SetLength(UrlPath, uc.dwUrlPathLength);
    SetLength(ExtraInfo, uc.dwExtraInfoLength);
    Port := uc.nPort;
  end;
end;
Greetz Alois
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 14:45
Delphi-Quellcode:
procedure Blubb;
var
  Data: TEasyURLComponents;
begin
  CrackURL('Deine gewünschte URL', true, true, Data);
  ShowMessage(Data.User);
end;
  Mit Zitat antworten Zitat
25. Jul 2005, 14:54
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Also soll es doch mit Delphi gelöst werden. Das nächste mal besser auf die Sparte achten.
Grendel
(Gast)

n/a Beiträge
 
#9

Re: FTP URL in Bestandteile splitten

  Alt 25. Jul 2005, 15:11
Oder per Regular Expression:
So in etwa müsste das hinkommen:

Code:
ftp://([^:|.*]*):+([^:|^@|.*]*)@+([^:|.*]*):*([0-9]*)([^\.|.*]*/+)(.*)
dabei wird allerdings davon ausgegangen, daß benutzername:passwort auch auf jeden fall gesetzt sind.

Match 1: Benutzername
Match 2: Kennwort
Match 3: Hostname
Match 4: Port
Match 5: Verzeichnis (mit / am Ende)
Match 6: Datei

Sollte mit TRegExpr von http://RegExpStudio.com funktionieren.

Bis neulich ...

[edit=Luckie]Smilies deaktiviert. Ausdruck in Code-Tags gesetzt. Mfg, Luckie[/edit]
[edit=Grendel]Mensch! Lass einem doch mal die Zeit selber zu korrigieren [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 30. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#10

Re: FTP URL in Bestandteile splitten

  Alt 27. Jul 2005, 19:51
oder man bedient sich der Indy-Klasse TIdURI (mit i am Ende) die kann sowas auch
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:22 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