ExtractDelimited mit variablem Trenner

Rund um die LCL und andere Komponenten

ExtractDelimited mit variablem Trenner

Beitragvon Timm Thaler » 14. Jan 2019, 03:38 ExtractDelimited mit variablem Trenner

Ich möchte einen String aus Messwerten '123,456,789' mit ExtractDelimited (https://www.freepascal.org/docs-html/rtl/strutils/extractdelimited.html) auseinandernehmen.

Der Trenner kann dabei variabel sein, je nach Quelle ';' ',' oder anders, steht aber beim Kompilieren nicht fest. Mit ExtractDelimited(k, data, [tsep]) kann ich aber nur konstante Trenner setzen.

Gibt es eine Möglichkeit, an dieser Stelle variable Trenner anzugeben, die ich nicht sehe?

Um das klarzustellen, ich will nicht alle möglichen Trenner mit [',', '.', ';', ':'] angeben. Ich will genau einen Trenner angeben, aber der kann je nach Datenquelle unterschiedlich sein.

Workaround wäre, mit einem festen Trenner in ExtractDelimited zu arbeiten und vorher den variablen Trenner im Datenstring durch diesen zu ersetzen.
Timm Thaler
 
Beiträge: 937
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Ally » 14. Jan 2019, 09:44 Re: ExtractDelimited mit variablem Trenner

Hallo Timm Thaler,

vielleicht hilft dir da Split weiter.

Code: Alles auswählen
var
  Zeile: String;
  Trenner: String;
  Werte: TStringArray;
.
.
.
  Zeile := '123,456,789';
  Trenner := ',';
 
  // String in seine Einzelteile zerlegen
  Werte := Zeile.Split(Trenner);
 
  // Werte verwenden
  ErsterWert := Werte[0];
  ZweiterWert := Werte[1];
  DritterWert := Werte[2];
.
.
 


Gruß Roland
Ally
 
Beiträge: 107
Registriert: 11. Jun 2009, 08:25

Beitragvon wp_xyz » 14. Jan 2019, 09:49 Re: ExtractDelimited mit variablem Trenner

Wieso soll das nicht funktionieren? Bloß weil die Delimiter als "const" in der Funktion deklariert sind, heißt nicht, dass sie auch im Programm "const" sein müssen. "const" heißt bei einer Prozedur/Funktion lediglich, dass der Parameter innerhalb der Funktion nicht verändert werden kann.

Der folgende Code funktioniert bei mir zumindest:
Code: Alles auswählen
var
  KannAuchStrichpunktSein: Boolean = true;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  delim: TSysCharset;
begin
  s := 'eins, zwei; drei,vier,fünf';
  delim := [','];
  if KannAuchStrichpunktSein then delim := delim + [';'];
  Caption := '"' + ExtractDelimited(2, s, delim) + '"';
end;
wp_xyz
 
Beiträge: 2915
Registriert: 8. Apr 2011, 08:01

Beitragvon Timm Thaler » 14. Jan 2019, 16:48 Re: ExtractDelimited mit variablem Trenner

wp_xyz hat geschrieben:Der folgende Code funktioniert bei mir zumindest:


Das ist aber nicht, was ich will, ind den [] stehen ja wieder Konstanten.

Es funktioniert aber trotzdem mit ExtractDelimited(k, data, [tsep]), nur darf tsep kein String, sondern muss ein Char sein. Die Fehlermeldung "Illegal Expression" an der Stelle ist etwas nichtssagend.
Timm Thaler
 
Beiträge: 937
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried