AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi UrlToFilename, brauche etwas Hilfe
Thema durchsuchen
Ansicht
Themen-Optionen

UrlToFilename, brauche etwas Hilfe

Ein Thema von KodeZwerg · begonnen am 5. Mai 2018 · letzter Beitrag vom 6. Mai 2018
Antwort Antwort
Schokohase
(Gast)

n/a Beiträge
 
#1

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 00:21
Jag die URL doch erst durch System.Net.URLClient.TURI. Der zerlegt dir das praktischerweise in die logischen Teile.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 01:28
Jag die URL doch erst durch System.Net.URLClient.TURI. Der zerlegt dir das praktischerweise in die logischen Teile.
Ja, ja die Super schlauen mach mal einfach..
Lese doch erst mal um was es ihm geht.

Dann gebe dein Kommentar ab.
Er will keine riesen Komponenten verwenden sondern alles klein halten was will er also mit dieser RIESEN Classe?
Zudem täte es ein einfaches Split auch.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 02:18
Delphi-Quellcode:
type
 TRealURL = record
   OriginalURL, {whatever input it was - its stored here}
   Protocol, {holds used protocol without "://", example "http"}
   Username, {Ham}
   Password, {Eggs}
   Domain, {can be www or ip-adress}
   Sublevel, {may just hold char "/" if source is root plus a filename}
   Filename, {holds logical Name from given input}
   Parameter, {if you need them for further usage}
   Port: String; {Port Royale}
 end; // TRealURL

Function ExpandURL ( Const sURL: String ) : TRealURL;
var
  tmp, NoParam: String;
  i, ii: Integer;
begin
  Result.OriginalURL := sURL;
  Result.Protocol := '';
  Result.Username := '';
  Result.Password := '';
  Result.Domain := '';
  Result.Sublevel := '';
  Result.Filename := '';
  Result.Parameter := '';
  Result.Port := '';
  (* Get Parameter & Port *)
  tmp := sURL;
  NoParam := '';
  if Pos('?', tmp) > 0 then
  begin
   tmp := Copy(tmp, Pos('?', tmp), Length(tmp));
   if Pos(':',tmp) > 0 then Result.Parameter := Copy(tmp, 1, Pos(':',tmp)-1) else Result.Parameter := tmp;
   if Pos(':',tmp) > 0 then Result.Port := Copy(tmp, Pos(':', tmp)+1, Length(tmp));
   NoParam := Copy(sURL, 1, Pos('?', sURL)-1);
  end
  else NoParam := tmp;
  (* Get Protocol *)
  tmp := NoParam;
  if Pos('://',tmp) > 0 then Result.Protocol := Copy(tmp, 1, Pos('://',tmp)-1);
  (* Get Username *)
  if Pos('@', tmp) > 0 then
  begin
   i := Length(Result.Protocol);
   if Length(Result.Protocol) > 0 then Inc(i,3);
   Inc(i);
   tmp := Copy(NoParam, i, Length(NoParam));
   if Pos(':',tmp) > 0 then tmp := Copy(tmp, 1, Pos(':',tmp)-1);
   if Pos('@',tmp) > 0 then tmp := Copy(tmp, 1, Pos('@',tmp)-1);
   Result.Username := tmp;
  end;
  (* Get Password *)
  tmp := NoParam;
  if ((Pos('@', tmp) > 0)and(Pos(':', tmp) > 0)) then
  begin
   i := Length(Result.Protocol)+Length(Result.Username);
   if Length(Result.Protocol) > 0 then Inc(i,3);
   if Length(Result.Username) > 0 then Inc(i);
   Inc(i);
   tmp := Copy(NoParam, i, Length(NoParam));
   tmp := Copy(tmp, 1, Pos('@',tmp)-1);
   Result.Password := tmp;
  end;
  (* Get Domain & Port *)
  begin
   i := Length(Result.Protocol)+Length(Result.Username)+Length(Result.Password);
   if Length(Result.Protocol) > 0 then Inc(i,3);
   if Length(Result.Username) > 0 then Inc(i);
   if Length(Result.Password) > 0 then Inc(i);
   Inc(i);
   tmp := Copy(NoParam, i, Length(NoParam));
   if Pos('/', tmp) > 0 then tmp := Copy(tmp, 1, Pos('/', tmp)-1);
   if Pos(':', tmp) > 0 then
   begin
    Result.Port := Copy(tmp, Pos(':', tmp)+1, Length(tmp));
    tmp := Copy(tmp, 1, Pos(':', tmp)-1);
   end;
   Result.Domain := tmp;
  end;
  (* Get Sublevel & Port *)
  begin
   i := Length(Result.Protocol)+Length(Result.Username)+Length(Result.Password)+Length(Result.Domain);
   if Length(Result.Protocol) > 0 then Inc(i,3);
   if Length(Result.Username) > 0 then Inc(i);
   if Length(Result.Password) > 0 then Inc(i);
   Inc(i);
   tmp := Copy(NoParam, i, Length(NoParam));
   i := 0;
   for ii := 1 to Length(tmp) do if tmp[ii] = '/then i := ii;
   if i > 0 then tmp := Copy(tmp, 1, i);
   if Pos(':', tmp) > 0 then
   begin
    Result.Port := Copy(tmp, Pos(':', tmp)+1, Length(tmp));
    tmp := Copy(tmp, 1, Pos(':', tmp)-1);
   end;
   Result.Sublevel := tmp;
  end;
  (* Get Filename & Port *)
  begin
   i := Length(Result.Protocol)+Length(Result.Username)+Length(Result.Password)+Length(Result.Domain)+Length(Result.Sublevel);
   if Length(Result.Protocol) > 0 then Inc(i,3);
   if Length(Result.Username) > 0 then Inc(i);
   if Length(Result.Password) > 0 then Inc(i);
   Inc(i);
   tmp := Copy(NoParam, i, Length(NoParam));
   if Pos(':', tmp) > 0 then
   begin
    Result.Port := Copy(tmp, Pos(':', tmp)+1, Length(tmp));
    tmp := Copy(tmp, 1, Pos(':', tmp)-1);
   end;
   Result.Filename := tmp;
  end;
