TStringHelper und Join

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
kpmais
Beiträge: 42
Registriert: Di 26. Mai 2020, 08:51
OS, Lazarus, FPC: Winux (L 2.0.12, FPC 3.2.0; Debian/Win7)
CPU-Target: x86-64
Wohnort: Saarlouis/Saarland

TStringHelper und Join

Beitrag von kpmais »

Hallo Leute, ...

Ich versuche verzweifelt ein array of string nach split wieder mit einer Join-Anweisung zu rekombinieren.
Ich finde im gesamten Netz kein Beispiel dafür.
Wie ich die Help verstehe, sollte eine Stringvariable folgendermaßen mit den Daten aus einem array of string rekombiniert werden.
stringvariable.join(<neuer separator>,<stringarray>).
Compilieren tut er's. Aber die Stringvariable bleibt leer.

Wer kann mir helfen?

Vielen Dank

Klaus-Peter

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TStringHelper und Join

Beitrag von Socke »

Kannst du dein Problem vielleicht als kleines Programm schreiben? Ein wenig Quelltext könnte helfen, die Ursache zu finden.

Die Verwendung geht z.B. so:

Code: Alles auswählen

program Project1;

{$mode objfpc}{$H+}
{$ModeSwitch typehelpers}

uses
  SysUtils;

var
  s: String;
  a: TStringArray;
begin
  s := 'a,b,c';
  a := s.Split(',');
  s := String.Join(';',a); // man kann auch s.Join() schreiben - beim Join wird die Variable s aber eigentlich gar nicht verwendet, da Join gar nicht auf die Variable zugreifen kann
  Writeln(s);
  Readln;
end.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TStringHelper und Join

Beitrag von charlytango »

bin erstaunt ... scheinbar sind solche Funktionalitäten ab FPC 3.1 eingebaut.
Da kann ich wohl meine Tokenizer in Pension schicken.

weiß jemand was über die Performance ?

Wie flott ist diese OnBoard-Stringzerlegung ? (zu meinen Delphi Zeiten war die unit faststrings wohl das flotteste, obwohl sie von einigen als nicht sauber programmiert kritisiert wurde)

Benutzeravatar
kpmais
Beiträge: 42
Registriert: Di 26. Mai 2020, 08:51
OS, Lazarus, FPC: Winux (L 2.0.12, FPC 3.2.0; Debian/Win7)
CPU-Target: x86-64
Wohnort: Saarlouis/Saarland

Re: TStringHelper und Join

Beitrag von kpmais »

Guten Morgen und danke für deinen Tipp und das Beispiel.
Wenn ich genau dein Beispiel teste erhalte ich vom Compiler in der Zeile:

Code: Alles auswählen

s := String.Join(';',a);
an der Stelle String.Join die Fehlermeldung: 'Fatal: Syntax Error, ";" expected but "." found'.
So gehts überall, wenn ich Join einsetze.
Liegts an Linux? Fehlt da etwas?
Und die Compiler directive '{$ModeSwitch typehelpers}' ist mir hier auch unklar. Split, Pos etc. gehören doch ebenfalls zu
TStringHelpers und benötigt die doch auch nicht.

Hilfe, Hilfe, Hilfe .....

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: TStringHelper und Join

Beitrag von PascalDragon »

kpmais hat geschrieben:
Di 6. Apr 2021, 18:06
Ich versuche verzweifelt ein array of string nach split wieder mit einer Join-Anweisung zu rekombinieren.
Ich finde im gesamten Netz kein Beispiel dafür.
Wie ich die Help verstehe, sollte eine Stringvariable folgendermaßen mit den Daten aus einem array of string rekombiniert werden.
stringvariable.join(<neuer separator>,<stringarray>).
Compilieren tut er's. Aber die Stringvariable bleibt leer.
Die Join-Methode ist eine statische Funktion, das heißt du musst das Ergebnis zuweisen:

Code: Alles auswählen

