Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TStringList POS benutzen


baphumet - Do 01.10.09 21:28
Titel: TStringList POS benutzen
Hi,

ich habe eine StringList in dieser speichere ich Strings ab, ich weiß wie man Strings mithilfe der Funktion POS teilen kann und das gelingt mir auch. Meine Frage ist, geht dies auch mit den Strings innerhalb einer StringList ohne diese in eine separate Variable kopieren zu müssen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
    StringList: TStringList;
begin
    StringList:=TStringList.Create;
    StringList.Add('34;5a'); //möchte ich teilen
    StringList.Add('66;2a'); //möchte ich teilen
end;


Es kann sein das ihr mir ratet bevor ich die Werte über Edits in eine StringList speichere diese zu teilen, aber ich benötige diese in dieser Form in der StringList, denn ich muß feststellen, welcher Teil der rste und dee zweite ist, dies geschieht ja mit dem a.


FinnO - Do 01.10.09 22:16

erstmal solltest du einen String in ' ' setzen, damit er auch als String und nicht als Bezeichner oder Zahl angesehen wird.

Teilen kannst du den String dann ja beim erneuten Laden.


jaenicke - Do 01.10.09 23:50

Du kannst Pos auch auf die Einträge anwenden, ja, sicher.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  try
    StringList.Add('34;5a');
    ShowMessage(Copy(StringList[i], 1, Pos(';', StringList[i]) - 1));
    ShowMessage(Copy(StringList[i], Pos(';', StringList[i]) + 1, MaxInt));
  finally
    StringList.Free;
  end;
Allerdings würde ich das nicht empfehlen, da so der String mehrfach zwischengespeichert werden muss.

Eine einfachere Möglichkeit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  try
    StringList.NameValueSeparator := ';';
    StringList.Add('34;5a');
    ShowMessage(StringList.Names[i]);
    ShowMessage(StringList.ValueFromIndex[i]);
  finally
    StringList.Free;
  end;


baphumet - Fr 02.10.09 11:36

Ok, die letzte Variante hat wirklich gut funktioniert, nur beim letzen Showmessage erhalte ich als Argument einen leeren String, aber dieser sollte doch mein Trennzeichen sein das mit NameValueSeparator festgelegt wurde, oder sehe ich da was falsch?


jaenicke - Fr 02.10.09 11:37

Wenn das eine leere Zeile ist, dann steht da ja nix drin, dann ist das doch richtig. ;-)