end;
Das tuts auch, hat zumindest erste alpha phase überstanden

Ich hoffe du blickst da in 10 Jahren noch durch.
Habs nochmal überarbeitet, schöner wirds nicht aber hält bis jetzt meinen Tests stand
Gruß zurück!
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 6. Mai 2018 um 05:13 Uhr) Grund: Code aktualisiert
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 02:22
Zitat:
Das tuts auch, hat zumindest erste alpha phase überstanden

Ich hoffe du blickst da in 10 Jahren noch durch.

gruss
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 07:39
Jag die URL doch erst durch System.Net.URLClient.TURI. Der zerlegt dir das praktischerweise in die logischen Teile.
Wenn man fehlerfrei und schnell zum Ziel gelangen möchte, ist das die beste Antwort in diesem Thema. Die Funktionalität gibt es bereits und der obige Code lässt ganz gut erahnen, warum die Angelegenheit eben kein Zweizeiler ist.
Wenn Du Dich mit dem Aufbau einer URI bzw. URL befassen möchtest, ist das ein schönes Forschungsprojekt. Aber eben nicht mehr - und insbesondere auch keine implizite Empfehlung, das "mal eben selbst zu machen", denn das gibt es bereits.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 08:46
Hallo, ich versuche so etwas wie einen Download Manager zu erstellen, die UrlToFilename funktion dient mir dabei in erster hinsicht ein online-überprüfen auszuweichen, um Dateinamen für eine Listbox zu aufzubereiten, bis hier hin ist noch nichts weiter mit dem Namen geschehen, dank des Records habe ich ja auch noch den Original-String.
An einen Online-Status abfragen Knopf habe ich auch schon gedacht, da kommt dann auch der Dateiname nochmal vor, für welche Methode ich mich da entscheide steht kaum noch zur Debatte, THttpClient hats mir voll angetan
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 09:19
Zitat:
Wenn man fehlerfrei und schnell zum Ziel gelangen möchte, ist das die beste Antwort in diesem Thema.
Da kann man geteilter Meinung sein. .Wirtschaftlich gesehen vielleicht.

