[Tustep-Liste] SPLIT mit Bedingungen

Kuno Schälkle schaelkle at zdv.uni-tuebingen.de
Fr Jun 25 14:53:37 CEST 2021


Lieber Herr Kollatz,

ich fürchte, ich habe etwas falsch verstanden.
Wenn nicht, könnten Sie Ihr Problem mit
folgenden Anweisungen lösen.

BUILD S_TABLE trenner = *
DATA ||"*"|%;|#.;|#."||
DATA |;|

SET d = *
DATA ”elf‹;zwölf;dreizehn”;vierzehn

SET x = SPLIT (d, trenner) 

Mir scheint, dass damit Ihre Beispieldaten
wie gewünscht aufgeteilt werden.

Herzliche Grüße
Ihr Kuno Schälkle



> Am 24.06.2021 um 13:23 schrieb Kollatz, Thomas <Thomas.Kollatz at adwmainz.de>:
> 
> 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 <http://orcid.org/0000-0003-1904-1841>
> 
> 
> 
> -- 
> Tustep-Liste mailing list
> Tustep-Liste at itug.de
> https://lists.itug.de/mailman/listinfo/tustep-liste

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


Mehr Informationen über die Mailingliste Tustep-Liste