Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 18.11.16 18:49 
Hallo!

Ich möchte per Code Ordner- und Dateinamen mit Anführungszeichen versehen, wobei jedoch Laufwerksbuchstaben, zB. C: und C:\ davon ausgenommen sind, ebenso alle Wörter, in denen kein :\ vorkommt.
Das wäre nicht so schwierig, aber da Windows Leerzeichen in Dateinamen erlaubt, weiss ich nicht, wie ich vorgehen soll: Wo hört ein Ordner- oder Dateiname auf?
Ganze Worte sind ja einfach aufzufinden, sie könnten aber Bestandteil eines Ordner-/Datenamens sein und dürfen natürlich dann nicht von Anführungszeichen umschlossen sein!

Beispiel:

Dieses:
C:\Windows my.txt y: C:\ C:\Program Files (x86)\InstallShield Installation Information

soll zu dem werden:
"C:\Windows" my.txt d: C:\ "C:\Program Files (x86)\InstallShield Installation Information"

Wenn ich bloss nach ganzen Worten suche, kommt natürlich das heraus: "C:\Program Files" "(x86)\InstallShield" "Installation Information"
Das ist dann kein Ordnername mehr, sondern Müll, den ich nicht verwenden kann!

Wie kann ich vorgehen?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.11.16 19:14 
- Nachträglich durch die Entwickler-Ecke gelöscht -
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 18.11.16 20:56 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ich erwähne es nur mal nebenbei, dass dieser Text zuvor gesplittet gehört, bevor man, so wie ich vorgeschlagen, dies in die Tat umsetzt.
Genau das ist es ja: Wie? Wo hört was auf, was gehört noch zum Ordnernamen und was schon zum nächsten Teilstring?