stringvariable := String.Join(sep, arr);
charlytango hat geschrieben:
Di 6. Apr 2021, 18:55
weiß jemand was über die Performance ?

Wie flott ist diese OnBoard-Stringzerlegung ? (zu meinen Delphi Zeiten war die unit faststrings wohl das flotteste, obwohl sie von einigen als nicht sauber programmiert kritisiert wurde)
Am Besten selbst austesten. Ich glaube wir haben keine Performancetests gemacht. Der Code selbst ist in rtl/objpas/sysutils/syshelp.inc falls du ihn verbessern möchtest. ;)
kpmais hat geschrieben:
Mi 7. Apr 2021, 10:06
Liegts an Linux? Fehlt da etwas?
Welcher Compilerversion verwendest du? Ich kriege nämlich den gleichen Fehler nur, wenn ich 3.0.4 einsetze statt 3.2.0 oder neuer.
FPC Compiler Entwickler

Benutzeravatar
kpmais
Beiträge: 42
Registriert: Di 26. Mai 2020, 08:51
OS, Lazarus, FPC: Winux (L 2.0.12, FPC 3.2.0; Debian/Win7)
CPU-Target: x86-64
Wohnort: Saarlouis/Saarland

Re: TStringHelper und Join

Beitrag von kpmais »

FPC 3.0.4, .....
Da muss ich jetzt mal umpacken und testen ....
Interessant ...

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: TStringHelper und Join

Beitrag von marcov »

charlytango hat geschrieben:
Di 6. Apr 2021, 18:55
(zu meinen Delphi Zeiten war die unit faststrings wohl das flotteste, obwohl sie von einigen als nicht sauber programmiert kritisiert wurde)
Vergiss alle Delphi Benchmarks von vor-Unicode Zeiten (wie zb D7), speziell wenn es Stringhandling betrifft. Unicode hat eine Performance Zuschlag in FPC und Delphi

Teilweise auch weil man auf die nicht saubere Tricks verzichten muss.

Benutzeravatar
kpmais
Beiträge: 42
Registriert: Di 26. Mai 2020, 08:51
OS, Lazarus, FPC: Winux (L 2.0.12, FPC 3.2.0; Debian/Win7)
CPU-Target: x86-64
Wohnort: Saarlouis/Saarland

Re: TStringHelper und Join

Beitrag von kpmais »

nur zur Info.
Funktioniert jetzt problemlos. Wie beschrieben mit FPC 3.2.0.
Ich bin da gerade von Laz 2.0.8 auf 2.0.10 umgestiegen. Und ich muss sagen, dass ich nicht alles, was der FPC 3.2.0 im Gegensatz zum 3.0.4 macht nachvollziehen kann. Es treten Fehler auf im Gegensatz zum 3.0.4 sodass ich mir überlege zumindest bei meinen bisherigen Programmen beim älteren Compiler zu bleiben.
Gibt es da vielleicht irgendwelche Dokumentationen? Ich glaube kaum dass ich damit alleine bin.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TStringHelper und Join

Beitrag von Winni »

kpmais hat geschrieben:
Do 8. Apr 2021, 21:46
nur zur Info.
Funktioniert jetzt problemlos. Wie beschrieben mit FPC 3.2.0.
Ich bin da gerade von Laz 2.0.8 auf 2.0.10 umgestiegen. Und ich muss sagen, dass ich nicht alles, was der FPC 3.2.0 im Gegensatz zum 3.0.4 macht nachvollziehen kann. Es treten Fehler auf im Gegensatz zum 3.0.4 sodass ich mir überlege zumindest bei meinen bisherigen Programmen beim älteren Compiler zu bleiben.
Gibt es da vielleicht irgendwelche Dokumentationen? Ich glaube kaum dass ich damit alleine bin.

Hallo!

Hier ist das Announcement für 2.0.12. Mit vielen Links zu "Was hat sich alles geändert". Für Lazarus. Und für fpc: https://forum.lazarus.freepascal.org/ ... 455.0.html

Viel Spaß beim Lesen!


Winni

Antworten