TStringlist.Values mit Array füllen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pschoett
Beiträge: 36
Registriert: Sa 7. Feb 2015, 11:48

TStringlist.Values mit Array füllen

Beitrag von pschoett »

Hallo allerseits,
ich habe eine CSVdatei mit einer Kopfzeile und einer Datenzeile in eine Stringlist eingelesen.

Code: Alles auswählen

// Ja, ich habe es vor Wochen mit ( String.Delimiter:=";" ) ausprobiert, aber irgendwas funktionierte da nicht :(
Stringlist.Add( copy(sKopf, 1, pos(';', sKopf)-1) + '=' + copy(sDaten, 1, pos(';', sDaten)-1));
// Das entspricht dann, auch wenn es falsche Syntax ist.
Stringlist.Names[i] = copy(sKopf, 1, pos(';', sKopf)-1)
Stringlist.Values[i] = copy(sDaten, 1, pos(';', sDaten)-1)  

Jetzt habe ich das Problem, dass die CSV ab und an mehr als eine Datenzeile enthält. Ich möchte gerne weiterhin Stringlist verwenden, aber ich weiß nicht wie ich für Values quasi ein Array aus den passenden Werten der Datenzeilen eintragen kann.
Kann ich das immer noch mit Stringlist Names und Values lösen?
Welche Alternative empfehlt ihr?

Gruß,
Peter

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TStringlist.Values mit Array füllen

Beitrag von wp_xyz »

Wenn du bei einer StringList den Delimiter und den DelimitedText verwendest, ist es oft sinnvoll, auch StrictDelimiter auf true zu setzen, denn sonst wird auch an Leerzeichen getrennt:

Code: Alles auswählen

program Project1;
 
uses
  Classes;
var
  L: TStringList;
  i: Integer;
begin
  L := TStringList.Create;
  try
    L.Delimiter := ';';
    L.StrictDelimiter := true;   // Kommentiere das aus, um den Unterschied zu sehen
    L.DelimitedText := 'Hallo;Welt;Hallo Welt;"nochmal Hallo Welt"';
    for i:=0 to L.Count-1 do
      WriteLn(i, ': ', L[i]);
  finally
    L.Free;
  end;
 
  ReadLn;
 
end.

pschoett
Beiträge: 36
Registriert: Sa 7. Feb 2015, 11:48

Re: TStringlist.Values mit Array füllen

Beitrag von pschoett »

Danke, das klappt so weit auch.

Das dynamische Erstellen von Komponenten zur Laufzeit habe ich mit Hilfe dieses Beitrags auch hinbekommen.

Antworten