Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi UrlToFilename, brauche etwas Hilfe (https://www.delphipraxis.net/196264-urltofilename-brauche-etwas-hilfe.html)

Daniel 6. Mai 2018 07:39

AW: UrlToFilename, brauche etwas Hilfe
 
Zitat:

Zitat von Schokohase (Beitrag 1401372)
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.

KodeZwerg 6. Mai 2018 08:46

AW: UrlToFilename, brauche etwas Hilfe
 
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:thumb:

EWeiss 6. Mai 2018 09:19

AW: UrlToFilename, brauche etwas Hilfe
 
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

Daniel 6. Mai 2018 10:24

AW: UrlToFilename, brauche etwas Hilfe
 
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.

himitsu 6. Mai 2018 10:44

AW: UrlToFilename, brauche etwas Hilfe
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1401366)
Hat man 'ne Url mit Parametern, muss man vorher alles hinter dem ? wegwerfen.

hinter erstem ? oder #

"%xx" durch Char($xx) ersetzen

Und für ExtractFileName, ExtractFilePath usw. muß das http:// nicht durch einen Laufwerksbuchstaben ersetzt werden.
Einige Funktionen kommen mit \ oder / zurecht, aber statt \ nimmt man besser Delphi-Referenz durchsuchenPathDelim. (so wie sLineBreak statt #13#10)

Diese Funktionien kommen auch mit UNC-Pfaden zurecht, also ihnen ist der Anfang quasi egal.



ABER, warum immer alles selber machen?
In den Indy und ähnlichen Komponenten verstecken sich irgendwo Funktionen, um eine URL/URI in seine Teile zu zerlegen.
https://de.wikipedia.org/wiki/URL-Encoding

mal bei Delphi-Referenz durchsuchenSystem.Net.URLClient.TURI oder in der Nähe von Delphi-Referenz durchsuchenSystem.Net.URLClient.TURLSchemes suchen (Delphis Neues/Eigenes)
oder im TIdURL (Indy), https://marc.durdin.net/2012/07/indy...code-and-more/
...

Shadowwalker 6. Mai 2018 11:57

AW: UrlToFilename, brauche etwas Hilfe
 
Zitat:

Zitat von himitsu (Beitrag 1401393)
Zitat:

Zitat von Delphi.Narium (Beitrag 1401366)
Hat man 'ne Url mit Parametern, muss man vorher alles hinter dem ? wegwerfen.

hinter erstem ? oder #


Ich werfe mal folgendes URL-Formmat ins Rennen.
Code:
.de/index.php/?page=wasauchimmerfuereineseite?foo=bar

KodeZwerg 6. Mai 2018 12:51

AW: UrlToFilename, brauche etwas Hilfe
 
Ja Danke nochmal, hab die Raute Zeichen bisher total ignoriert.
Hier nun mini Update zu meinem Code, auch auf ein "?" oder "#" direkt nach einem "/" reagiere ich nun.
Delphi-Quellcode:
  (* Get Parameter & Port *)
  tmp := sURL;
  NoParam := '';
  i := Pos('?', tmp);
  if i = 0 then i := Pos('#', tmp);
  if i > 0 then
  begin
   if sURL[i] = '?' then if tmp[i-1] = '/' then tmp := Copy(tmp, i, Length(tmp)) else tmp := Copy(tmp, Pos('?', tmp), Length(tmp))
    else
     if sURL[i] = '#' then if tmp[i-1] = '/' then tmp := Copy(tmp, i, Length(tmp)) else 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));
   if sURL[i-1] = '/' then NoParam := Copy(sURL, 1, i-2) else NoParam := Copy(sURL, 1, i-1);
  end
  else NoParam := tmp;
Das hier zeigt mir mein Programm mit Deiner Url an:
Code:
Original: .de/index.php/?page=wasauchimmerfuereineseite?foo=bar
Protocol:
Username:
Password:
Domain: .de
Sublevel: /
Filename: index.php
Parameter: ?page=wasauchimmerfuereineseite?foo=bar
Port:
Vielleicht lasse ich mir noch was einfallen das ich auch nach einem Punkt schaue so das der Sublevel zu "/" wird und Filename "index.php"

Updated, Dateiname funktioniert nun mit der Url.

EWeiss 6. Mai 2018 15:01

AW: UrlToFilename, brauche etwas Hilfe
 
Zitat:

Zitat von Daniel (Beitrag 1401392)
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 :duck:

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 ?

Delphi-Quellcode:
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

Delphi.Narium 6. Mai 2018 16:06

AW: UrlToFilename, brauche etwas Hilfe
 
Zitat:

Zitat von Shadowwalker (Beitrag 1401399)
Ich werfe mal folgendes URL-Formmat ins Rennen.
Code:
.de/index.php/?page=wasauchimmerfuereineseite?foo=bar

Naja, da ist aber jetzt nicht unbedingt was gültiges.

Mit sowas könnte ich mich ja anfreunden:
Code:
.de/index.php/?page=wasauchimmerfuereineseite&foo=bar
? steht vor dem ersten Parameter, die weiteren werden durch & getrennt, also einmal ?Name=Wert und alle weiteren dann mit &Name=Wert.

Die Raute weist bei HTML-Seiten normalerweise darauf hin, dass man innerhalb dieser Seite zu einer Sprungmarke navigieren möchte.

Wer mal so richtig ins Eingemachte schauen will: RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax (sind nur 61 Seiten ;-))

KodeZwerg 6. Mai 2018 16:18

AW: UrlToFilename, brauche etwas Hilfe
 
Zitat:

Zitat von EWeiss (Beitrag 1401409)
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 :-D
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)

Zitat:

Zitat von Delphi.Narium (Beitrag 1401414)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Seite 2 von 3     12 3      

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