Aber das Interessiert hier keinen es ist ein Spass\Fan\Lern Projekt und letztendlich bei deiner Aussage
bleibt der Lerneffekt auf der Strecke und der ist dann gleich 0.

Es muss oder sollte nicht immer darum gehen eben schnell etwas zu machen oder fertigen Code zu verwenden..
Wie hast du denn früher einmal angefangen Copy/Paste ? Denke mal nicht denn da hättest du nichts bei gelernt.

Ob das im Sinne des Betrachters liegt mag dahin gestellt sein.

gruss

Geändert von EWeiss ( 6. Mai 2018 um 09:23 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 10:24
Emil, wenn Du die zweite Hälfte meines Beitrages gelesen und verstanden hättest, wüsstest Du, dass ich sehr wohl geschrieben habe, dass dies ein schönes Forschungsprojekt ist, um sich mit dem Thema „Aufbau einer URI“ zu beschäftigen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 15:01
Emil, wenn Du die zweite Hälfte meines Beitrages gelesen und verstanden hättest, wüsstest Du, dass ich sehr wohl geschrieben habe, dass dies ein schönes Forschungsprojekt ist, um sich mit dem Thema „Aufbau einer URI“ zu beschäftigen.
ja. sorry du hast mich erwischt

EDIT:
Zitat:
Hier nun mini Update zu meinem Code, auch auf ein "?" oder "#" direkt nach einem "/" reagiere ich nun.
Es ist schön wenn man alles hintereinander schreibt.
Aber nicht praktisch vor allem wenn es um das debuggen geht.

Wie willst du in dieser Zeile hinter then, else einen breakpoint setzen ?

if sURL[i] = '#then if tmp[i-1] = '/then tmp := Copy(tmp, i, Length(tmp)) else tmp := Copy(tmp, Pos('#', tmp), Length(tmp));

Fehlersuche ist dann irgendwie Glückssache.

gruss

Geändert von EWeiss ( 6. Mai 2018 um 15:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: UrlToFilename, brauche etwas Hilfe

  Alt 6. Mai 2018, 16:18
Wie willst du in dieser Zeile hinter then, else einen breakpoint setzen ?
......
Fehlersuche ist dann irgendwie Glückssache.
Das mit hintereinander-weg Schreiben ist eine blöde Angewohnheit, wohl wahr.
Ich mache es oft bei simplen Dingen so das eine Anweisung/Auswertung pro Zeile entsteht mit der ich in nächster Zeile weiterarbeite. Das ist für mich strukturierter aber man kann natürlich allem mehr Luft machen, dann hat man was fürs Auge
Fehlersuche während man nur String-Inhalt prüft und kopiert, da reicht mir auch das Ergebnis danach.
Soweit ich das Beurteilen kann ist der Code Recht Stabil gegen Fehler aber falls Du Dich erniedrigen würdest um mein Code bei Dir auszuführen um etwaige Fehler zu entlarven, das wäre auch hilfreich.
Ich hab dutzende Kombinationen aus real und fake inputs durchgetestet ohne selbst auf Fehler zu stoßen.
(Selbst wenn es im Eigentlichen Einsatz von einer Online-Prüfung abgelöst wird solls im Vorfeld auch schon glänzen)

Wer mal so richtig ins Eingemachte schauen will:
URL Standard, da bin ich am lesen, zieht sich auch hin ^_^

PS: Parameter bedeuted bei mir alles was nicht zum Rest gehört, ich werte das ja nicht aus sondern filter es nur raus.
Gruß vom KodeZwerg
  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 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz