Text butler: Unterschied zwischen den Versionen
(→Links) |
|||
(52 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
= Links = | = Links = | ||
* [[Flutter-Apps]] | * [[Flutter-Apps]] | ||
* [[text_slave EN]] | |||
= Zielsetzung = | = Zielsetzung = | ||
Der | Der Textbutler ist eine Flutter-App. Diese erlaubt die "Wandlung von Text", wobei ein | ||
'''Ausgabetext''' gewandelt wird, aber auch "Informationen" über einen Text. | '''Eingabetext''' in einen '''Ausgabetext''' gewandelt wird, aber auch "Informationen" über einen Text. | ||
Als Wandlung gibt es: | Als Wandlung gibt es: | ||
Zeile 34: | Zeile 35: | ||
= Kommandos = | = Kommandos = | ||
Kommandos bestehen aus dem Kommandonamen und Parametern, die mit <code>parameter=wert</code> angegeben werden, außer bei boolschen Parameter, da entfällt die "Zuweisung". | Kommandos bestehen aus dem '''Kommandonamen''' und '''Parametern''', die mit | ||
<code>parameter=wert</code> angegeben werden, außer bei boolschen Parameter, | |||
da entfällt die "Zuweisung". Die Reihenfolge der Parameter ist unerheblich. | |||
'''Konvention''' für '''Parameter im Plural''': Existiert ein Parameter im Singular und Plural, wird der Parameter im Plural '''groß geschrieben''': Beispiel: value und Values. Grund: Damit können beide Namen abgekürzt werden. | |||
Parameter mit Texten benötigen '''Delimiter'''. Jedes Zeichen außer Buchstaben und Ziffern darf als Delimiter benutzt werden, wichtig ist nur, dass der gewählte Delimiter am vor und nach dem String stehen. | |||
Zulässige Beispiele sind <code>regexpr=!<a href="#">(.*?)</a>!</code>, <code>what="super"</code> | |||
oder <code>text=?Delimiter sind " oder '?</code>. | |||
Es gibt Parameter, die keinen Delimiter brauche, weil sie ein Zeichen lang sind, oder keine Blanks enthalten können (Puffernamen). | |||
Parameter '''mit Listen''' benötigen einen Separator, der die Listenelemente trennt. Enthält die Liste Texte, so wird ein "Auto-Separator" benutzt: das ist das erste Zeichen der Liste, | |||
beispielsweise <code>Values=";a;b;c"</code>. | |||
== clear == | == clear == | ||
Zeile 40: | Zeile 54: | ||
=== Parameter === | === Parameter === | ||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| Das Ergebnis wir in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|} | |||
=== Beispiel === | === Beispiel === | ||
Zeile 48: | Zeile 72: | ||
== copy == | == copy == | ||
Kopiert einen Puffer in einen anderen, oder einen | Kopiert einen Puffer in einen anderen, oder einen gegebenen Text in einen Puffer. | ||
=== Parameter === | === Parameter === | ||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''append''' | |||
|boolean | |||
| Das Ergebnis wird im Zielpuffer angehängt | |||
| append | |||
|- | |||
| '''input''' | |||
| Puffername | |||
| Puffer, der kopiert wird. Voreinstellung: input | |||
| input=examples | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| Das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|- | |||
| '''text''' | |||
| string | |||
| Kann alternativ zu '''input''' angegeben werden. Dann wird dieser Text ins Ziel kopiert. | |||
Kann auch ein '''interpolierter Text''' sein, dann steht vor dem Delimiter i und das Esc-Zeichen. | |||
| text="Hello" text=i%"First line%nSecond line" | |||
|} | |||
=== Beispiele === | === Beispiele === | ||
Im Puffer "input" steht | Im Puffer "input" steht: | ||
<pre>Hello World | |||
</pre> | |||
Im Puffer "todo" steht: | |||
<pre>Greetings | |||
</pre> | |||
Kommando: | |||
<pre>copy out=todo append | <pre>copy out=todo append | ||
</pre> | </pre> | ||
Danach steht in "todo" | Danach steht in "todo" | ||
<pre>Greetings | |||
Hello World | |||
</pre> | |||
Kommando: | |||
<pre>copy text="Hi Jonny!" | <pre>copy text="Hi Jonny!" | ||
</pre> | </pre> | ||
Danach steht in Puffer "output" | Danach steht in Puffer "output": | ||
<pre>Hi Jonny! | |||
</pre> | |||
= count = | == count == | ||
Zählt das Vorkommen eines Suchmusters in einem Puffer. | Zählt das Vorkommen eines Suchmusters in einem Puffer. | ||
== Parameter == | === Parameter === | ||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
* '''template''' | ! Beschreibung | ||
* '''regexpr''' | ! Beispiel | ||
|- | |||
| '''append''' | |||
|boolean | |||
| Das Ergebnis wird im Zielpuffer angehängt. | |||
| append | |||
|- | |||
| '''ignore''' | |||
|boolean | |||
| Groß-/Kleinschreibung spielt keine Rolle. | |||
| ignore | |||
|- | |||
| '''input''' | |||
| Puffername | |||
| In diesem Puffer wird gezählt. Voreinstellung: input | |||
| input=adresses | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| Das Ergebnis wir in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|- | |||
| '''marker''' | |||
| character | |||
| Definiert einen Platzhalter für die Ergebniszahl in '''template'''. Voreinstellung: '#' | |||
| marker=* | |||
|- | |||
| '''template''' | |||
| string | |||
| Vorlage, wie die Ergebnismeldung aussieht. Muss '''marker''' enthalten. Voreinstellung: der Wert von '''marker''' | |||
| template="# hits: *" | |||
|- | |||
| '''regexpr''' | |||
| regulärer Ausdruck | |||
| Suchmuster als regulärer Ausdruck. | |||
| regexpr=/(\d+)/ | |||
|- | |||
| '''what''' | |||
| string | |||
| Suchmuster als String ohne Metazeichen. | |||
| what="address" | |||
|} | |||
== Beispiele == | '''Hinweis:''' Es muss genau einer von '''regexpr''' oder '''what''' angegeben werden, nicht beide oder keiner. | ||
Im Puffer "input" steht: | |||
=== Beispiele === | |||
Im Puffer "input" steht: | |||
<pre>Be or not to be, that's the question! | |||
Hic Rhodos, Hic salta! | |||
</pre> | |||
Kommando: | |||
<pre>count what="e" | <pre>count what="e" | ||
</pre> | </pre> | ||
Danach steht in "output": 4 | Danach steht in "output": | ||
<pre>count regex=/\S+/ template=" | <pre>4 | ||
</pre> | |||
Kommandos: | |||
<pre>count regex=/\S+/ template="# Wörter" output=statistic | |||
count regexpr=/[.;!?]/ t=', # Sätze' o=statistic append | |||
count regexpr=/./ t=', # Zeichen' o=statistic append | |||
</pre> | |||
Danach steht im Puffer "statistic": | |||
<pre>12 Wörter, 2 Sätze, 59 Zeichen | |||
</pre> | |||
== duplicate == | |||
"Vervielfachen" eines Textes, wobei mit Platzhaltern laufende Nummern, laufende Zeichenfolgen oder spezifizierte Einzelwerte enthalten sein können. | |||
Diese Platzhalter werden im Vorlagetext eingefügt und bei der Duplizierung durch konkrete Werte ersetzt. | |||
=== Parameter === | |||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''append''' | |||
| boolean | |||
| Das Ergebnis wird im Zielpuffer angehängt. | |||
| append | |||
|- | |||
| '''baseChar''' | |||
| character | |||
| Basis für laufende Zeichenfolge. | |||
| baseChar=a | |||
|- | |||
| '''count''' | |||
| int | |||
| So oft wird der Text kopiert. | |||
| count=3 | |||
|- | |||
| '''input''' | |||
| Puffername | |||
| Der Text aus diesem Puffer wird vervielfacht. Voreinstellung: input | |||
| input=data | |||
|- | |||
| '''ListValues''' | |||
| stringList | |||
| eine Liste von Textlisten, wenn mehrere fortlaufende Elemente verwendet werden. Verschachtelte Auto-Separatoren: | |||
Einer zum Trennen der "Bereiche", im Beispiel ";", je Bereich einer zum Trennen der Werte, im Beispiel "," und "/". | |||
| ListValues=";,adam,berta,charly;/male/female/diverse;,41,23,59" | |||
|- | |||
| '''meta''' | |||
| character | |||
| Delimiter für die Platzhalter innerhalb von '''input'''. Voreinstellung: % | |||
| meta=% | |||
|- | |||
| '''offset''' | |||
| int | |||
| Basis für laufende Elemente. Voreinstellung: 0 | |||
| offset=100 | |||
|- | |||
| '''Offsets''' | |||
| intList | |||
| Eine Liste von Offsets, wenn mehrere fortlaufende Elemente verwendet werden. | |||
| Offsets=10,1,100 | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|- | |||
| '''step''' | |||
| int | |||
| Abstand zwischen zwei fortlaufenden Elementen. | |||
| step=2 | |||
|- | |||
| '''Steps''' | |||
| intList | |||
| Eine Liste von '''step'''-Angaben, wenn mehrere fortlaufende Elemente verwendet werden. | |||
| Steps=2,1,10 | |||
|- | |||
| '''Values''' | |||
| stringList | |||
| Eine Liste von Texten, die fortlaufend eingefügt werden. Auto-Separator. Kann auch interpolierter Text sein. | |||
| Values=",bob,eva" | |||
Values=i%",%tone%n,%ttwo%n,%tthree%n" | |||
|} | |||
=== Platzhalter === | |||
Hinweis: die Delimiter der Platzhalter sind frei wählbar (Parameter meta), im Beispiel wird % verwendet. | |||
* '''%index''': eine fortlaufende Zahl, beginnend mit 0. | |||
* '''%number''': eine fortlaufende Zahl, beginnend mit Parameter '''offset''' und Abstand '''step'''. | |||
* '''%char%''': ein fortlaufendes Zeichen, beginnend mit '''baseChar'''. | |||
* '''%value%''': ein Element aus der Liste von '''Values'''. | |||
Werden mehrere fortlaufende Elemente benötigt, so helfen: | |||
* '''%number0%''': fortlaufende Zahl, beginnend mit dem ersten Elemement von '''Offsets''' und dem Abstand des ersten Elements von '''Steps'''. | |||
* '''%number1%''': fortlaufende Zahl, beginnend mit dem zweiten Elemement von '''Offsets''' und dem Abstand des zweiten Elements von '''Steps'''. | |||
und so weiter | |||
* '''%char0%''': ein fortlaufendes Zeichen, beginnend mit dem ersten Element von '''BaseChars'''. | |||
* '''%char1%''': ein fortlaufendes Zeichen, beginnend mit dem zweiten Element von '''BaseChars'''. | |||
und so weiter | |||
=== Beispiele === | |||
Im Puffer input steht: | |||
<pre>no: %index% id: %number% place: %char% | |||
</pre> | |||
Im Puffer output steht: | |||
<pre>= List: | |||
</pre> | |||
Kommando: | |||
<pre>duplicate count=2 offset=100 step=10 baseChar=Q append | |||
</pre> | |||
Danach steht im Puffer output: | |||
<pre>= List: | |||
no: 0 id: 100 place: Q | |||
no: 1 id: 110 place: R | |||
</pre> | |||
Im Puffer input steht: | |||
<pre>no: !index! id: !number0! place !char0! key: !char1!!char1!!char1! | |||
</pre> | |||
Kommando: | |||
<pre>duplicate count=3 Offsets=10,0 Steps=5,1 BaseChar="Ak" meta=! out=list | |||
</pre> | |||
Danach steht im Puffer "list": | |||
<pre>no: 0 id: 10 place A key: kkk | |||
no: 1 id: 15 place B key: lll | |||
no: 2 id: 20 place C key: mmm | |||
</pre> | |||
Im Puffer "input" steht: | |||
<pre>animal %number%: %value% | |||
</pre> | |||
Kommando: | |||
<pre>duplicate count=2 offset=1 Values=",cat,dog" | |||
</pre> | |||
Danach steht im Puffer "output": | |||
<pre>animal 1: cat | |||
animal 2: dog | |||
</pre> | |||
Im Puffer "input" steht: | |||
<pre>animal %value0% named %value1% comes from %value2%. | |||
</pre> | |||
Kommando: | |||
<pre>duplicate count=2 ListValues=";,cat,dog;,Mia,Harro;,London,Rome" | |||
</pre> | |||
'''Hinweis:''' die Liste der Listen benutzt den Separator ";", die Textlisten den Separator ",". | |||
Danach steht im Puffer "output": | |||
<pre>animal cat named Mia comes from London. | |||
animal dog named Harro comes from Rome. | |||
</pre> | |||
== Execute == | |||
Ausführen von Kommandos in einem Puffer. | |||
=== Parameter === | |||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''input''' | |||
| Puffername | |||
| Pro Zeile steht hier ein Kommando. Diese werden der Reihe nach ausgeführt. | |||
| execute input=script | |||
|} | |||
=== Beispiel === | |||
Im Puffer "script" steht: | |||
<pre>copy text=i~"%index%: Id: id%number% Name: %char%%char%%char%~n" output=template | |||
duplicate input=template count=3 offset=1 baseChar=A | |||
</pre> | |||
Kommando: | |||
<pre>execute input=script | |||
</pre> | |||
Danach steht in Puffer "output": | |||
<pre>0: Id: id1 Name: AAA | |||
1: Id: id2 Name: BBB | |||
2: Id: id3 Name: CCC | |||
</pre> | |||
== filter == | |||
Mit Suchmustern werden die Teile der Eingabe spezifiziert, die in der Ausgabe erscheinen sollen. | |||
=== Parameter === | |||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''append''' | |||
|boolean | |||
| das Ergebnis wird im Zielpuffer angehängt | |||
| app | |||
|- | |||
| '''end''' | |||
| regulärer Ausdruck | |||
| Es werden nur Zeilen untersucht, die vor einer Zeile stehen, die auf diesen regulären Ausdruck passt. | |||
| end="</address>" | |||
|- | |||
| '''filter''' | |||
| regulärer Ausdruck | |||
| Passt eine Zeile auf diesen regulärer Ausdruck, wird sie ins Ziel übernommen. | |||
| filter=/2021\.\d+.\d+/ | |||
|- | |||
| '''Filters''' | |||
| stringList | |||
| Eine Liste von regulären Ausdrücken: Passte eine auf eine Zeile, wird diese ins Ziel übernommen. Auto-Separator. | |||
| Filters=";/Hello /;/[hH]i /" | |||
|- | |||
| '''input''' | |||
| Puffername | |||
| Der Text aus diesem Puffer wird vervielfacht. Voreinstellung: input | |||
| input=data | |||
|- | |||
| '''meta''' | |||
| character | |||
| Delimiter für die Platzhalter innerhalb von '''input'''. Voreinstellung: % | |||
| meta=% | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|- | |||
| '''repeat''' | |||
| int | |||
| Ist diese Zahl größer 1, wird der Bereich '''start''' und '''end''' entsprechend oft gesucht. 0: beliebig oft suchen. | |||
Nur sinnvoll, wenn sowohl '''start''' und '''end''' definiert sind. Voreinstellung: 1 | |||
| repeat=0 | |||
|- | |||
| '''start''' | |||
| regulärer Ausdruck | |||
| Es werden nur Zeilen untersucht, die hinter einer Zeile stehen, die auf diesen regulären Ausdruck passt. | |||
| start=/<address>/ | |||
|- | |||
| '''template''' | |||
| string | |||
| Für jeden Treffer wird diese Vorlage ausgegeben, nachdem dort die Platzhalter ersetzt wurden. | |||
Wird kein '''template''' angegeben, wird die ganze Zeile mit dem Treffer ausgegeben. Kann interpolierten Text enthalten. | |||
| template=i~"Name: %1%~n" | |||
|- | |||
| '''Templates''' | |||
| stringList | |||
| Das Analogon zu '''template''', wenn '''Filters''' statt '''filter''' angegeben wurde. | |||
Der erste Eintrag in 'Templates' ist dem ersten Eintrag in '''Filters''' zugeordnet, usw. | |||
Wird kein '''Templates''' angegeben, wird die ganze Zeile mit dem Treffer ausgegeben. Kann interpolierten Text enthalten. | |||
| Templates=i~";Name: %1%~n;Id: %1%~n" | |||
|} | |||
'''Hinweis''': Von den Parametern '''filter''' und '''Filters''' muss genau einer angegeben werden, also nicht keiner | |||
und nicht beide. | |||
Von den Parametern '''template''' und '''Templates''' darf höchstens einer angegeben werden. | |||
=== Platzhalter === | |||
In den Parametern '''template''' und '''Templates''' können folgende Platzhalter auftauchen: | |||
* %group0%: der gesamte Treffer des regulären Ausdrucks. | |||
* %group1%: das, was mit dem ersten Klammerpaar im regulären Ausdruck gefunden wird. Klammerpaare werden nach dem Auftreten der öffnenden Klammer nummeriert. | |||
* %group2%: das, was mit dem zweiten Klammerpaar im regulären Ausdruck gefunden wird. | |||
und so weiter. | |||
* %0%: die Kurzform für %group0% | |||
* %1%: die Kurzform für %group1% | |||
'''Hinweis:''' Die Delimiter "%" der Platzhalter kann über den Parameter '''meta''' geändert werden. | |||
=== Beispiele === | |||
Gilt für alle Beispiele: In Puffer input steht: | |||
<pre><?xml version="1.0" encoding="UTF-8"?> | |||
<staff> | |||
<company> | |||
<name>Easy Rider</name> | |||
</company> | |||
<person> | |||
<id>1</id> | |||
<name>Adam</name> | |||
</person> | |||
<person> | |||
<id>2</id> | |||
<name>Berta</name> | |||
</person> | |||
<person> | |||
<id>3</id> | |||
<name>Charly</name> | |||
</person> | |||
</staff> | |||
</pre> | |||
Kommando: | |||
<pre>filter fi=/name/ | |||
</pre> | |||
In Puffer output steht: | |||
<pre> <name>Easy Rider</name> | |||
<name>Adam</name> | |||
<name>Berta</name> | |||
<name>Charly</name> | |||
</pre> | |||
Kommando: | |||
<pre>filter start=/<person/ end=!</person! fi=/name/ repeat=2 | |||
</pre> | |||
In Puffer output steht: | |||
<pre> <name>Adam</name> | |||
<name>Berta</name> | |||
</pre> | |||
Kommando: | |||
<pre>filter start=/<person/ end=!</person! fi=/<(name|id)>(.*?)</ repeat=2 template="%group1%: %group2% | |||
</pre> | |||
In Puffer output steht: | |||
<pre>id: 1 | |||
name: Adam | |||
id: 2 | |||
name Berta | |||
</pre> | |||
Kommando: | |||
<pre>filter start=/<person/ end=!</person! Filters=";<name;<id" repeat=2 | |||
</pre> | |||
In Puffer output: | |||
<pre> <id>1</id> | |||
<name>Adam</name> | |||
<id>1</id> | |||
<name>Berta</name> | |||
</pre> | |||
Kommando: | |||
<pre>filter start=/<person/ end=!</person! Filters=";<(name)>(.?*)<;<id>(.?*)<" repeat=2 Templates=";%1%: %2%;no: %1%" | |||
</pre> | |||
In Puffer output: | |||
<pre>no: 1 | |||
name: Adam | |||
no: 2 | |||
name: Berta | |||
</pre> | |||
== replace == | |||
Damit können Suchmuster ersetzt werden. Als Suchmuster sind Strings oder reguläre Ausdrücke möglich. | |||
Bei regulären Suchmustern kann ein Teil des Treffers im Ersatz verwendet werden. | |||
=== Parameter === | |||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''append''' | |||
|boolean | |||
| das Ergebnis wird im Zielpuffer angehängt | |||
| app | |||
|- | |||
| '''input''' | |||
| Puffername | |||
| Der Text aus diesem Puffer wird untersucht. Voreinstellung: input | |||
| input=data | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|- | |||
| '''meta''' | |||
| character | |||
| Delimiter für die Platzhalter innerhalb von '''input'''. Voreinstellung: % | |||
| meta=% | |||
|- | |||
| '''regexpr''' | |||
| regulärer Ausdruck | |||
| Dieser reguläre Ausdruck wird gesucht. | |||
| regexpr=/name\s+([A-Z]\w*)/ | |||
|- | |||
| '''with''' | |||
| string | |||
| Ersatztext. Kann Bezüge zum Suchtext enthalten, wenn '''regexpr''' verwendet wird. | |||
| with=i~"Name: %group1%~n" | |||
|- | |||
| '''what''' | |||
| string | |||
| Ein Suchmuster ohne Metazeichen ("reiner Text"). Alternative zu '''regexpr'''. | |||
| what="Hello " | |||
|} | |||
== show == | |||
Gibt Informationen über interne Strukturen aus. | |||
=== Parameter === | |||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''append''' | |||
| boolean | |||
| Das Ergebnis wird im Zielpuffer angehängt. | |||
| append | |||
|- | |||
| '''output''' | |||
| Puffername | |||
| das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | |||
| output=result | |||
|- | |||
| '''what''' | |||
| string ohne Delimiter | |||
| Spezifiziert, was ausgegeben werden soll. Möglich sind: buffers Voreinstellung: buffers | |||
| what=buffers | |||
|} | |||
=== Beispiel === | |||
Kommando: | |||
<pre>show what=buffers | |||
</pre> | |||
Danach steht im Puffer "output": | |||
<pre>examples | |||
history | |||
input | |||
output | |||
</pre> | |||
== swap == | |||
Vertauscht den Inhalt von zwei Puffern. | |||
=== Parameter === | |||
{| class="wikitable" | |||
! Name | |||
! Typ | |||
! Beschreibung | |||
! Beispiel | |||
|- | |||
| '''a''' | |||
| Puffername | |||
| Erster Tauschpuffer. | |||
| a=result | |||
|- | |||
| '''b''' | |||
| Puffername | |||
| Zweiter Tauschpuffer. | |||
| b=input | |||
|} | |||
Ist kein Parameter angegeben, wird Puffer input und output vertauscht. | |||
=== Beispiel === | |||
Im Puffer input steht: | |||
<pre>Write email | |||
</pre> | |||
Im Puffer todo steht: | |||
<pre>Listen podcast | |||
</pre> | |||
* Kommando <code>swap a=input b=todo</code> | |||
Danach steht in input: | |||
<pre>Listen podcast | |||
</pre> | |||
und in todo: | |||
<pre>Write email | |||
</pre> | </pre> | ||
Aktuelle Version vom 26. Juni 2021, 06:04 Uhr
Links[Bearbeiten]
Zielsetzung[Bearbeiten]
Der Textbutler ist eine Flutter-App. Diese erlaubt die "Wandlung von Text", wobei ein Eingabetext in einen Ausgabetext gewandelt wird, aber auch "Informationen" über einen Text.
Als Wandlung gibt es:
- "Multiplizierung": ein Text erscheint mehrfach, wobei Teile sich ändern, beispielsweise eine laufende Nummer.
- Filterung: Durch Angabe von Suchmuster werden nur Teile der Vorlage übernommen
- Löschungen: Durch Angabe von Suchmuster werden Teile der Vorlage entfernt
- Ersetzungen: Durch Angabe eines Suchmusters und eines Ersatzes werden Teile gewandelt. Im Ersatztext können Referenzen auf die Trefferstelle enthalten sein.
Als Informationen gibt es:
- Die Anzahl eines Suchmusters
Aufbau[Bearbeiten]
Die Aktionen werden mit "Kommandos" in einer Eingabezeile spezifiziert. Jedes Kommando hat Parameter.
Das Programm verwaltet beliebig viele Textpuffer, die mit Namen gekennzeichnet sind. Es gibt vordefinierte Puffer:
- input: wird standardmäßig als Vorlage der Wandlung benutzt.
- output: wird standardmäßig als Ziel der Wandlung benutzt.
- history: dort werden die Kommandos hinterlegt. Fehlerhafte Kommandos werden mit führendem "#" gekennzeichnet.
- examples: zu jedem Kommando gib es dort mindestens ein Beispiel, es werden die wichtigsten Parameter aufgeführt.
Das Programm bietet vier Textbereiche, für jeden Bereich kann mit einer Combobox bestimmt werden, welcher Puffer dort angezeigt wird. Jeder Puffer kann nur einmal angezeigt werden. Stellt man einen Puffer ein, der schon eine andere Anzeige hat, wird dieser Anzeige ein anderer noch nicht angezeigter Puffer zugeordnet.
Kommandos können so lange verkürzt werden, wie die Eingabe eindeutig ist, ebenso die Parameter: Beispielsweise gibt es die Kommandos "clear", "copy" und "count". "cl" ist also eindeutig, oder "cop" oder "cou", nicht aber "c" oder "co".
Kommandos[Bearbeiten]
Kommandos bestehen aus dem Kommandonamen und Parametern, die mit
parameter=wert
angegeben werden, außer bei boolschen Parameter,
da entfällt die "Zuweisung". Die Reihenfolge der Parameter ist unerheblich.
Konvention für Parameter im Plural: Existiert ein Parameter im Singular und Plural, wird der Parameter im Plural groß geschrieben: Beispiel: value und Values. Grund: Damit können beide Namen abgekürzt werden.
Parameter mit Texten benötigen Delimiter. Jedes Zeichen außer Buchstaben und Ziffern darf als Delimiter benutzt werden, wichtig ist nur, dass der gewählte Delimiter am vor und nach dem String stehen.
Zulässige Beispiele sind regexpr=!<a href="#">(.*?)</a>!
, what="super"
oder text=?Delimiter sind " oder '?
.
Es gibt Parameter, die keinen Delimiter brauche, weil sie ein Zeichen lang sind, oder keine Blanks enthalten können (Puffernamen).
Parameter mit Listen benötigen einen Separator, der die Listenelemente trennt. Enthält die Liste Texte, so wird ein "Auto-Separator" benutzt: das ist das erste Zeichen der Liste,
beispielsweise Values=";a;b;c"
.
clear[Bearbeiten]
Es kann ein Puffer gelöscht werden. Existiert der Puffer noch nicht, wird er angelegt.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
output | Puffername | Das Ergebnis wir in diesen Puffer geschrieben. Voreinstellung: output | output=result |
Beispiel[Bearbeiten]
clear o=history
Danach ist die Historie leer.
copy[Bearbeiten]
Kopiert einen Puffer in einen anderen, oder einen gegebenen Text in einen Puffer.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
append | boolean | Das Ergebnis wird im Zielpuffer angehängt | append |
input | Puffername | Puffer, der kopiert wird. Voreinstellung: input | input=examples |
output | Puffername | Das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | output=result |
text | string | Kann alternativ zu input angegeben werden. Dann wird dieser Text ins Ziel kopiert.
Kann auch ein interpolierter Text sein, dann steht vor dem Delimiter i und das Esc-Zeichen. |
text="Hello" text=i%"First line%nSecond line" |
Beispiele[Bearbeiten]
Im Puffer "input" steht:
Hello World
Im Puffer "todo" steht:
Greetings
Kommando:
copy out=todo append
Danach steht in "todo"
Greetings Hello World
Kommando:
copy text="Hi Jonny!"
Danach steht in Puffer "output":
Hi Jonny!
count[Bearbeiten]
Zählt das Vorkommen eines Suchmusters in einem Puffer.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
append | boolean | Das Ergebnis wird im Zielpuffer angehängt. | append |
ignore | boolean | Groß-/Kleinschreibung spielt keine Rolle. | ignore |
input | Puffername | In diesem Puffer wird gezählt. Voreinstellung: input | input=adresses |
output | Puffername | Das Ergebnis wir in diesen Puffer geschrieben. Voreinstellung: output | output=result |
marker | character | Definiert einen Platzhalter für die Ergebniszahl in template. Voreinstellung: '#' | marker=* |
template | string | Vorlage, wie die Ergebnismeldung aussieht. Muss marker enthalten. Voreinstellung: der Wert von marker | template="# hits: *" |
regexpr | regulärer Ausdruck | Suchmuster als regulärer Ausdruck. | regexpr=/(\d+)/ |
what | string | Suchmuster als String ohne Metazeichen. | what="address" |
Hinweis: Es muss genau einer von regexpr oder what angegeben werden, nicht beide oder keiner.
Beispiele[Bearbeiten]
Im Puffer "input" steht:
Be or not to be, that's the question! Hic Rhodos, Hic salta!
Kommando:
count what="e"
Danach steht in "output":
4
Kommandos:
count regex=/\S+/ template="# Wörter" output=statistic count regexpr=/[.;!?]/ t=', # Sätze' o=statistic append count regexpr=/./ t=', # Zeichen' o=statistic append
Danach steht im Puffer "statistic":
12 Wörter, 2 Sätze, 59 Zeichen
duplicate[Bearbeiten]
"Vervielfachen" eines Textes, wobei mit Platzhaltern laufende Nummern, laufende Zeichenfolgen oder spezifizierte Einzelwerte enthalten sein können.
Diese Platzhalter werden im Vorlagetext eingefügt und bei der Duplizierung durch konkrete Werte ersetzt.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
append | boolean | Das Ergebnis wird im Zielpuffer angehängt. | append |
baseChar | character | Basis für laufende Zeichenfolge. | baseChar=a |
count | int | So oft wird der Text kopiert. | count=3 |
input | Puffername | Der Text aus diesem Puffer wird vervielfacht. Voreinstellung: input | input=data |
ListValues | stringList | eine Liste von Textlisten, wenn mehrere fortlaufende Elemente verwendet werden. Verschachtelte Auto-Separatoren:
Einer zum Trennen der "Bereiche", im Beispiel ";", je Bereich einer zum Trennen der Werte, im Beispiel "," und "/". |
ListValues=";,adam,berta,charly;/male/female/diverse;,41,23,59" |
meta | character | Delimiter für die Platzhalter innerhalb von input. Voreinstellung: % | meta=% |
offset | int | Basis für laufende Elemente. Voreinstellung: 0 | offset=100 |
Offsets | intList | Eine Liste von Offsets, wenn mehrere fortlaufende Elemente verwendet werden. | Offsets=10,1,100 |
output | Puffername | das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | output=result |
step | int | Abstand zwischen zwei fortlaufenden Elementen. | step=2 |
Steps | intList | Eine Liste von step-Angaben, wenn mehrere fortlaufende Elemente verwendet werden. | Steps=2,1,10 |
Values | stringList | Eine Liste von Texten, die fortlaufend eingefügt werden. Auto-Separator. Kann auch interpolierter Text sein. | Values=",bob,eva"
Values=i%",%tone%n,%ttwo%n,%tthree%n" |
Platzhalter[Bearbeiten]
Hinweis: die Delimiter der Platzhalter sind frei wählbar (Parameter meta), im Beispiel wird % verwendet.
- %index: eine fortlaufende Zahl, beginnend mit 0.
- %number: eine fortlaufende Zahl, beginnend mit Parameter offset und Abstand step.
- %char%: ein fortlaufendes Zeichen, beginnend mit baseChar.
- %value%: ein Element aus der Liste von Values.
Werden mehrere fortlaufende Elemente benötigt, so helfen:
- %number0%: fortlaufende Zahl, beginnend mit dem ersten Elemement von Offsets und dem Abstand des ersten Elements von Steps.
- %number1%: fortlaufende Zahl, beginnend mit dem zweiten Elemement von Offsets und dem Abstand des zweiten Elements von Steps.
und so weiter
- %char0%: ein fortlaufendes Zeichen, beginnend mit dem ersten Element von BaseChars.
- %char1%: ein fortlaufendes Zeichen, beginnend mit dem zweiten Element von BaseChars.
und so weiter
Beispiele[Bearbeiten]
Im Puffer input steht:
no: %index% id: %number% place: %char%
Im Puffer output steht:
= List:
Kommando:
duplicate count=2 offset=100 step=10 baseChar=Q append
Danach steht im Puffer output:
= List: no: 0 id: 100 place: Q no: 1 id: 110 place: R
Im Puffer input steht:
no: !index! id: !number0! place !char0! key: !char1!!char1!!char1!
Kommando:
duplicate count=3 Offsets=10,0 Steps=5,1 BaseChar="Ak" meta=! out=list
Danach steht im Puffer "list":
no: 0 id: 10 place A key: kkk no: 1 id: 15 place B key: lll no: 2 id: 20 place C key: mmm
Im Puffer "input" steht:
animal %number%: %value%
Kommando:
duplicate count=2 offset=1 Values=",cat,dog"
Danach steht im Puffer "output":
animal 1: cat animal 2: dog
Im Puffer "input" steht:
animal %value0% named %value1% comes from %value2%.
Kommando:
duplicate count=2 ListValues=";,cat,dog;,Mia,Harro;,London,Rome"
Hinweis: die Liste der Listen benutzt den Separator ";", die Textlisten den Separator ",".
Danach steht im Puffer "output":
animal cat named Mia comes from London. animal dog named Harro comes from Rome.
Execute[Bearbeiten]
Ausführen von Kommandos in einem Puffer.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
input | Puffername | Pro Zeile steht hier ein Kommando. Diese werden der Reihe nach ausgeführt. | execute input=script |
Beispiel[Bearbeiten]
Im Puffer "script" steht:
copy text=i~"%index%: Id: id%number% Name: %char%%char%%char%~n" output=template duplicate input=template count=3 offset=1 baseChar=A
Kommando:
execute input=script
Danach steht in Puffer "output":
0: Id: id1 Name: AAA 1: Id: id2 Name: BBB 2: Id: id3 Name: CCC
filter[Bearbeiten]
Mit Suchmustern werden die Teile der Eingabe spezifiziert, die in der Ausgabe erscheinen sollen.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
append | boolean | das Ergebnis wird im Zielpuffer angehängt | app |
end | regulärer Ausdruck | Es werden nur Zeilen untersucht, die vor einer Zeile stehen, die auf diesen regulären Ausdruck passt. | end="</address>" |
filter | regulärer Ausdruck | Passt eine Zeile auf diesen regulärer Ausdruck, wird sie ins Ziel übernommen. | filter=/2021\.\d+.\d+/ |
Filters | stringList | Eine Liste von regulären Ausdrücken: Passte eine auf eine Zeile, wird diese ins Ziel übernommen. Auto-Separator. | Filters=";/Hello /;/[hH]i /" |
input | Puffername | Der Text aus diesem Puffer wird vervielfacht. Voreinstellung: input | input=data |
meta | character | Delimiter für die Platzhalter innerhalb von input. Voreinstellung: % | meta=% |
output | Puffername | das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | output=result |
repeat | int | Ist diese Zahl größer 1, wird der Bereich start und end entsprechend oft gesucht. 0: beliebig oft suchen.
Nur sinnvoll, wenn sowohl start und end definiert sind. Voreinstellung: 1 |
repeat=0 |
start | regulärer Ausdruck | Es werden nur Zeilen untersucht, die hinter einer Zeile stehen, die auf diesen regulären Ausdruck passt. | start=/<address>/ |
template | string | Für jeden Treffer wird diese Vorlage ausgegeben, nachdem dort die Platzhalter ersetzt wurden.
Wird kein template angegeben, wird die ganze Zeile mit dem Treffer ausgegeben. Kann interpolierten Text enthalten. |
template=i~"Name: %1%~n" |
Templates | stringList | Das Analogon zu template, wenn Filters statt filter angegeben wurde.
Der erste Eintrag in 'Templates' ist dem ersten Eintrag in Filters zugeordnet, usw. Wird kein Templates angegeben, wird die ganze Zeile mit dem Treffer ausgegeben. Kann interpolierten Text enthalten. |
Templates=i~";Name: %1%~n;Id: %1%~n" |
Hinweis: Von den Parametern filter und Filters muss genau einer angegeben werden, also nicht keiner und nicht beide. Von den Parametern template und Templates darf höchstens einer angegeben werden.
Platzhalter[Bearbeiten]
In den Parametern template und Templates können folgende Platzhalter auftauchen:
- %group0%: der gesamte Treffer des regulären Ausdrucks.
- %group1%: das, was mit dem ersten Klammerpaar im regulären Ausdruck gefunden wird. Klammerpaare werden nach dem Auftreten der öffnenden Klammer nummeriert.
- %group2%: das, was mit dem zweiten Klammerpaar im regulären Ausdruck gefunden wird.
und so weiter.
- %0%: die Kurzform für %group0%
- %1%: die Kurzform für %group1%
Hinweis: Die Delimiter "%" der Platzhalter kann über den Parameter meta geändert werden.
Beispiele[Bearbeiten]
Gilt für alle Beispiele: In Puffer input steht:
<?xml version="1.0" encoding="UTF-8"?> <staff> <company> <name>Easy Rider</name> </company> <person> <id>1</id> <name>Adam</name> </person> <person> <id>2</id> <name>Berta</name> </person> <person> <id>3</id> <name>Charly</name> </person> </staff>
Kommando:
filter fi=/name/
In Puffer output steht:
<name>Easy Rider</name> <name>Adam</name> <name>Berta</name> <name>Charly</name>
Kommando:
filter start=/<person/ end=!</person! fi=/name/ repeat=2
In Puffer output steht:
<name>Adam</name> <name>Berta</name>
Kommando:
filter start=/<person/ end=!</person! fi=/<(name|id)>(.*?)</ repeat=2 template="%group1%: %group2%
In Puffer output steht:
id: 1 name: Adam id: 2 name Berta
Kommando:
filter start=/<person/ end=!</person! Filters=";<name;<id" repeat=2
In Puffer output:
<id>1</id> <name>Adam</name> <id>1</id> <name>Berta</name>
Kommando:
filter start=/<person/ end=!</person! Filters=";<(name)>(.?*)<;<id>(.?*)<" repeat=2 Templates=";%1%: %2%;no: %1%"
In Puffer output:
no: 1 name: Adam no: 2 name: Berta
replace[Bearbeiten]
Damit können Suchmuster ersetzt werden. Als Suchmuster sind Strings oder reguläre Ausdrücke möglich.
Bei regulären Suchmustern kann ein Teil des Treffers im Ersatz verwendet werden.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
append | boolean | das Ergebnis wird im Zielpuffer angehängt | app |
input | Puffername | Der Text aus diesem Puffer wird untersucht. Voreinstellung: input | input=data |
output | Puffername | das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | output=result |
meta | character | Delimiter für die Platzhalter innerhalb von input. Voreinstellung: % | meta=% |
regexpr | regulärer Ausdruck | Dieser reguläre Ausdruck wird gesucht. | regexpr=/name\s+([A-Z]\w*)/ |
with | string | Ersatztext. Kann Bezüge zum Suchtext enthalten, wenn regexpr verwendet wird. | with=i~"Name: %group1%~n" |
what | string | Ein Suchmuster ohne Metazeichen ("reiner Text"). Alternative zu regexpr. | what="Hello " |
show[Bearbeiten]
Gibt Informationen über interne Strukturen aus.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
append | boolean | Das Ergebnis wird im Zielpuffer angehängt. | append |
output | Puffername | das Ergebnis wird in diesen Puffer geschrieben. Voreinstellung: output | output=result |
what | string ohne Delimiter | Spezifiziert, was ausgegeben werden soll. Möglich sind: buffers Voreinstellung: buffers | what=buffers |
Beispiel[Bearbeiten]
Kommando:
show what=buffers
Danach steht im Puffer "output":
examples history input output
swap[Bearbeiten]
Vertauscht den Inhalt von zwei Puffern.
Parameter[Bearbeiten]
Name | Typ | Beschreibung | Beispiel |
---|---|---|---|
a | Puffername | Erster Tauschpuffer. | a=result |
b | Puffername | Zweiter Tauschpuffer. | b=input |
Ist kein Parameter angegeben, wird Puffer input und output vertauscht.
Beispiel[Bearbeiten]
Im Puffer input steht:
Write email
Im Puffer todo steht:
Listen podcast
- Kommando
swap a=input b=todo
Danach steht in input:
Listen podcast
und in todo:
Write email