Ich möchte einen String aus Messwerten '123,456,789' mit ExtractDelimited (https://www.freepascal.org/docs-html/rt ... mited.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.
ExtractDelimited mit variablem Trenner
-
- Beiträge: 1224
- Registriert: So 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
- Ally
- Beiträge: 280
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: ExtractDelimited mit variablem Trenner
Hallo Timm Thaler,
vielleicht hilft dir da Split weiter.
Gruß Roland
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];
.
.
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:
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;
-
- Beiträge: 1224
- Registriert: So 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
Re: ExtractDelimited mit variablem Trenner
Das ist aber nicht, was ich will, ind den [] stehen ja wieder Konstanten.wp_xyz hat geschrieben:Der folgende Code funktioniert bei mir zumindest:
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.