String mit Delimiter zu einem Array parsen

Vorstellungen von Programmen, welche mit Lazarus erstellt worden.

String mit Delimiter zu einem Array parsen

Beitragvon LazyBone » 20. Mai 2016, 12:41 String mit Delimiter zu einem Array parsen

Hallo Forum und alle suchenden Freunde,
weiß nicht, ob ich hier richtig bin, aber da ich selber auf der Suche nach so etwas war, stelle ich euch einfach mal einen Schnipsel Code zur Verfügung, der einen String s mit Delimitern delim in ein Array aus Einzelstrings aufteilt.
Wichtig ist hier die unit StrUtils!


Code: Alles auswählen
 
uses StrUtils...
...
type TStringArray = Array Of String;
...
 
function ParseStrToArray(const s:string; delim: char):TStringArray;
   var tsa: TStringArray;
       sbuf: string;
       x: byte;
   begin
     if s='' then
        begin
           result := nil;
           exit;
        end;
     sbuf := s;
     setlength(tsa,0);
     x := PosEx(delim,sbuf);
     while (x > 0) or (length(sbuf)>0) do
        begin
           setlength(tsa,length(tsa)+1);
           if (x=0) and (length(sbuf)>0) then
              tsa[length(tsa)-1] := sbuf
           else
              tsa[length(tsa)-1] := leftstr(sbuf, x-1);
           if (x=0) and (length(sbuf)>0) then
              sbuf := ''
           else
              sbuf := rightstr(sbuf,length(sbuf)-x);
           x := PosEx(delim,sbuf);
        end;
     result := tsa;
   end;


Macht dann z.B. aus einem String s='A12;BX;XV;VG' und delim=';' das Array ['A12','BX','XV','VG]

Hat bisher gute Dienste geleistet...
Je nach Länge des eingegebenen Strings kann Byte für x ggf knapp werden, dann doch einfach einen longword oder was draus machen :mrgreen:
Viele Grüße!
LazyBone
 
Beiträge: 6
Registriert: 21. Apr 2016, 13:20

Beitragvon Mathias » 20. Mai 2016, 16:46 Re: String mit Delimiter zu einem Array parsen

Praktische Funktion, sowas habe ich auch schon gebraucht.

aber da ich selber auf der Suche nach so etwas war,


Ab FPC 3.1 ist diese Funktion direkt eingebaut.

Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
const
  s = 'A12;BX;XV;VG';
var
  sr: TStringArray;
  i: integer;
begin
  sr := s.Split(';');
  for i := 0 to Length(sr) - 1 do begin
    Memo1.Lines.Add(sr[i]);
  end;
end;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3194
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 20. Mai 2016, 16:48 Re: String mit Delimiter zu einem Array parsen

...oder ähnlich auch TStringList

Code: Alles auswählen
var Sl:TStringList;
  i: Integer;
begin
 Sl:=TStringList.Create;
 Sl.Delimiter:=';';
 Sl.DelimitedText:='A12;BX;XV;VG';
 for i :=0 to Sl.Count-1 do ShowMessage(Sl[i]);
 Sl.Free;;
end;   
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 20. Mai 2016, 17:01 Re: String mit Delimiter zu einem Array parsen

Mit der StringList hat es mit früher auch weiter geholfen.

Ich habe gerade festgestellt, das Spilt noch einen weg weiter geht, man kann mehrere Trenn-Zeichen eingeben.
So wie ich mich erinnern mag, hatte fpc 3.1 Anfangs Jahr dies mit der Char-Array noch nicht eingebaut.

Hat StringList so etwas auch eingebaut ?

Code: Alles auswählen
const
  s = 'A12;BX;XV;VGA;12.BX.XV.VG';
var
  sr: TStringArray;
  i: integer;
begin
  sr := s.Split([';','.']);
  for i := 0 to Length(sr) - 1 do begin
    Memo1.Lines.Add(sr[i]);
  end;
end


FPC wird immer besser. :P
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3194
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Programme



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried