[Tustep-Liste] SPLIT mit Bedingungen

Christian Griesinger griesinger at uni-wuppertal.de
Do Jun 24 14:52:33 CEST 2021


Lieber Thomas,

vielleicht klappt es so:

#MAKRO
$$ MODE TUSCRIPT, {}
SET strings = *
DATA eins;zwei;drei;vier
DATA fünf;"sechs;sieben";‹açht›;neun
DATA #."elf#.;;zwölf;dreizehn#.";vierzehn

BUILD S_TABLE trenner = *
DATA |;|
DATA ||#.;|%;|[*{-}#.]{[}"*"||

LOOP string = strings
    PRINT string
    SET getrennt = SPLIT(string, trenner)
    TRACE * getrennt
ENDLOOP
*eof

Innerhalb der Ausnahmezeichenfolgen der Suchtabelle trenner habe ich versucht,
eine linke Randbedingung mit {[} einzuführen. Die Bedingung selbst  
[*{-}.] soll
ausschließen, dass vor dem Anführungszeichen ein #. steht.

Mit den Variablen, die du mitgeschickt hast, scheint es zu funktionieren,
aber vielleicht muss man die Randbedingung noch präziser formulieren.

-- 
Viele Grüße
Christian Griesinger, M.A.
Bergische Universität Wuppertal
Fakultät 1: Geistes- und Kulturwissenschaften
Ältere deutsche Literatur, O.08.07
Gaußstraße 20
42119 Wuppertal
Tel: +49 202 439 3301
Mail: griesinger at uni-wuppertal.de


Zitat von "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





Mehr Informationen über die Mailingliste Tustep-Liste