Hi,
danke Dir für Deine Antwort:
Allerdings muß ich dazu sagen, dass ich nur Delph 5 habe (und derzeit keinen Platz, um Lazarus oder eine Trial zu installieren, da ich gerade wichtige Planungsvideos auf meinem Laptop habe.
Mhh, ja, sicher ist da viel auf einemal.
Angefangen hatte ich auch erst nur mit den x01 und 01 (Typ A; Typ B) Zeichenketten und die bearbeitet. Das ging auch gut.
Dann dachte ich mir .. Ok, die restlichen kannste ja noch mit Kommt ein Komma vor oder wenn, sogar mehrere ...
und eigentlich würde ich das gerne mit Pointern machen (darum auch der Inc()-operator und einzelne Vegleich
hier nochmal der VErsuch einer verkürzten Version der oben ... aber ich seh gerade, der Übersicht hilft das gar nicht.
und die Ergebnisse sind auch wieder total andere:
0,,25,01640X0174,01747,23,,,,47X014747
wird zu
025, Typ B: ,640, Typ A: 174, Typ B: ,747,2347, Typ A: 14747
Delphi-Quellcode:
procedure TForm1.Button9Click(Sender: TObject);
var Rest, s, TEX: string;
Menge, Laenge, i: Integer;
begin
// 8 8 88 888 X01
S := '2,9,0171,,25,01640X0174,01747,23,,,,47X014747'; //
S := '0,,25,01640X0174,01747,23,,,,47X014747'; //
laenge := length(s);
i := 0;
Menge := 0;
while i < laenge do
begin
inc(i);
if s[i] = '5' then
Caption := s[i];
if (s[i] = 'X') and (s[i + 1] = '0') then // -> x01
begin
if (s[i + 2] = '1') then // wenn X01
TEX := TEX + ',' + ' Typ A: ';
inc(i);
end
else ////////////////////////////////////
// Caption := s[i];
if (s[i] = '0') and (s[i + 1] = '1') then // normaler 01
begin
TEX := TEX + ',' + ' Typ B: ';
inc(i);
end
else ////////////////////////////////////
if (s[i] = ',') then // and (s[i + 1] = ',') then // DOPPELTE Trenner finden
begin
inc(Menge);
end
else ////////////////////////////////////
if Menge > 0 then
begin
Caption := s[i];
if Menge = 1 then
TEX := TEX + ',' + s[i]
else
TEX := TEX + s[i];
Menge := 0; //
end
else
TEX := TEX + s[i]; // LAST CHANGE
end; // END WHILE
Memo2.text := TEX;
Memo1.text := S;
end; //
Mit Regex usw. kenn ich mich gar nicht aus. ...