[Tustep-Liste] SPLIT mit Bedingungen

Kollatz, Thomas Thomas.Kollatz at adwmainz.de
Do Jun 24 13:23:06 CEST 2021


Liebe Liste,

ich habe ein Problem, zu dem mir  bislang keine elegante Lösung eingefallen ist.

Ich will eine Variable aufteilen (splitten) und zwar nach jedem Semikolon ;

VARIABLE vorher:
eins; zwei;drei;vier

VARIABLE gesplittet:
eins
zwei
drei
vier

Kein Problem, ein Skript mit diesem Resultat könnte so aussehen:

$$ MODE {}

$$ SET/DATA variable1
eins;zwei;drei;vier
$$ ENDDATA

$$ BUILD S_TABLE trenner1 ="|;|"
$$ x=SPLIT (variable1,trenner1)


x            = *
           1 = eins
           2 = zwei
           3 = drei
           4 = vier


Soweit so gut, machen wir es etwas komplizierter, indem wir ein paar Sonderzeichen an denen *nicht* gesplittet werden soll, einbauen (ç TUSTEP %;C und ein einfaches französisches Anführungszeichen #.;) , ausserdem soll nicht bei Semikola, die zwischen Textdelimintoren " stehen, getrennt werden:

fünf;"sechs;sieben";#.;a%;cht#.:;neun

Mit dem einfachen Trenner ";" in S_TABLE Trenner1, würde folgendes passieren:
x            = *
           1 = fünf
           2 = "sechs
           3 = sieben"
           4 = #.
           5 = a%
           6 = cht#.:
           7 = neun

Mit einer S_TABLE, die Ausnahmen definiert, funktioniert es.
Nicht berücksichtigt werden Semikola, die zwischen " " stehen; sowie die französischen Anführungszeichen mit linker Spitze und Cedille %; ausgenommen werden:

$$ BUILD S_TABLE trenner2=*
||"*"|%;|#.;||
|;|

Ergebnis, wie gewünscht:
x            = *
           1 = fünf
           2 = "sechs;sieben"
           3 = #.;a%;cht#.:
           4 = neun


Jetzt zum eigentlichen Problem. Meine Nutzer und Nutzerinnen setzen immer mal wieder gerne den doppelten Apostroph (TUSTEP #.").
Daran scheitere ich und komme zu meiner Frage:
Wie müsste die Definition für den "Trenner" aussehen, damit das folgende Beispiel

#."elf#.;;zwölf;dreizehn#.";vierzehn”

wie folgt gesplittet wird:

#."elf#.;
zwölf
dreizehn#."
vierzehn

Mit dem einfachen Trenner ; passiert das folgende:
x            = *
           1 = #."elf#.
           2 =
           3 = zwölf
           4 = dreizehn#."
           5 = vierzehn

Mit dem für das zweite Beispiel angepassten:
x            = *
           1 = #."elf#.;;zwölf;dreizehn#."
           2 = vierzehn

Hat jemand eine Idee, wie sich das mit einer S_TABLE lösen lässt, die TUSTEP-Sonderzeichen #." %;  #.; berücksichtigt *und* zwischen " " stehende Zeichen nicht splittet (siehe oben S_TABLE trenner2) und sich dabei nicht von #." aus dem Konzept bringen lässt.

Meine unelegante Lösung tauscht das störende #." in <az/> aus und fügt es anschliessend wieder ein. Das geht, führt aber zu weiteren Problemen.
Eleganter wäre es mit einer S_TABLE für alle.

Herzliche Grüße in die Runde
Thomas Kollatz
http://orcid.org/0000-0003-1904-1841



-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://lists.itug.de/pipermail/tustep-liste/attachments/20210624/8b5efbce/attachment.htm>


Mehr Informationen über die Mailingliste Tustep-Liste