Ich habe das jetzt erstmal so gemacht, dass ein Anrührungszeichen vor jedem zB. C: ("C:) und nach jedem \, auf das ein Leerzeichen folgt, gesetzt wird. Funktioniert.

Mit Dateinamen, die ja nicht mit \ enden, ist das etwas komplizierter. Also dachte ich, suche von 1 bis Length(s), finde ein Leerzeichen, gehe von da bis zu einem Punkt . zurück und setzt an der Position des Leerzeichens-1 ein Anrührungszeichen. Zur Info: s ist der Orginalstring, s1 der veränderte:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  //Orginalstring ist 'a: C:\1.txt C:\Program Files (x86)\InstallShield Installation Information\xxx.xxx my.txt'
  for i := 1 to Length(s) do
  begin
    if s1[i] = ' ' then
    begin
      for n := i downto 1 do
        if s1[n] = '.' then
        begin
          s1.Insert(i, '"');
          break;  //Bricht das nicht das  for i :=  ab statt nur das  for n := ?
        end;
    end;
  end;

Heraus kommt:
a: "C:\1.txt ""C:\Program "Files "(x86)\InstallShield "Installation "Information\xxx.xxx my.txt

Das ist nichts! Irgendwo in meinen beiden for's ist ein Fehler...

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.11.16 21:09 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 18.11.16 21:15 
Zitat:
Dieses:
C:\Windows my.txt y: C:\ C:\Program Files (x86)\InstallShield Installation Information

soll zu dem werden:
"C:\Windows" my.txt d: C:\ "C:\Program Files (x86)\InstallShield Installation Information"


Woher hast du das Wissen genommen das es ein "C:\Windows" Ordner war und eine my.txt Datei?
Es könnte genauso sein das es der "Windows my.txt" Ordner ist oder die "Windows my.txt" Datei beides ist gültig.

Ohne Zugriff auf das betreffende Dateisystem wo du das nachprüfen könntest hast du keine Chance das tatsächlich Richtige zu tun.
Entweder du definierst zusätzliche Einschränkungen (also weitergehende die die eigentlichen Fähigkeiten des Dateisystem einschränken) hast Zugriff auf das Dateisystem um die Möglichkeiten durchzuprobieren oder das Problem ist nicht lösbar.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 18.11.16 21:29 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
ich muss jetzt "dinnieren", wie es die "feine Gesellschaft" von mir verlangt. :rofl:
Lass es dir schmecken!

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Woher hast du das Wissen genommen das es ein "C:\Windows" Ordner war und eine my.txt Datei?
Es könnte genauso sein das es der "Windows my.txt" Ordner ist oder die "Windows my.txt" Datei beides ist gültig.
Die Ordner und Dateien können per Dateisuche gefunden oder manuell geschrieben werden!

[quote="[user]Ralf Jansen[/user]"(703905)]
Zitat:
Ohne Zugriff auf das betreffende Dateisystem wo du das nachprüfen könntest hast du keine Chance das tatsächlich Richtige zu tun.
Im Wesentlichen schon. Klar, mitdenken muss man selbst!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.11.16 22:24 
- Nachträglich durch die Entwickler-Ecke gelöscht -
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 18.11.16 22:42 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Danke im Nachhinein. Wenn die Pfade mittels Suche/Dialog ermittelt werden, dann wärs ein Leichtes, vorn und hinten ein Anführungszeichen zu setzen. Ansonsten, sofern der Dateiname "my.txt" in einem Stück bleibt und keine weiteren Punkte oder Leerzeichen hinzukommen, könnte ich mir eine Lösung vorstellen.

Das Ganze ist ein Befehlsinterpreter, und ich möchte automatisch Anführungszeichen um die Ordner- und Dateinamen setzen. Diese werden beim Drücken der Tab-Taste abhängig von der vorhandenen Eingabe in die Kommandozeile gesetzt. (zB. findet die Eingabe c:\win (dann Tab drücken) C:\Windows. Die Anführungszeichen sollen aber nicht immer da sein, sondern nur, wenn man dies explizit anfordert. Nur dann soll das Programm um diese Namen Anführungszeichen setzen!

ich bin auf dem richtigen Weg, nur manchmal wird das letzte Anführungszeichen nicht gesetzt. Muss noch herausfinden, warum das so ist.
Jedenfalls ist es mühsam!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.11.16 00:54 
- Nachträglich durch die Entwickler-Ecke gelöscht -
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 19.11.16 11:34 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Einen gemeinsamen Nenner zwischen:

ausblenden Quelltext
1:
C:\Windows my.txt y: C:\ C:\Program Files (x86)\InstallShield Installation Information					

und

ausblenden Quelltext
1:
a: C:\1.txt C:\Program Files (x86)\InstallShield Installation Information\xxx.xxx my.txt					

finde ich nicht.
Es gibt auch keinen, das können ganz verschiedene Strings sein. Das sind nur Beispiele! Wie gesagt, es gibt eine Einganezeile, die verschiedene Angaben enthalten kann. Meine Beispiele sind sicher Extreme, ich wollte nur sehen, ob das funktioniert.

Ich habe jetzt eine Lösung, die aber nicht optimal funktioniert. Ich verwende zunächst am Ende der einzelnen Teilstrings statt " ein anders Zeichen, das ich anschliessend in einigen Fällen aber wieder entfernen muss, zuletzt konvertiere ich alle verbliebenen dann in ". Ausserdem wird am Anfang des letzten Teilstring manchmal kein " gesetzt, abhängig von dem, was vorher kam.

Ich teste noch eine Weile, ggf. stelle ich dann hier mal rein, was ich an Code habe.

Das Problem ist, auf einen Nenner gebracht: Es gibt kein einheitliches Format. Datei- und Ordnernamen können sonstwas sein!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Sa 19.11.16 11:45 
Hilft das hier www.entwickler-ecke....Ordner+_72184,0.html eventuell weiter oder hast Du nur die Befehlszeilen ohne Zugriff auf das Dateisystem?

ub60

Für diesen Beitrag haben gedankt: galagher
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.11.16 12:37 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 20.11.16 21:36 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Hilft das hier www.entwickler-ecke....Ordner+_72184,0.html eventuell weiter oder hast Du nur die Befehlszeilen ohne Zugriff auf das Dateisystem?
Ich habe Zugriff auf das Dateisystem, ich kann Datei- und Ordnernamen per Suche (Tab-Taste) einfügen oder einfach eintippen.

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
In dem Fall bringt es nichts, auf die Weise vorzugehen. Das einfachste was du jetzt machen könntest, wäre, weil die TAB-Taste ins Spiel gebracht wurde, beim Drücken der Taste, zwei Anführungszeichen auszugeben und mitten drin den Pfad zu hinterlegen.
Ja, wäre eine Möglichkeit.

Ich habe mittlerweile eine Lösung gefunden, die zumindest so gut wie immer funktioniert, jedenfalls ist sie ausreichend. Bei ungerader Zahl an Anführungszeichen wird das letzte weggelassen (das wurde immer gesetzt), dann stimmt es zumindest von der Form her. Bleiben die Ordner-/Dateinamen, bei denen nicht klar ist, wo sie aufhören, dann setze ich eben keine Anführungszeichen.
Wo ein Dateiname anfängt und aufhört, erkenne ich am Punkt der Dateinamenserweiterung. Gut, es gibt auch Dateinamen ohne. Die werden dann eben wie Ordner behandelt. An dieser Stelle könnte ich natürlich noch prüfen, ob ein solcher Ordner existiert. Aber ich denke, so, wie es ist, reicht es!

Die Idde von user profile iconFrühlingsrolle, zwei Anführungszeichen auszugeben und den Pfad dazwischen zu schreiben, ist jedenfalls bei der Tab-Taste eine Option!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 20.11.16 22:04 
Zitat:
Gut, es gibt auch Dateinamen ohne.


Und Ordner mit.