Autor Beitrag
baphumet
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP
Delphi 7
BeitragVerfasst: Do 01.10.09 21:28 
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?

ausblenden 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.


Zuletzt bearbeitet von baphumet am Fr 02.10.09 11:36, insgesamt 1-mal bearbeitet
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.10.09 23:50 
Du kannst Pos auch auf die Einträge anwenden, ja, sicher.
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 02.10.09 11:37 
Wenn das eine leere Zeile ist, dann steht da ja nix drin, dann ist das doch richtig. ;-)