MS-Tech
1st May 2016, 16:38
Hallo Zusammen,

gibt es eine "Split" Funktion für einen String, d.h. Ich habe einen kompletten String, der sich aus "String;String;String;String;" zusammensetzt. Jetzt möchte ich gerne diesen String anhand des Separators ";" trennen und ein Array erhalten. Gibt es sowas bzw. wie kann ich sowas auf einfache Art und Weise lösen?

Viele Grüße
MS-Tech

JaapJD
2nd May 2016, 09:40
Function string.scan()

andreas.toepper
2nd May 2016, 09:41
Das müsste mit der string.scan(..) Funktion zu erledigen sein.

Upps - zu spät.

MS-Tech
2nd May 2016, 15:51
Hallo Zusammen,

vielen Dank für die Antworten. Die Funktion sieht ganz gut aus, aber ich muss hier ja das korrekte Format wissen, soweit ich gelesen habe. Was mache ich nun, wenn ich einen String dynamischer Länge habe?

z.B. String;String;String / String;String / String / String;String;String;String etc.

Viele Grüße
MS-Tech

andreas.toepper
2nd May 2016, 16:35
Ich habe mir da eine Funktion geschrieben, welche die Daten trennt und in einem Array speichert. Ganz banal zu Fuß: mit POS() das nächste Trennzeichen suchen, abtrennen und dann den Rest wieder mit POS() absuchen, bis nichts mehr da ist.

#define PUFFER_MAXLEN 1024

function void handle.data(string puffer(PUFFER_MAXLEN))
|Aktuelle zeile in Felder aufteielen:
{
string field.data(PUFFER_MAXLEN)
string rest(PUFFER_MAXLEN)
long i, start.pos

rest = puffer


start.pos = pos(rest, ";")

I = 0

while len(rest) > 0
|Aktuelles Feld:
if start.pos = 0 then
field.data = strip$(rest)
rest = ""
else
field.data = strip$(rest(1; start.pos - 1))
endif
|Rest:
rest = rest(start.pos + 1; PUFFER_MAXLEN - start.pos)
|Aktuelles Feld behandeln
i = i + 1
|Feld bearbeiten:
handle.field(field.data, i)
|Ende von nächstem Feld suchen:
start.pos = pos(rest, ";")
endwhile
}

handle.field(..) speichert dann den Wert in einem String (und macht bei mir noch weitere Aufgaben, wie Anführungszeichen entfernen usw.)

MS-Tech
2nd June 2016, 12:18
Hallo Andreas,

danke für deine Funktion. Ich war jetzt länger nicht mehr hier und werde diese gleich mal ausprobieren.

Viele Grüße
MS-Tech

bdittmar
7th June 2016, 13:59
Hallo Zusammen,

vielen Dank für die Antworten. Die Funktion sieht ganz gut aus, aber ich muss hier ja das korrekte Format wissen, soweit ich gelesen habe. Was mache ich nun, wenn ich einen String dynamischer Länge habe?

z.B. String;String;String / String;String / String / String;String;String;String etc.



Viele Grüße
MS-Tech

Hallo,

ret = string.scan(inputstring, "%s;%s;%s/%s;%s/%s/%s;%s usw.",string1,string2,string3.........)

Bei dyn. Laenge mit POS, Problem = unterschiedliche separator ?

MFG

MS-Tech
9th February 2017, 16:08
Danke für die Funktion. Klappt soweit.

Grüße
MS-Tech