AGB  ·  Datenschutz  ·  Impressum  







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

Eine Pfadangabe "säubern"?

Ein Thema von Glados · begonnen am 11. Sep 2017 · letzter Beitrag vom 14. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
Glados
(Gast)

n/a Beiträge
 
#1

Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 18:00
Ich stelle mir gerade die Frage wie man am besten eine unsaubere Pfadangabe säubert.
Wie bekomme ich etwas Dreckiges wie C:\\123/45\67. sauber sodass ich C:\123\45\67 erhalte?
Aktuell mache ich das so aber das ist sicher nicht so dolle oder?

Delphi-Quellcode:
begin
 if Trim(aDir) = 'then
  begin
   Result := '';
   Exit;
  end;

  // Wenn aDir eine Dateiangabe ist warum auch immer, dann ...
  // aDir := ExtractFileDir(aDir);

 aDir := StringReplace(aDir, '/', '\', [rfReplaceAll]);

 while (AnsiEndsStr('\', aDir)) or AnsiEndsStr('.', aDir) do
  aDir := Copy(aDir, 1, Length(aDir) - 1);

 while Pos('\\', aDir) > 0 do
  aDir := StringReplace(aDir, '\\', '\', [rfReplaceAll]);

 while Pos('\ ', aDir) > 0 do
  aDir := StringReplace(aDir, '\ ', '\', [rfReplaceAll]);

 Result := Trim(aDir);
end;
Ich bin ein totaler Spagetti-Coder und möchte natürlich Neues lernen!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 18:28
Woher kommen denn diese "dreckigen" Pfadangaben?
Hintergrund meiner Frage ist: es könnte sich jemand etwas dabei gedacht haben!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 18:35
Das können Benutzereingaben sein.
Ziel von mir ist es aber, alles was nicht dem Standard entspricht wegzufegen.
Doppelte Querstriche oder welche die falsch herum sind, oder das erste Zeichen nach einem \ sollte auch kein Leerzeichen sein (C:\123\ 456\789\)
und das letzte Zeichen eines Pfades sollte auch kein . sein. Das entfernt mein Code ja. Nur sicherlich alles andere als gut.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 21:55
Und schon rennst Du in das erste Problem, da z.B. Netzwerkverweise meist mit \\ beginnen, z.B.
Code:
\\Servername\Pfad\Pfad\Datei.xyz
Aus Erfahrung, versuche nicht zu bereinigen, sondern zu testen, ob die Eingabe sich verarbeiten lässt (z.B.: TFile.Exists, TDirectory.Exists, ...).

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#5

AW: Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 22:08
Zitat:
Wie bekomme ich etwas Dreckiges wie C:\\123/45\67. sauber sodass ich C:\123\45\67 erhalte?
Reicht das, wenn ich das doppelt schreibe?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

AW: Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 22:15
Zitat:
Wie bekomme ich etwas Dreckiges wie C:\\123/45\67. sauber sodass ich C:\123\45\67 erhalte?
Reicht das, wenn ich das doppelt schreibe?
Wie meinst Du diesen letzten Beitrag? Ich wollte lediglich darauf hinweisen, dass es auch andere legale Pfade gibt, welche durch das entfernen des doppelten \\ zerstört werden - sprich deine obige Routine würde zu einem ungültigen Pfad führen...

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

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Eine Pfadangabe "säubern"?

  Alt 11. Sep 2017, 22:42
Also im Prinzip bist Du auf dem richtigen Weg. ich empfehle Dir nur Dich zuerst hier zu informieren.

Ich habe den Eindruck daß du ein etwas rustikales Vorgehen bevorzugst.

Gruß
k-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#8

AW: Eine Pfadangabe "säubern"?

  Alt 12. Sep 2017, 10:07
Wie bekomme ich etwas Dreckiges wie C:\\123/45\67. sauber sodass ich C:\123\45\67 erhalte?
Da stellen sich bei mir alle Nackenhaare auf. Das würde ich nicht machen. Wenn es Benutzereingaben sind, dann würde ich den Pfad lediglich auf Gültigkeit prüfen (DirectoryExists, FileExists) und bei einem Fehler eine verständliche Fehlermeldung ausgeben. Denn so schlau kannst du deine Putzfrau nicht machen, dass sie jede unsinnige Benutzereingabe gerade biegen kann. Du handelst dir zwangsläufig irgendwelche Probleme ein. Einige wurden hier ja schon genannt. Eine weitere, gültige Pfadangabe wäre z.B.
Code:
file:///C:/Users/EinBenutzerName/Desktop/TopFolder/SubFolder1/SubSub/../../SubFolder2/SubSub/Datei...txt
Deine Putzfrau würde das gnadenlos zerschießen.

NACHTRAG: Verwende wenn möglich TOpenDialog zur benutzerfreundlichen Auswahl von Dateipfaden. Dann bekommst du ganz automatisch einen wunderbar sauberen Pfad und verleitest den Anwender durch Freitextangaben nicht geradezu zu Tippfehlern.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (12. Sep 2017 um 10:19 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#9

AW: Eine Pfadangabe "säubern"?

  Alt 12. Sep 2017, 10:31
Zitat:
Da stellen sich bei mir alle Nackenhaare auf.
Zitat:
Fast immer würde der "fehlerhafte" Pfad von den meisten APIs verstanden werden und wenn nicht, dann soll eben der Benutzer seine Falscheingabe berichtigen.
Das sehe ich anders. Wenn ein Programm fehlerhafte Eingaben noch korrigieren kann, ist doch alles OK.
Und genau dieses fast immer ist der springende Punkt. Ich will mich nicht auf irgendeine API verlassen, die sich gegebenenfalls von XP bis Windows 10 geändert haben könnte.
Da mache ich das lieber selber. Ich weiß ja welche Art Pfade das Programm im Allgemeinen verarbeitet und welche nicht. Und die, die verarbeitet werden, kann ich dann korrigieren.

Zitat:
file:///
Deine Putzfrau würde das gnadenlos zerschießen.
Würde sie definitiv. Aber da ich solche Pfade grundsätzlich nicht im Programm verarbeite ist das auch vollkommen egal.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#10

AW: Eine Pfadangabe "säubern"?

  Alt 12. Sep 2017, 11:29
Anmerkung: Es ist üblich, hier anzugeben, wen du zitierst. Sonst legst du mir Worte in den Mund die andere geschrieben haben.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  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 11:14 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 by Thomas Breitkreuz