-
14. 12. 2011, 18:47 #1Mitglied
- Registriert seit
- Feb 2010
- Beiträge
- 26
Delphi 2007: Aus einer Stringliste einen Teilstring lesen
Hallo,
ich habe in einer Stringliste mehrere Teilstrings durch Simikolon getrennt.
Der Inhalt sieht wie folgt aus:
Maira;Müller;03.03.1965; Baumweg;17;44135;Dortmund
Heinz;Meier;07.10.1948; Hühnerstraße;1;44135;Dortmund
Jetzt möchte ich gerne jede Zeile der Stringliste durchgehen und nur folgendes ausgegeben bekommen.
Müller;03.03.1965;Dortmund
Meier;07.10.1948;Dortmund
Also alles was zwischen dem ersten und dritten Semikolon steht und nach dem letzten Semikolon.
for i := 0 to StrList.Count - 1 do
begin
Pos1 := Pos(';', StrLst.Strings[i]); // erstes simikolon
Pos2 := PosEx(';', StrLst.Strings[i], Pos1); // zweites simikolon
Test := Copy(StrLst.Strings[i], Pos2+1);
Aber weiter weis ich nicht....
Bin über jeden Tipp dankbar
-
14. 12. 2011, 22:00 #2
Re: Delphi 2007: Aus einer Stringliste einen Teilstring lesen
Ungetestet
Code:function GetToken(aString, SepChar: string; TokenNum: Byte): string; var Token: string; StrLen: integer; Num: integer; EndofToken: integer; begin StrLen := Length(aString); Num := 1; EndofToken := StrLen; while ((Num <= TokenNum) and (EndofToken <> 0)) do begin EndofToken := Pos(SepChar, aString); if EndofToken <> 0 then begin Token := Copy(aString, 1, EndofToken - 1); Delete(aString, 1, EndofToken); Inc(Num); end else Token := aString; end; if Num >= TokenNum then Result := Token else Result := ''; end;
Code:var s : String; for i := 0 to StrList.Count - 1 do begin s := GetToken(StrLst.Strings[i], ';'2)+ GetToken(StrLst.Strings[i], ';'3)+ GetToken(StrLst.Strings[i], ';'7); end;
-
14. 12. 2011, 23:01 #3Geisterfahrerüberholer
- Registriert seit
- Apr 2006
- Beiträge
- 4.720
Re: Delphi 2007: Aus einer Stringliste einen Teilstring lesen
Warum so umständlich? Die Klasse TStringList bringt alle Funktionen dafür schon mit.
Einfach jede Zeile via DelimitedText in eine neue TStringList laden und als Delimiter ';' verwenden. Und dann einfach die Elemente mit den gewünschten Index ausgeben.
Also:
Code:var adressen : TStringList; i : Integer; eintrag : TStringList; begin adressen := TStringList.Create; adressen.Add('Maira;Müller;03.03.1965; Baumweg;17;44135;Dortmund'); adressen.Add('Heinz;Meier;07.10.1948; Hühnerstraße;1;44135;Dortmund' ); eintrag := TStringList.Create; eintrag.Delimiter := ';'; for i := 0 to adressen.Count - 1 do begin eintrag.clear; eintrag.DelimitedText := adressen[i]; // abschließend eintrag[1]+';'+eintrag[2]+';'+eintrag[6] ausgeben bzw. speichern end; adressen.Free; eintrag.Free; end;
Ansonsten gibts für Delphi sicherlich auch Komponenten die CSV-Dateien einlesen können.
-
15. 12. 2011, 14:49 #4Mitglied
(Threadstarter)
- Registriert seit
- Feb 2010
- Beiträge
- 26
Re: Delphi 2007: Aus einer Stringliste einen Teilstring lesen
Das Problem ist, dass ich die Daten für die Stringliste aus mehreren Dateien einlesen und halt nicht alle Informationen benötige. Nächstes Problem, die "Teilstrings" sind nicht immer gleich lang...
@ Gehstock: Könntest du mir dein Codebeispiel noch erklären?
-
16. 12. 2011, 18:19 #5
Re: Delphi 2007: Aus einer Stringliste einen Teilstring lesen
hatte jetzt endlichmal ne IDE zur Hand also hier die berichtigte Version
Spoiler:
Code:unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; adressen : TStringList; implementation {$R *.dfm} function GetToken(aString, SepChar: string; TokenNum: Byte): string; var Token: string; StrLen: integer; Num: integer; EndofToken: integer; begin StrLen := Length(aString); Num := 1; EndofToken := StrLen; while ((Num <= TokenNum) and (EndofToken <> 0)) do begin EndofToken := Pos(SepChar, aString); if EndofToken <> 0 then begin Token := Copy(aString, 1, EndofToken); Delete(aString, 1, EndofToken); Inc(Num); end else Token := aString; end; if Num >= TokenNum then Result := Token else Result := ''; end; procedure TForm1.Button1Click(Sender: TObject); var s : String; i : Integer; begin for i := 0 to adressen.Count - 1 do//stringlist durchsuchen begin s := GetToken(adressen.Strings[i], ';',2) //sucht das zweite Vorkommen vom Trennzeichen ";" und zeigt den Text davor an bis zum letzten Trennzeichen + GetToken(adressen.Strings[i], ';',3)//das 3. + GetToken(adressen.Strings[i], ';',7);//und das 7. end; memo1.text :=s; end; procedure TForm1.FormCreate(Sender: TObject); begin adressen := TStringList.Create; adressen.Add('Maira;Müller;03.03.1965; Baumweg;17;44135;Dortmund'); adressen.Add('Heinz;Meier;07.10.1948; Hühnerstraße;1;44135;Dortmund' ); end; end.
-
17. 12. 2011, 01:15 #6Geisterfahrerüberholer
- Registriert seit
- Apr 2006
- Beiträge
- 4.720
Re: Delphi 2007: Aus einer Stringliste einen Teilstring lesen
Wo ist da das Problem? in meinen Beispiel, kannst du dir anschließend die Einträge aus den einzelnen Zeilen herraus suchen, die du benötigst. Prinzipell macht das Beispiel von Gehstock auch nichts anderes.
Was meinst du mit nicht gleich lang? Falls verschiedene Dateien eine unterscheidliche Anzahl von Einträgen pro Zeile besitzen, dann funktioniert auch der Code von Gehstock nicht. Dann müsstest du eigentlich für jede Datei ein sparates Interface entwickeln.
-


Zitieren

mehr lesen...







Resident Evil 6 erscheint in...
Heute, 15:21 in gulli:news