Entwickler-Ecke

Sonstiges (Delphi) - Text aus Listbox extrahieren


TOMahawk85 - Mi 17.05.06 22:28
Titel: Text aus Listbox extrahieren
Hallo Forumfreunde,

ich hoffe mir kann jemand dabei helfen, wie ich aus einer Listbox einen Ordner- oder Dateinamen extrahieren kann.

In der Listbox steht zum Beispiel folgendes:

c:\ordner1\ordner2\file1.txt
c:\ordner1\ordner3\file2.txt

Die Frage ist, wie ich "ordner2" und danach "ordner3" als verwertbare Zeichenkette/String aus der Zeichenkette "c:\ordner1\ordner2\file1.txt" bzw. "c:\ordner1\ordner3\file2.txt" extrahieren und in der Form x:='ordner2'; verwenden kann.
Gleiches gilt für die Dateinamen "file1.txt" und "file2.txt" - aber ohne die Endung.

Ich gehe mal davon aus, dass für beide Fälle die gleiche Vorgehensweise zum Einsatz kommt.
Ebenso, dass es in ähnlicher Weise auch bei Edit-Elementen funktioniert.

Ich bedanke mich im Vorraus für die Hilfe,
TOMahawk85


Harry M. - Mi 17.05.06 22:33

 Pos, Copy sollten Deine Feunde sein.


TOMahawk85 - Mi 17.05.06 22:47

Ich hab gerade in der Hilfe nachgeschaut und es scheinen ganz nette Funktionen zu sein.
Aber was mache ich, wenn ich keine konkrete Zeichenkette angeben kann, aber trotzdem den 2. Ordner (egal wie er heißt), also den Bereich zwischen "\" und "\" ermitteln will. Dazu müsste ich ja den 1. Ordner (wieder egal wie er heißt) überspringen.


Harry M. - Mi 17.05.06 23:29


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
const
  Path = 'c:\ordner1\ordner2\File.txt';
var
  I: Integer;
  S: String;
begin
  S := ExtractFilePath(Path);
  Delete(S, 13);
  I := Pos('\', S);
  S := Copy(S, I, Length(S));
  Showmessage(S);
end;


TOMahawk85 - Do 18.05.06 00:53

Nun steht nur noch die Frage, wie ich eine Zeile bzw. ein Element (Pfad+Datei) einer listbox auswählen und diese Zeichenkette bearbeiten kann.


TOMahawk85 - Do 18.05.06 13:49

Kann mir jemand auf die schnelle helfen, denn ohne eine Lösung für das Problem (der Eintrag über diesem hier) kann ich auch nicht mehr anderweitig weiterprogrammieren.


ZeitGeist87 - Do 18.05.06 13:52

also mit listbox.items.strings[hier die position von deinem element]
herausselektieren

und so in einzelteile zerlegen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
uses FileCtrl;

var pfad: string;
  laufwerk: char;
  verzeichnisse, datei: string;
begin
  pfad:='c:\temp\test\test2.txt';
  ProcessPath(pfad, laufwerk, verzeichnisse, datei);
  // Neue Variableninhalte:
  // laufwerk: 'c'
  // verzeichnisse: '\temp\test'
  // datei: 'test2.txt'


Lannes - Do 18.05.06 15:20

Hallo,

@user profile iconZeitGeist87
ProcessPath(... kannte ich noch nicht :) , merken!
Leider muss die Datei auf dem Rechner existieren.

@user profile iconTOMahawk85
den letzten Ordner und den Dateinamen ohne Endung kannst Du auch mit in Delphi vorhandenen Funktionen ermitteln.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var Pfad, sTemp, LastDirPart, FileNameNoExt : String;
//...
Pfad := 'C:\temp\Ordner1\Ordner2\eineDatei.txt';

//Extension durch Leerstring ersetzen
sTemp := ChangeFileExt(Pfad,'');//         = 'C:\temp\Ordner1\Ordner2\eineDatei'

//FileName ermitteln
FileNameNoExt := ExtractFileName(sTemp);// = 'eineDatei'

//FileName incl. letzten Backslash abtrennen
sTemp := ExtractFileDir(sTemp);//          = 'C:\temp\Ordner1\Ordner2'

//nun wird die letzte Ordner-Ebene von ExtractFileName als Dateiname behandelt
LastDirPart := ExtractFileName(sTemp);//   = 'Ordner2'


ZeitGeist87 - Do 18.05.06 15:24

ging davon aus, dass die Dateien in der Listbox existieren =))))

aber gute Lösung @Lannes


TOMahawk85 - Do 18.05.06 21:49

Das ist jetzt genau das, was ich gebraucht habe.
Wenn nicht gerade jemand die Befehle kennt, sucht man sich noch einen Wolf in dem Berg an Befehlen.

Ich danke euch für eure Mühe.