                               PED4DOS
                                  
                       Programmierbarer Editor
                   mit erweiterter Funktionalitt
                       zum Suchen und Ersetzen
                                  
                 zur Batch-Verarbeitung unter MS-DOS
                                  
                     Version 1.40 Dezember 1995
                 Copyright 1995 Software-Quelle GmbH
                                  
                                  
                                  
                                  
                  Software-Quelle Datentechnik GmbH
                         Erfurter Strasse 15
                           D-85386 Eching
                               Germany
                                  
                      Telefax: +49 89 327133 36
                       Compuserve: 100034,2365
                Internet: 100034.2365@compuserve.com

1 Einfhrung                                                       4
2 Programmaufruf                                                   6
3 Bedienung von PED4DOS zur Laufzeit                              10
 3.1 Eine passende Zeichenfolge wurde gefunden                   10
 3.2 Eine Zeichenfolge ersetzen                                  10
 3.3 Statistik Information anzeigen                              11
 3.4 nderungen in die Datei schreiben                           12
 3.5 Daten an der Suchposition ansehen                           12
 3.6 ndern der Ausfhrungsoptionen                              13
 3.7 Trace Men                                                  15
4 Editieren der Daten                                             17
 4.1 Einfhrung                                                  17
   4.1.1 Suchen und Ersetzen                                     17
     4.1.1.1 Einfache Suchbegriffe                                17
     4.1.1.2 Mehrere verschiedene Zeichenfolgen suchen            17
     4.1.1.3 Suchen nach Wrtern, suchen nach Gro-/Kleinschreibung1
     7
     4.1.1.4 Einfaches Suchen und Ersetzen                        18
     4.1.1.5 Suchmuster                                           18
     4.1.1.6 Hexadezimale Zeichen                                 18
     4.1.1.7 Suchen nach unbekannten Zeichenfolgen                19
     4.1.1.8 Ersatzmuster                                         20
     4.1.1.9 Suchbereich                                          21
   4.1.2 Sprunganweisungen und Anweisungsmarken                  21
   4.1.3 Variable                                                23
     4.1.3.1 Textvariable                                         23
      4.1.3.1.1 Implizite Zuweisung an Textvariable              23
      4.1.3.1.2 Anwendung von Textvariablen                      23
      4.1.3.1.3 Explizite Zuweisung an Textvariable              24
      4.1.3.1.4 Vergleich von Textvariablen                      25
     4.1.3.2 Numerische Variable                                  26
      4.1.3.2.1 Implizite Zuweisung an numerische Variable       26
      4.1.3.2.2 Anwendung von numerischen Variablen              26
      4.1.3.2.3 Explizite Zuweisung an numerische Variable       27
      4.1.3.2.4 Vergleich von numerischen Variablen              28
     4.1.3.3 Funktionen                                           28
      4.1.3.3.1 Textfunktionen                                   28
      4.1.3.3.2 Numerische Funktionen                            29
 4.2 Syntax Zusammenfassung                                      31
   4.2.1 Ausfhrung eines Suchprogramms                          31
   4.2.2 Syntax Beschreibung                                     32
     4.2.2.1 Definitionen                                         32
     4.2.2.2 Konventionen                                         32
     4.2.2.3 Syntax Teil 1                                        34
     4.2.2.4 Syntax Teil 2                                        35
5 Beispiele                                                       40
 5.1 Prfen des FILES Parameters in CONFIG.SYS                   40
 5.2 Umsetzen der Umlaute von ANSI nach OEM oder ASCII           40
 5.3 Umsetzen einer Listendatei in die Eingabe fr ein
 Tabellenkalkulationsprogramm                                    41
6 Inhalt des PED4DOS Softwarepakets                               45
 6.1 Ausfhrbare Dateien                                         45
 6.2 Beispiele                                                   45
 6.3 Documentation                                               46
 

1   Einfhrung

PED4DOS   ist  ein  Werkzeug  zum  Suchen  und  Ersetzen   komplexer
Zeichenfolgen  in  ASCII  Textdateien  oder  binren  Dateien,   mit
mglichst  wenig  Interaktion mit dem Anwender; es  ist  kein  "Full
Screen Text Editor".
PED4DOS ermglicht Sie, Daten aus jeder beliebigen Datei zu
extrahieren, die nach einer bekannten Syntax aufgebaut ist, und
diese Daten in eine andere Datei zu schreiben, oder die Daten in der
Originaldatei zu verndern.
Hier ist ein kurzer berblick ber die besonderen Fhigkeiten:
*  Suchen  (und  Ersetzen) mehrerer Zeichenfolgen in einem  einzigen
   Durchlauf durch die Datei
*  Suchen  (und  Ersetzen)  unbekannter  Zeichenfolgen,  die   einem
   vorgegebenen Muster entsprechen
*  Speichern gefundener Zeichenfolgen in Textvariablen zur  spteren
   Verwendung
*  Ersetzen   gefundener   Zeichenfolgen  durch   den   Inhalt   von
   Textvariablen
*  Suchen   komplexer   Zeichenfolgen,  welche  einem   Muster   aus
   einfachen  Zeichenfolgen  und/oder dem Inhalt  von  Textvariablen
   und/oder  unbekannten Zeichenfolgen entsprechen;  Ersetzen  durch
   komplexe  Zeichenfolgen, welche sich aus einfachen  Zeichenfolgen
   und/oder  dem  Inhalt  von  Textvariablen  und/oder  Teilen   der
   gefundenen Zeichenfolge zusammensetzen
*  Setzen der Suchposition innerhalb der Datei
*  ndern des Inhalts von Textvariablen durch Aufruf von Funktionen
*  Ausgeben von Zeichenfolgen auf den Bildschirm
*  Kopieren der Bildschirmausgabe in eine Log-Datei

Fhren Sie bitte die Beispiel-Datei DEMO.BAT aus, wenn Sie sehen
wollen, wie PED4DOS arbeitet.
Darstellungskonventionen:
Die folgenden Konventionen werden in diesem Dokument zur
Beschreibung der Syntax benutzt:
Fetter Text    Fettschrift kennzeichnet einen Begriff, der wrtlich
               anzugeben ist, z.B. ein Kommando oder eine Kommando-
               Option. Sie mssen einen solchen Begriff exakt so
               eingeben, wie er gezeigt wird (allerdings knnen Gro-
               und Kleinbuchstaben gleichermaen verwendet werden)
Kursiver Text  kursive Schrift kennzeichnet einen Platzhalter oder
               eine Variable: Sie mssen dafr den aktuellen Wert
               eingeben. Wenn der kursive Text in < und > Zeichen
               eingefat ist, bezeichnet er ein syntaktisches Symbol
               (siehe die Syntaxbeschreibung in Kapitel 4.2)
monospace      Diese Schrift wird fr Beispiele und
               Bildschirmausgaben benutzt
[]             Schlieen optionale Parameter ein
|               Trennen Alternativen
{}               Schlieen alternative Parameter ein: Sie mssen genau
               einen dieser Parameter angeben
...            Zeigt an, da der vorausgehende Begriff wiederholt
               werden darf
CAPITALS       Bezeichnet Tasten der Tastatur, Dateinamen


2   Programmaufruf

Die folgende Zeile zeigt die Syntax fr den Programmaufruf von
PED4DOS:
P4D Eingabedatei [ Suchprogramm ] [ Optionen ]
Eingabedatei(en)    Ersetzen Sie Eingabedatei durch den voll oder
               teilweise qualifizierten Namen der zu bearbeitenden
               Datei(en); wenn Eingabedatei Wildcard Zeichen (* oder
               ?) enthlt, werden alle entsprechenden Dateien will
               bearbeitet.
Suchprogramm   Ersetzen Sie Suchprogramm durch die <Anweisungen>
               eines <Suchprogramms>; ein <Suchprogramm> beschreibt,
               was PED4DOS tun soll. (Die Syntax eines
               <Suchprogramms> wird in Kapitel 4.2 beschrieben; eine
               Einfhrung ist in Kapitel 4.1 enthalten).
               Suchprogramm mu als ein einzelner Parameter an
               PED4DOS bergeben werden (d.h. wenn Suchprogramm
               Leerzeichen enthlt, mu von Begrenzungszeichen "
               oder ` umgeben sein, und Suchprogramm selbst darf das
               Begrenzungszeichen nicht enthalten).
               Anmerkung: Einige Kommandointerpreter behandeln die
               Begrenzungszeichen auf ihre eigene Art; lesen Sie die
               Beschreibung Ihres Kommandointerpreters.
               Wenn das <Suchprogramm> aus mehreren Anweisungen
               besteht, wird empfohlen, das <Suchprogramm> in eine
               Datei zu schreiben und die Option /f zu benutzen
               (siehe unten)
Optionen       PED4DOS akzeptiert folgende Kommandozeilen-Optionen:
               /c:Kommandodatei    Ersetzen Sie Kommandodatei
                           durch den Namen einer ASCII Textdatei,
                           die weitere Kommandozeilen-Optionen
                           enthlt. Das ist praktisch, wenn die
                           Lnge der Kommandozeile die Grenzen des
                           Kommandointerpreters berschreitet (z.B.
                           COMMAND.COM).
               /f:ProgrammdateiErsetzen Sie Programmdatei durch den
                           Namen einer ASCII Textdatei, die das
                           <Suchprogramm> enthlt. Das
                           <Suchprogramm> darf nicht von
                           Begrenzungszeichen umgeben sein.
                          Wenn PED4DOS die Programmdatei im
                           aktuellen Arbeitsverzeichnis nicht
                           findet, sucht er Programmdatei in den
                           folgenden Verzeichnissen:
                           1. dem Verzeichnis, wo sich die
                               ausfhrbare Datei P4D.EXE befindet
                           2. den Verzeichnissen, die in der
                               Umgebungsvariable PATH enthalten sind
               /l:LogdateiErsetzen Sie Logdatei durch den Namen
                           einer ASCII Textdatei, die PED4DOS zur
                           Startzeit erzeugen soll; alle Ausgaben
                           auf den Bildschirm werden nach Logdatei
                           kopiert, es sei denn, es wrde durch die
                           /p Option verhindert (siehe unten).
               /p:[+|-]p[e..][:..]  (perform mode =
                           Ausfhrungsmodus): whrend die <aktuelle
                           Datei> bearbeitet wird, beginnt PED4DOS
                           einen Dialog mit Ihnen, wenn eines der
                           folgenden Ereignisse eintritt:
                           1) PED4DOS findet eine <Zeichenfolge>
                               die zu einem <Suchmuster> pat
                           2) PED4DOS findet eine <Zeichenfolge>
                               die durch eine <Ersatzzeichenfolge>
                               ersetzt werden soll
                           3) PED4DOS hat eine Datei bearbeitet,
                               die mindestens eine <passende
                               Zeichenfolge> enthlt; PED4DOS mchte
                               dann eine Statistik der gefundenen
                               <passenden Zeichenfolgen> (und der
                               ersetzten <Zeichenfolgen>) ausgeben.
                           4) PED4DOS hat eine Datei bearbeitet und
                               mindestens eine <passende
                               Zeichenfolge> durch eine
                               <Ersatzzeichenfolge> ersetzt; PED4DOS
                               mchte dann die nderungen in die
                               <aktuelle Datei> schreiben (oder in
                               eine andere Datei, nach Ihrem
                               Belieben)
                           5) PED4DOS fhrt eine <Anweisung> aus,
                               welche erfordert, da eine
                               <Zeichenfolge> auf dem Bildschirm
                               angezeigt wird
                          Benutzen Sie die /p Option um das
                           Verhalten von PED4DOS bei den oben
                           beschriebenen Ereignissen zu ndern; die
                           Zeichenfolge /p: kann von einer oder
                           mehreren Optionen, getrennt durch
                           Doppelpunkte, gefolgt sein; jede Option
                           besteht aus bis zu 3 Teilen:
                           1) Ein + oder - Zeichen aktiviert bzw.
                               deaktiviert den Ausfhrungsmodus p
                               fr das Ereignis e; das + Zeichen
                               kann fortgelassen werden.
                           2) Ersetzen Sie den Ausfhrungsmodus p
                               durch einen der folgenden Buchstaben:
                               c  (confirm = besttigen) : wenn
                                   aktiviert, mu jedes Ereignis e
                                   besttigt werden
                               s   (show = zeigen) : wenn aktiviert,
                                   wird die Meldung entsprechend dem
                                   Ereignis e auf dem Bildschirm
                                   angezeigt
                               d  (dialog = Dialog) : Kombination
                                   aus c und s
                               e  (execute = ausfhren) : wenn
                                   aktiviert, soll das Ereignis e
                                   tatschlich ausgefrt werden
                               l  (log = Ausgabe in Logdatei) :
                                   wenn aktiviert, wird die Meldung
                                   entsprechend dem Ereignis e in
                                   die Logdatei kopiert (siehe auch
                                   die Option /l)
                               b  (batch mode): identisch mit -c:-
                                   s; deaktiviert jeglichen Zeige-
                                   und Besttigungs-Modus (d.h.
                                   jegliche Interaktion mit dem
                                   Anwender entfllt)
                           3) Ersetzen Sie das Ereignis e durch
                               einen oder mehrere der folgenden
                               Buchstaben; wenn fortgelassen, wird
                               a(alle) angenommen:
                               m  (match = passend): eine <passende
                                   Zeichenfolge> wurde in der
                                   <aktuellen Datei>
                               r   (replace = ersetzen): eine
                                   <passende Zeichenfolge> soll
                                   durch <Ersatzzeichenfolge>
                                   ersetzt werden
                               s   (statistics = Statistik):
                                   mindestens 1 <passende
                                   Zeichenfolge> wurde in der
                                   <aktuellen Datei> gefunden
                               w   (write = schreiben): mindestens 1
                                   <passende Zeichenfolge> wurde
                                   ersetzt
                               o  (output = anzeigen): eine
                                   <Anweisung> erfordert, da eine
                                   <Zeichenfolge> angezeigt wird.
                               a  (all): alle oben beschriebenen
                                   Ereignisse; Standard, wenn kein
                                   Ereignis-Buchstabe eingetippt
                                   wurde
                          Beispiele:
                           /p:-cmskeine Besttigung fr passende
                                   Zeichenfolgen und Statistik-
                                   Information
                           /p:-dmskeine Anzeige, keine Besttigung
                                   fr passende Zeichenfolgen und
                                   Statistik-Information
                           /p:b   kein Anzeigen, keine Besttigung
                                   whrend Batch Verarbeitung
                                   (gleich wie /p:-sa:-ca )
                           /p:-l:+lo   nur die durch display
                                   <Anweisungen> angezeigten Daten
                                   werden in die Logdatei
                                   geschrieben
               /s[:n]     PED4DOS sucht in Unterverzeichnissen ber
                           bis zu n Stufen, um Dateien entsprechend
                           Eingabedatei zu finden.
               /b:ext     Wenn die Option /bn (siehe unten) nicht
                           angegeben wird, wird jede genderte Datei
                           in eine Sicherungsdatei mit der
                           Dateinamenerweiterung ext kopiert, bevor
                           sie berschrieben wird. Wenn diese Option
                           nicht angegeben wird, wird fr ext der
                           Standard BAK benutzt
               /bn        Die genderten Dateien werden nicht in
                           Sicherungsdateien kopiert bevor sie
                           berschrieben werden (kein Backup)
               /help      PED4DOS zeigt eine kurze Beschreibung der
                           Optionen auf dem Bildschirm an und
                           ignoriert alle anderen Parameter (d.h. es
                           wird keine Datei bearbeitet)
               /nologo    PED4DOS zeigt beim Programmstart keine
                           Meldung an (nicht bei "Shareware
                           Version")
               /trace[:n] Schaltet den "trace Modus" fr das
                           <Suchprogramm> ein. Der optionale
                           Parameter n bedeutet die Anzahl von
                           <Anweisungen> die ohne Unterbrechung
                           ausgefhrt werden sollen; wenn dieser
                           Parameter nicht angegeben wird, wird fr
                           n der Standardwert 1 genommen (siehe auch
                           Kapitel 3.7)

Exempel:
Das folgende Kommando sucht Leerzeichen in den Dateien DEMO*.IN,
zeigt nur Statistik-Meldungen (d.h. Anzahl der Leerzeichen in den
Dateien) an und schreibt nur Statistik-Meldungen in die Logdatei
DEMO.LOG:
p4d demo*.in " ' ' " /l:demo.log /ein:-d:+ds:-l:+ls
Siehe auch die Datei DEMO.BAT fr weitere Beispiele.

3   Bedienung von PED4DOS zur Laufzeit

Die folgenden Kapitel beschreiben den Dialog zwischen PED4DOS und
Ihnen zur Laufzeit. Die Bedienung des PED4DOS erfolgt in englischer
Sprache; die bersetzung der Meldungen folgt in runden Klammern
gesetzt

3.1 Eine passende Zeichenfolge wurde gefunden
Wenn PED4DOS eine <Zeichenfolge> findet, welche zu einem
<Suchmuster> pat, welches in dem <Suchprogramm> definiert wurde,
gibt er eine Meldung wie die folgende aus:
file:input.txt, line: 22, offset: 0x337 = 823
(Datei:input.txt, Zeile: 22, Offset: 0x337 = 823)
gefolgt von der gefundenen <passenden Zeichenfolge> und einer
vordefinierte Menge von Zeichen, welche die <passende Zeichenfolge>
umgeben,
gefolgt von der Menzeile:
continue? (yes / all / skip file / view . / perform options .. /
quit)
(fortfahren? (ja / alle / Datei bergehen / ansehen .. /
Ausfhrungsoptionen .. / beenden))
Drcken Sie eine der folgenden Tasten, und PED4DOS wird entsprechend
der Beschreibung reagieren:
y       mit der Ausfhrung des <Suchprogramms> fortfahren (d.h. die
       nchste <Anweisung> ausfhren)
a      mit der Ausfhrung des <Suchprogramms> fortfahren, aber nur
       <passende Zeichenfolgen> zhlen (d.h. keine Anzeige, keine
       Besttigung)
s       die Bearbeitung der <aktuellen Datei> beenden; wenn
       irgendwelche nderungen zuvor gemacht wurden, wird PED4DOS
       anschlieend anstreben, die nderungen in die Datei zu
       schreiben (siehe Kapitel 3.4)
v       das "View" Men anzeigen (siehe Kapitel 3.5) welches Ihnen
       ermglicht, die Daten an der aktuellen <Suchposition>
       anzusehen
p      das "Ausfhrungsoptionen" Men (siehe Kapitel 3.6) anzeigen,
       welches Ihnen ermglicht, die Ausfhrungsoptionen zu ndern
q       die Bearbeitung der <aktuellen Datei> und aller weiteren
       Dateien beenden; wenn irgendwelche nderungen zuvor gemacht
       wurden, wird PED4DOS anschlieend anstreben, die nderungen
       in die Datei zu schreiben (siehe Kapitel 3.4)


3.2 Eine Zeichenfolge ersetzen
Wenn PED4DOS eine <Zeichenfolge> findet, welche zu einem
<Suchmuster> pat, welches in dem <Suchprogramm> definiert wurde,
und durch eine andere <Zeichenfolge> ersetzt werden soll, gibt er
eine Meldung wie die folgende aus:
file:input.txt, line: 22, offset: 0x337 = 823
(Datei:input.txt, Zeile: 22, Offset: 0x337 = 823)
gefolgt von der gefundenen <passenden Zeichenfolge> und einer
vordefinierte Menge von Zeichen, welche die <passende Zeichenfolge>
umgeben,
gefolgt von einer Zeile wie der folgenden:
replace by:
(ersetzen durch:)
gefolgt von der <Ersatzzeichenfolge> und einer vordefinierte Menge
von Zeichen, welche die <Ersatzzeichenfolge> umgeben,
gefolgt von der Menzeile:
ok? (yes / no / all / skip file / view .. / perform options .. /
quit)
(ok? (ja / nein / alle / Datei bergehen / ansehen .. /
Ausfhrungsoptionen .. / beenden))
Drcken Sie eine der folgenden Tasten, und PED4DOS wird entsprechend
der Beschreibung reagieren:
y       die <passende Zeichenfolge> durch die <Ersatzzeichenfolge>
       ersetzen; mit der Ausfhrung des <Suchprogramms> fortfahren
       (d.h. die nchste <Anweisung> ausfhren)
n      mit der Ausfhrung des <Suchprogramms> fortfahren, ohne die
       <passende Zeichenfolge> zu ersetzen
a      die <passende Zeichenfolge> durch die <Ersatzzeichenfolge>
       ersetzen; mit der Ausfhrung des <Suchprogramms> fortfahren
       und alle weiteren Ersetzungen ohne Anzeige oder Besttigung
       ausfhren
s       die <passende Zeichenfolge> nicht ersetzen; die Bearbeitung
       der <aktuellen Datei> beenden; wenn irgendwelche nderungen
       zuvor gemacht wurden, wird PED4DOS anschlieend anstreben,
       die nderungen in die Datei zu schreiben (siehe Kapitel 3.4)
v       das "View" Men anzeigen (siehe Kapitel 3.5) welches Ihnen
       ermglicht, die Daten an der aktuellen <Suchposition>
       anzusehen
p      das "Ausfhrungsoptionen" Men (siehe Kapitel 3.6) anzeigen,
       welches Ihnen ermglicht, die Ausfhrungsoptionen zu ndern
q       die Bearbeitung der <aktuellen Datei> und aller weiteren
       Dateien beenden; wenn irgendwelche nderungen zuvor gemacht
       wurden, wird PED4DOS anschlieend anstreben, die nderungen
       in die Datei zu schreiben (siehe Kapitel 3.4)


3.3 Statistik Information anzeigen
Wenn PED4DOS irgendwelche <passenden Zeichenfolge> in der <aktuellen
Datei> gefunden hat, gibt er eine Meldung wie die folgende aus:
file:input.txt, found 9 match(es), 2 replaced, 4 not replaced
(Datei:input.txt, 9 Treffer gefunden, 2 ersetzt, 4 nicht ersetzt
gefolgt von der Menzeile:
continue? (yes / perform options .. / quit)
(fortfahren? (ja / Ausfhrungsoptionen .. / beenden))
Drcken Sie eine der folgenden Tasten, und PED4DOS wird entsprechend
der Beschreibung reagieren:
y       fortfahren
p      das "Ausfhrungsoptionen" Men (siehe Kapitel 3.6) anzeigen,
       welches Ihnen ermglicht, die Ausfhrungsoptionen zu ndern
q       die Bearbeitung der <aktuellen Datei> und aller weiteren
       Dateien beenden; wenn irgendwelche nderungen zuvor gemacht
       wurden, wird PED4DOS anschlieend anstreben, die nderungen
       in die Datei zu schreiben (siehe Kapitel 3.4)


3.4 nderungen in die Datei schreiben
Wenn PED4DOS irgendeine <Zeichenfolge> in der <aktuellen Datei>
ersetzt hat, strebt er an, nachBeendigung des  <Suchprogramms> die
nderungen in die Datei zu schreiben; PED4DOS gibt eine Meldung wie
die folgende aus:
write changes to file input.txt ?
(nderungen in die Datei input.txt schreiben ?
gefolgt von der Menzeile:
ok? (yes / no / save as / perform options .. / quit)
(ok? (ja / nein / sichern als / Ausfhrungsoptionen .. / beenden))
Drcken Sie eine der folgenden Tasten, und PED4DOS wird entsprechend
der Beschreibung reagieren:
y       nderungen in die <aktuelle Datei> schreiben
n      alle nderungen ignorieren; die <aktuelle Datei> ungendert
       lassen
s       eine Meldung wie die folgende anzeigen:
       save as: input.txt
       (sichern als: input.txt)
       berschreiben Sie den vorgegebenen Dateinamen mit einem neuen
       Dateinamen und drcken Sie anschlieend die ENTER Taste, oder
       drcken Sie die ESC Taste, um die Funktion abzubrechen
p      das "Ausfhrungsoptionen" Men (siehe Kapitel 3.6) anzeigen,
       welches Ihnen ermglicht, die Ausfhrungsoptionen zu ndern
q       die Bearbeitung der <aktuellen Datei> und aller weiteren
       Dateien beenden; wenn irgendwelche nderungen zuvor gemacht
       wurden, wird PED4DOS anschlieend anstreben, die nderungen
       in die Datei zu schreiben (siehe Kapitel 3.4)
q       alle nderungen ignorieren; die <aktuelle Datei> ungendert
       lassen; keine weiteren Dateien bearbeiten


3.5 Daten an der Suchposition ansehen
Wenn Sie die "view" Option in einem der oben beschriebenen Mens
(siehe Kapitel 3.1 und 3.2) whlen, zeigt PED4DOS die folgende
Menzeile an:
view <nnn / >nnn / hex / ascii / data / trace / ESC
(ansehen <nnn / >nnn / hex / ascii / Daten / Trace / ESC )
Drcken Sie eine der folgenden Tasten, oder tippen Sie eine der
angegebenen Zeichenfolgen ein, wobei Sie nnn durch ein Zahl < 1000
ersetzen, und PED4DOS wird entsprechend der Beschreibung reagieren:
<nnn   ab jetzt maximal nnn Zeichen vor der <passenden Zeichenfolge>
       anzeigen
>nnn   ab jetzt maximal nnn Zeichen nach der <passenden
       Zeichenfolge> anzeigen
x       ab jetzt die Daten im Hexadezimal-Modus anzeigen
a      ab jetzt die Daten im Text-Modus anzeigen
d      die <passende Zeichenfolge> (und die <Ersatzzeichenfolge>)
       erneut anzeigen
t       nach Beendigung dieses Dialog den "trace" Modus einschalten
       (d.h. vor Ausfhrung der nchsten <Anweisung> des
       <Suchprogramms> anhalten)
ESC    das "view" Men verlassen

Wenn Sie die "view" Option im "trace" Men gewhlt haben (siehe
unten, Kapitel 3.7), zeigt PED4DOS ein erweitertes "view" Men an:
view <nnn / >nnn / hex / ascii / data / var / hit flag / ESC
(ansehen <nnn / >nnn / hex / ascii / Daten / Variable /
Trefferanzeige / ESC )
Hier ist die Beschreibung der zustzlichen Optionen:
v       Inhalt einer <Variablen> anzeigen (siehe Kapitel 4.1.3);
       PED4DOS zeigt die folgende Zeile an
       view varname:
       (ansehen Variable:)
       Tippen Sie den Namen einer gltigen (d.h. im <Suchprogramm>
       benutzten) <Variablen> ein und drcken Sie die ENTER Taste,
       oder drcken Sie die ESC Taste, um die Funktion abzubrechen.
       Wenn Sie den Namen einer gltigen <Variablen> eingegeben
       haben, zeigt PED4DOS den Inhalt der <Variablen> an,
       anderenfalls eine Fehlermeldung
h      Aktuellen Inhalt der <Trefferanzeige> ausgeben, welche
       anzeigt, ob bei der zuletzt ausgefhrten <Suchanweisung> eine
       <passende Zeichenfolge> gefunden wurde (siehe auch Kapitel
       4.2.1)


3.6 ndern der Ausfhrungsoptionen
Wenn Sie "Ausfhrungsoptionen" in einem der oben beschriebenen Mens
(siehe Kapitel 3.1 und 3.4) whlen, zeigt PED4DOS die folgende
Menzeile an:
set (+) / reset (-) perform options .. / batch mode .. / ok / cancel
(setzen (+) / rcksetzen (-)Ausfhrungsoptionen .. / Batch Modus ..
/ ok / abbrechen)
Drcken Sie eine der folgenden Tasten, und PED4DOS wird entsprechend
der Beschreibung reagieren:
+      das folgende Men anzeigen:
       set perform options for  this file .. / all files .. / ESC
       (setzen der Ausfhrungsoptionen fr  diese Datei .. / alle
       Dateien .. / ESC)
       Drcken Sie eine der folgenden Tasten, und PED4DOS wird
       entsprechend der Beschreibung reagieren:
       t       Ausfhrungsoptionen fr die Bearbeitung der
               <aktuellen Datei> setzen
       a      Ausfhrungsoptionen fr die Bearbeitung aller Dateien
               setzen
       ESC    Dieses Men verlassen
       Drcken Sie eine der Buchstaben-Tasten, und PED4DOS zeigt ein
       Men der Ausfhrungsmodi an, welche momentan nicht aktiviert
       sind:
       set confirm/show/dialog/execute/log/all modes for .. / ESC
       (setzen besttigen/zeigen/dialog/ausfhren/log/alle Modi fr
       .. / ESC)
       Drcken Sie eine der folgenden Tasten, und PED4DOS wird
       entsprechend der Beschreibung reagieren:
       c      Besttigung fr die Ereignisse verlangen, welche aus
               dem folgenden Men gewhlt werden
       s       Meldungen fr die Ereignisse anzeigen, welche aus dem
               folgenden Men gewhlt werden
       d      Kombination von c und s
       e      Die Ereignisse, welche aus dem folgenden Men gewhlt
               werden, tatschlich ausfhren
       l      Meldungen fr die Ereignisse, welche aus dem
               folgenden Men gewhlt werden, in die Logdatei
               schreiben
       a      alle hier beschriebenen Modi aktivieren
       ESC    Dieses Men verlassen
       Wenn Sie eine der Buchstabentasten gedrckt haben, zeigt
       PED4DOS ein Men der verfgbaren (d.h. momentan nicht
       aktivierten) Ereignisse fr den gewhlten Ausfhrungsmodus
       an, z.B. nach Drcken der s Taste:
       set show mode for match/replace/write/statistic/output/all /
       ESC
       (setze Anzeigemodus fr
       gefunden/ersetzen/schreiben/statistik/ausgabe/alle / ESC)
       Drcken Sie eine der folgenden Tasten, und PED4DOS wird ab
       sofort fr die entsprechenden Ereignisse anzeigen:
       m      <passende Zeichenfolges> + umgebende Zeichen
       r       <passende Zeichenfolges> + <Ersatzzeichenfolges> +
               umgebende Zeichen
       w       Meldungen beim Schreiben der nderungen in die
               <aktuelle Datei>
       s       Statistik Informationen
       o      Ausgabe von display <Anweisungen> in dem
               <Suchprogramm>
       a      alle oben beschriebenen Optionen
       ESC    Dieses Men verlassen
-      gegenteil von + (siehe oben); rcksetzen (anstatt setzen) der
       ausgewhlten Option(en)
b      das "Batch" Men anzeigen, welches Ihnen ermglicht, den
       "Batch" Modus einzuschalten (keine Anzeige, keine
       Besttigung)
       edit this file / all files in batch mode (no display, no
       confirm) / ESC
       (bearbeite diese Datei / alle Dateien im Batch Modus (keine
       Anzeige, keine Besttigung) / ESC)
       Drcken Sie eine der folgenden Tasten, und PED4DOS wird
       entsprechend der Beschreibung reagieren:
       t       das "Ausfhrungsoptionen" Men verlassen; die
               <aktuelle Datei> im "Batch" Modus weiter bearbeiten
       a      das "Ausfhrungsoptionen" Men verlassen; alle
               Dateien im "Batch" Modus bearbeiten
       ESC    das "Batch" Men verlassen
o      die genderten Ausfhrungsoptionen akzeptieren und zum
       vorigen Men zurckkehren
c      die genderten Ausfhrungsoptionen ignorieren und zum vorigen
       Men zurckkehren
Beispiel:
Wenn Sie gefundene <passende Zeichenfolge> und Statistik-Meldungen
nicht besttigen wollen, whlen Sie die Optionen der Mens in der
beschriebenen Reihenfolge (das Beispiel zeigt die Menzeile und
beschreibt dann Ihre Eingabe):
set (+) / reset (-) perform options .. / batch mode .. / ok / cancel
-      Sie wollen Optionen ausschalten
reset perform options for  this file .. / all files .. / ESC
a      Sie wollen Optionen fr alle Eingabedateien ausschalten
reset perform options for all files  ...
reset confirm/show/dialog/execute/log/all modes for .. / ESC
c      Sie wollen den Besttigung-Modus ausschalten
reset confirm mode for match/replace/write/statistic/all / ESC
m      Sie wollen gefundene <passende Zeichenfolgen> nicht
       besttigen
reset confirm mode for replace/write/statistic/all / ESC
s       Sie wollen Statistik-Meldungen nicht besttigen
reset confirm mode for replace/write/all / ESC
ESC    dieses Men verlassen
reset confirm/show/dialog/execute/log/all modes for .. / ESC
ESC    dieses Men verlassen
set (+) / reset (-) perform options .. / batch mode .. / ok / cancel
o      die modifizierten Optionen akzeptieren und zum vorigen Men
       zurckkehren

Dieses entspricht der Kommandozeilen-Option /p:-cms .

3.7 Trace Men
Der "trace" Modus ermglicht Ihnen, das <Suchprogramm> in einzelnen
Schritten, d.h. <Anweisung> fr <Anweisung>, auszufhren und dabei
die momentan bearbeiteten Daten und die benutzten <Variablen>
anzusehen.
Whrend PED4DOS eine Datei bearbeitet, knnen Sie den "Trace" Modus
einschalten, indem Sie eine beliebige Taste drcken; alternativ
knnen Sie PED4DOS im "Trace" Modus starten, wenn Sie die
Kommandozeilen-Option /trace benutzen. PED4DOS unterbricht dann die
Ausfhrung des <Suchprogramms> zeigt die nchste auszufhrende
<Anweisung> an, z.B.:
INTERRUPT
'old string'='new string';
trace cmd: trace / go / set .. / view .. / perform options .. / quit
(Trace-Anweisung: trace / fortsetzen / setze .. / ansehen .. /
Ausfhrungsoptionen .. / beenden)
Drcken Sie eine der folgenden Tasten, und PED4DOS wird entsprechend
der Beschreibung reagieren:
t       trace (anzeigen und ausfhren) einer vorher definierten
       (siehe set Option) Anzahl von <Anweisungen>, dann erneut
       unterbrechen
g      "Trace" Modus beenden und die weiteren <Anweisungen> ohne
       Unterbrechung ausfhren
s       das folgende Men anzeigen:
       set trace steps / set breakpoint / remove breakpoint / ESC
       (setze trace Schritte / setze Haltepunkt / entferne
       Haltepunkt / ESC)
       Drcken Sie eine der folgenden Tasten, und PED4DOS wird
       entsprechend der Beschreibung reagieren:
       t       die folgende Zeile anzeigen:
               trace nnn steps / ESC
               (trace nnn Schritte / ESC)
               Geben Sie die Anzahl der <Anweisungen> ein, welche
               ohne Unterbrechung ausgefhrt werden sollen, und
               schlieen Sie mit der ENTER Taste ab, oder drcken
               Sie die ESC Taste, um die Funktion abzubrechen
       b      die folgende Zeile anzeigen:
               set breakpoint at label (. = current statement) / ESC
               (setze Haltepunkt bei Anweisungsmarke (. = aktuelle
               Anweisung) / ESC)
               Geben sie die Anweisungsmarke der <Anweisung> ein, wo
               PED4DOS die Ausfhrung des <Suchprogramms>
               unterbrechen soll (or einen Punkt, der die aktuelle
               <Anweisung> bezeichnet), und drcken Sie die ENTER
               Taste; PED4DOS wird dann jedesmal vor Ausfhrung
               dieser <Anweisung> unterbrechen. Sie knnen beliebig
               viele Haltepunkte definieren.
               Drcken Sie die ESC Taste , um dieses Men zu
               verlassen
       r       die folgende Zeile anzeigen:
               remove breakpoint at label (. = current statement) /
               ESC
               (entferne Haltepunkt bei Anweisungsmarke (. =
               aktuelle Anweisung) / ESC)
               Geben Sie die Marke der <Anweisung> ein, wo Sie zuvor
               einen Haltepunkt gesetzt haben, gefolgt von der ENTER
               Taste; PED4DOS wird nicht lnger an dieser
               <Anweisung> anhalten.
               Drcken Sie die ESC Taste , um dieses Men zu
               verlassen
p      das "Ausfhrungsoptionen" Men (siehe Kapitel 3.6) anzeigen,
       welches Ihnen ermglicht, die Ausfhrungsoptionen zu ndern
q       die Bearbeitung der <aktuellen Datei> und aller weiteren
       Dateien beenden; wenn irgendwelche nderungen zuvor gemacht
       wurden, wird PED4DOS anschlieend anstreben, die nderungen
       in die Datei zu schreiben (siehe Kapitel 3.4)


4   Editieren der Daten


4.1 Einfhrung
PED4DOS bentigt ein <Suchprogramm> um seine Arbeit zu erledigen.
Ein <Suchprogramm> besteht aus einer (oder mehreren) <Anweisungen>,
getrennt durch ; Zeichen. Als eine progressive Einfhrung werden
hier einige Beispiele gezeigt, die Sie teilweise auch in der
Demonstrationsdatei DEMO.BAT finden. Die vollstndige Syntax eines
<Suchprogramms> ist in Kapitel 4.2. beschrieben

4.1.1    Suchen und Ersetzen

4.1.1.1  Einfache Suchbegriffe
Die einfachste <Suchanweisung> besteht lediglich aus einer
<Zeichenfolge>, die PED4DOS in der <aktuellen Datei> suchen soll;
eine <Zeichenfolge> ist eine Folge von <Zeichen>, welche zwischen
Apostrophen ' eingeschlossen ist. PED4DOS sucht die <Zeichenfolge>
in der <aktuellen Datei>. Wenn PED4DOS eine <passende Zeichenfolge>
findet, gibt er eine entsprechende Meldung aus, welche die
<Suchposition> in der <aktuellen Datei> und die gefundene <passende
Zeichenfolge> enthlt, und wartet dann auf Ihre Besttigung. Nachdem
die ganze Datei durchsucht ist, gibt PED4DOS eine Statistik-Meldung
aus, wenn mindestens eine <passende Zeichenfolge> gefunden wurde.
Beispiel 1:eine Abkrzung suchen:
'P4D'


4.1.1.2  Mehrere verschiedene Zeichenfolgen suchen
PED4DOS kann nach mehreren verschiedenen <Zeichenfolgen> bei einem
einzigen Durchlauf durch die Datei suchen; trennen Sie dazu einfach
die einzelnen <Zeichenfolgen> durch Semikolons.
Beispiel 2:mehrere Abkrzungen in einem einzelnen Durchlauf suchen:
'P4D'; 'SQ'; 'e.g.'

Anmerkung:  Sie knnen die einzelnen <Anweisungen> eines
       <Suchprogramms> durch LEERZEICHEN und TABULATOR Zeichen und
       durch Kommentare (ein Kommentar beginnt mit doppelten
       Schrgstrichen (//) und endet am Ende der Zeile)
       Wenn Sie die /f Option benutzen (<Suchprogramm> aus einer
       Datei lesen), knnen Sie die <Anweisungen> auch auf mehrere
       Zeilen verteilen.
       Sie mssen benachbarte alphanumerische Begriffe
       (<Schlsselwrter>, <Anweisungsmarken>, Zahlen) durch
       Leerzeichen usw. trennen.

4.1.1.3  Suchen nach Wrtern, suchen nach Gro-/Kleinschreibung
Wenn eine <gesuchte Zeichenfolge> nur auf ganze Wrter passen soll
(d.h. kein Buchstabe darf der <passenden Zeichenfolge> benachbart
sein), mu die <gesuchte Zeichenfolge> von dem <Schlsselwort> word
gefolgt sein.
Wenn eine <gesuchte Zeichenfolge> nur auf C-Identifier passen soll
(d.h. ganze Wrter, die aus Buchstaben, Ziffern und Unterstrichen
bestehen), mu die <gesuchte Zeichenfolge> von dem <Schlsselwort>
cword gefolgt sein.
Anmerkung: in beiden Fllen darf die <gesuchte Zeichenfolge> selbst
beliebige Zeichen enthalten!
Wenn Gro- und Kleinbuchstaben exakt bereinstimmen sollen, mu die
<gesuchte Zeichenfolge> von dem <Schlsselwort> case_sensitive
gefolgt sein.
Anmerkung: Sie knnen jedes <Schlsselwort> abkrzen, sofern die
Abkrzung in dem Umfeld eindeutig ist.
Beispiel 3:die folgende <gesuchte Zeichenfolge> 'high' pat auf
           'high' und 'High', aber nicht auf 'Highway':
'high' wo
Beispiel 4:die folgende <gesuchte Zeichenfolge> 'high' pat auf
           'high' und 'highway', aber nicht 'High':
'high' case


4.1.1.4  Einfaches Suchen und Ersetzen
Eine <passende Zeichenfolge> wird durch eine <Ersatzzeichenfolge>
ersetzt, wenn Sie ein = Zeichen und die <Ersatzzeichenfolge> an die
<gesuchte Zeichenfolge> anhngen.
Beispiel 5:verschiedene Abkrzungen suchen und durch ihre
           Erweiterungen ersetzen:
'P4D' = 'PED4DOS'; 'SQ' = 'Software-Quelle'; 'MS'='Microsoft'

Anmerkung: wenn PED4DOS eine <passende Zeichenfolge> gefunden hat,
berspringt er die <passende Zeichenfolge> (oder die
<Ersatzzeichenfolge>, wenn die <passende Zeichenfolge> ersetzt
wurde), bevor die nchste <Anweisung> ausgefhrt wird, so da kein
Teil dieser <Zeichenfolge> bei einer anschlieend ausgefhrten
<Suchanweisung> gefunden wird.


4.1.1.5  Suchmuster
Mehrere <Zeichenfolgen> knnen durch + Zeichen aneinandergehngt
werden, um ein einfaches <Suchmuster> zu bilden. Zwei Wrter,
getrennt durch ein Leerzeichen, knnen gleichermaen durch die
folgenden <Suchanweisungen> gefunden werden:
Beispiel 6
'two words'
'two' + ' ' + 'words'


4.1.1.6  Hexadezimale Zeichen
Wenn eine <Zeichenfolge> Zeichen enthlt, die nicht angezeigt
und/oder ber die Tastatur eingegeben werden knnen, knnen Sie den
hexadezimalen Modus benutzen:
1. ein einzelnes <hexadezimales Zeichen> innerhalb einer
   <Zeichenfolge> kann in der Form \xhh geschrieben werden, wobei
   der Platzhalter hh durch das passende Paar von <hexadezimalen
   Ziffern> ersetzt werden mu
2. eine <Zeichenfolge>, die nur aus <hexadezimalen Zeichen>
   besteht, kann in der Form x'hh...' geschrieben werden, wobei die
   Platzhalter hh durch passende Paare von <hexadezimalen Ziffern>
   ersetzt werden mssen.

Wenn eine <Zeichenfolge> eines der folgenden Zeichen enthlt,
benutzen Sie die Notation auf der rechten Seite:
TABULATOR      benutzen Sie die Notation \t (gleichbedeutend mit
               \x09 )
NEWLINE        benutzen Sie die Notation \n (gleichbedeutend mit
               \x0d\x0a )
'              benutzen Sie die Notation \'
\              benutzen Sie die Notation \\

Es folgen mehrere gleichbedeutende Notationen, um ein <Suchmuster>
zu beschreiben, welches aus den Zahlen '12' und '34', getrennt durch
ein TABULATOR Zeichen, besteht:
'12\t34'
'12\x0934'
x'3132093334'
'12' + x'09' + '34'


4.1.1.7  Suchen nach unbekannten Zeichenfolgen
Wenn Sie nach Wrtern suchen wollen, die durch mehrere LEERZEICHEN
getrennt sein knnen, suchen Sie nach einer <unbekannten
Zeichenfolge>, welche aus LEERZEICHEN besteht. Eine <unbekannte
Zeichenfolge> wird durch das * Zeichen reprsentiert und kann durch
die <Zeichenmenge> (d.h. die Menge aller Zeichen, die in der
<unbekannten Zeichenfolge> enthalten sein drfen) und eine
<Lngenbeschrnkung> genauer spezifiziert werden.
Beispiel 7:das folgende <Suchmuster> pat auf eine Folge von 'two'
           und 'words', getrennt durch ein oder mehrere LEERZEICHEN:
'two' + *(' ') + 'words'

Die <Zeichenmenge> kann aus den folgenden Komponenten gebildet
werden, unter Benutzung der + und - Operatoren:
1. eine <Zeichenfolge>; jedes Zeichen, welches in <Zeichenfolge>
   enthalten ist, wird Mitglied der <Zeichenmenge>
2. ein <Zeichenintervall> (d.h. zwei Zeichenfolgen, welche genau
   ein Zeichen enthalten, verbunden durch den .. <Operator>)
   '0'..'7' ist gleichbedeutend mit '01234567'
3. ein oder mehrere <Schlsselwrter> aus der folgenden Liste, die
   jeweils eine <vordefinierte Zeichenmenge> bezeichnen:
   letters, bezeichnet die Menge aller ASCII Buchstaben ('a'..'z' +
   'A'..'Z'),
   digits, bezeichnet die Menge aller Ziffern ('0'..'9'),
   specials, bezeichnet die Menge aller Sonderzeichen
   ((x'20'..x'7f') - (letters + digits))
   white_spaces oder ws, bezeichnet LEERZEICHEN und TABULATOR
   Zeichen (x'20'+x'09')
   new_lines oder nl, bezeichnet die NEWLINE Zeichen
   Anmerkung: die <Schlsselwrter> drfen abgekrzt werden.
Mehrere <Zeichenmengen> knnen durch runde Klammern gruppiert
   werden.
Ein - <Operator> vor dem ersten Element einer <Zeichenmenge> bedeute
"jedes Zeichen auer den folgenden"
Beispiele:
*('abc')       pat auf die Buchstaben 'a', 'b' und 'c'
*('0'..'9')    pat auf alle Ziffern von '0' bis '9'
*(l+d)         pat auf alle ASCII Gro- und Kleinbuchstaben und
               Ziffern
*(ws+nl)       pat auf alle LEERZEICHEN und TABULATOR und NEWLINE
               Zeichen
*(-(ws+nl))    pat auf alle Zeichen auer LEERZEICHEN, TABULATOR
               und NEWLINE
*(x'21'..x'7f')pat auf alle druckbaren ASCII Zeichen
*(sp - ;,.)  pat auf alle Sonderzeichen auer Semikolon, Komma
               und Punkt

Wenn Sie eine explizite <Lngenbeschrnkung> fr die <unbekannte
Zeichenfolge> definieren wollen, benutzen Sie das <Schlsselwort>
length, gefolgt von der <exakte Lngenangabe> oder von einem
Intervall aus <minimaler Lnge> und <maximaler Lnge>,
eingeschlossen in runde Klammern. Wenn Sie keine explizite
<Lngenbeschrnkung> definieren, wird standardmig length (1 ..
256) angenommen:
Beispiele:
length 4       genau 4 Zeichen
l (4 .. 9)     mindestens 4, hchstens 9 Zeichen
len ( .. 9)    hchstens 9 Zeichen
len (4 .. )    mindestens Zeichen, hchstens 256 Zeichen


4.1.1.8  Ersatzmuster
Wenn die <Ersatzzeichenfolge> einen Teil der gefundenen <passenden
Zeichenfolge> enthalten soll, der einem einzelnen <Suchbegriff>
innerhalb des <Suchmusters> entspricht, knnen Sie dieses durch
einen <Ersatzbegriff> referenzieren, der aus einem * Zeichen,
gefolgt von einer Zahl n, besteht; dieser <Ersatzbegriff> bezieht
sich auf die Zeichenfolge, die auf den n-ten <Suchbegriff> innerhalb
des <Suchmusters> pat.
Beispiel 8:zwei Wrter, getrennt durch LEERZEICHEN, sollen
           ausgetauscht werden:
*(letters) + *(' ') + *(letters) = *3 + *2 + *1;

Wenn die gesuchten Wrter sowohl durch LEERZEICHEN als auch
TABULATOR und NEWLINE Zeichen getrennt sein knnen, ndern Sie den
zweiten <Suchbegriff>:
Beispiel 9:zwei Wrter, getrennt durch LEERZEICHEN, TABULATOR und
           NEWLINE Zeichen, sollen ausgetauscht werden:
*(l) + *(ws + nl) + *(l) = *3 + *2 + *1;

Vorschau: Kapitel 4.1.3.1 beschreibt, wie Teile der <passenden
Zeichenfolge> in <Textvariablen> gespeichert werden knnen, wie der
Inhalt von <Textvariablen> gendert werden kann, und wie
<Textvariable> als Teil des <Ersatzmuster> benutzt werden knnen.

4.1.1.9  Suchbereich
Sie knnen die Suche auf bestimmte Spalten innerhalb jeder Zeile
beschrnken. Der <Suchbereich> kann genau eine Spalte oder einen
Spaltenbereich angeben. Wenn eine <Suchanweisung> einen
<Suchbereich> enthlt, mu die <passende Zeichenfolge> in den
angegebenen Spalten beginnen. Ein <Suchbereich> besteht aus einer
einzelnen Spaltennummer oder aus einem Intervall von Spaltennummern,
umgeben von < und > Zeichen.

Beispiel 10:    die <Suchanweisungen>:
<1 .. 10> 'word';
oder
<7> 'word';
finden das erste Vorkommen von 'word' in der folgenden Zeile, aber
nicht das zweite
first word, second word

4.1.2    Sprunganweisungen und Anweisungsmarken
Die sequentielle Ausfhrung eines <Suchprogramms> kann durch
<Sprunganweisungen> beeinflut werden; die Ausfhrung einer
<Sprunganweisung> kann davon abhngen, ob zuvor eine <passende
Zeichenfolge> gefunden wurde.
Eine <Sprunganweisung> beginnt mit einem Doppelpunkt, gefolgt von
einem optionalen <Bedingung> Schlsselwort, gefolgt von dem
<Sprungziel>.
<Sprungziel> kann sein
1. die <Anweisungsmarke> der <Anweisung> die als nchste ausgefhrt
   werden soll
2. die <Dateiposition> in der <aktuellen Datei>, an der die Suche
   fortgesetzt werden soll.
Sie knnen eine <Anweisung> mit einer <Anweisungsmarke> versehen,
indem Sie einfach den Namen der <Anweisungsmarke>, gefolgt von einem
Doppelpunkt, vor die <Anweisung> schreiben. Die <Anweisungsmarke>
darf bis zu 15 Zeichen (jede Kombination aus Buchstaben, Ziffern und
Unterstrichen _ ) enthalten; Klein- und Grobuchstaben sind
gleichbedeutend.
Die Ausfhrung einer <Sprunganweisung> kann vom aktuellen Inhalt der
globalen <Trefferanzeige> abhngen. <Trefferanzeige> wird auf true
gesetzt, wenn eine <passende Zeichenfolge> in der <aktuellen Datei>
gefunden wird; <Trefferanzeige> wird auf false gesetzt, wenn eine
<Suchanweisung> ausgefhrt wird und keine <passende Zeichenfolge> an
der aktuellen <Suchposition> gefunden wird. Benutzen Sie die
<Bedingung> true, wenn die <Sprunganweisung> nur dann ausgefhrt
werden soll, wenn die <Trefferanzeige> auf true gesetzt ist.
Benutzen Sie die <Bedingung> false, wenn die <Sprunganweisung> nur
dann ausgefhrt werden soll, wenn die <Trefferanzeige> auf false
gesetzt ist. Lassen Sie die <Bedingung> fort, wenn die
<Sprunganweisung> auf jeden Fall ausgefhrt werden soll.
Ersetzen Sie die <Dateiposition> durch die absolute Nummer der
Zeile, der Spalte oder des Bytes innerhalb der <aktuellen Datei>,
oder durch die relative Anzahl von Zeilen, Spalten oder Bytes ,
gerechnet von der aktuellen <Suchposition> (in Verbindung mit einem
der <Datenelement> Schlsselwrter lines, columns, or bytes), wo die
Suche fortgesetzt werden soll. Eine relative Anzahl wird durch ein +
(oder -) Vorzeichen vor dem numerischen Wert gekennzeichnet und
bedeutet: berspringe n <Datenelemente> von der aktuellen
<Suchposition> in Richtung des Endes (des Anfangs) der <aktuellen
Datei>.
Achtung: Eine relative Anzahl zhlt von der aktuellen <Suchposition>
aus.
Ersetzen Sie die <Dateiposition> durch einen der <Position
Operatoren> ++ oder --, wenn Sie die <Suchposition> auf das Ende
oder den Anfang der <aktuellen Datei> setzen wollen.

Anmerkung: wenn das <Sprungziel> einer <Sprunganweisung> eine neue
<Suchposition> bezeichnet, wird die <Trefferanzeige> auf false
gesetzt, falls diese <Suchposition> auerhalb der <aktuellen Datei>
liegt; Sie sollten diese "end of file" Bedingung nicht ignorieren,
da dies zu einer Endlosschleife fhren knnte!

Beispiel 11:    das Wort 'FILES' nahe dem Beginn der Zeile suchen;
           wenn nicht gefunden, die <Suchposition> auf den Beginn
           der nchsten Zeile setzen und die Suche fortsetzen, falls
           eine nchste Zeile existiert.
search:
<1>*(ws) + 'files' word : false error;
// edit the line that contains the word 'files'
// see examples

error: : <+ 1 line>; : true search;

Die folgenden <Anweisungsmarken> sind implizit definiert und haben
eine spezielle Bedeutung:
begin          erste <Anweisung> des <Suchprogramms>
end            hinter der letzten <Anweisung> des <Suchprogramms>
stop           Beendigung des <Suchprogramms>

Sie knnen Ihre eigene begin <Anweisungsmarke> hinter den
"Initialisierungsanweisungen" eines <Suchprogramm> definieren: alle
<Anweisungen> welche der begin <Anweisungsmarke> vorausgehen, werden
nur einmal beim Start des <Suchprogramm> ausgefhrt (sofern sie
nicht andere <Anweisungsmarken> enthalten).

Die folgende <Anweisungsmarke> hat eine spezielle Bedeutung:
eof            die <Anweisungen> ,welche dieser <Anweisungsmarke>
               folgen, werden automatisch ausgefhrt, wenn bei der
               Suche das Ende der <aktuellen Datei> erreicht wird
               (nicht jedoch, wenn eine <Sprunganweisung> zu einer
               nicht existierenden <Dateiposition> ausgefhrt wird).

Beispiel 12:    suchen des ersten Auftretens des Wortes 'FILES' ;
           danach beenden des <Suchprogramms>.
'FILES' word case : true stop;

Beispiel 13:    kleiner (und unvollstndiger) Teil eines
           Syntaxprfers fr C-Programme:
'if' cw ca : t if_stmnt;
'switch' cw ca : t switch_stmnt;
'while' cw ca : t while_stmnt;
...
if_stmnt:// check syntax of the if statement
   *(ws+nl) len(0..) + '(' + * + ')' :f error;
...
error: : s ;


4.1.3    Variable

4.1.3.1  Textvariable

4.1.3.1.1Implizite Zuweisung an Textvariable
Wenn Sie die <passende Zeichenfolge>in einer <Textvariable> fr die
sptere Verwendung speichern wollen, hngen Sie den  >  <Operator>,
gefolgt vom <Namen> der <Textvariable>, an den <Suchbegriff> an. Der
<Name> einer <Textvariable> mu mit einem $ Zeichen beginnen,
welches von bis zu 15 Zeichen (jede Kombination aus ASCII
Buchstaben, Ziffern und Unterstrichen _ ) gefolgt wird; Klein- und
Grobuchstaben sind gleichbedeutend.
Wenn Sie die <passende Zeichenfolge> an den Inhalt einer
<Textvariable> anhngen wollen, benutzen Sie den  >>  <Operator>
anstelle des  >  <Operator>:

Anmerkung: Wenn Sie nach einem zusammengesetzen <Suchmuster> suchen,
welches aus mehreren <Suchbegriffen> besteht, findet die <implizite
Zuweisung> erst dann statt, wenn eine <passende Zeichenfolge> fr
das gesamte <Suchmuster> gefunden wurde.

Beispiel 14:    irgendein Wort in Spalte 1 suchen und in der
           <Textvariable> $word speichern.
<1> *(letters) > $word;


4.1.3.1.2Anwendung von Textvariablen
Eine <Textvariable> kann berall dort verwendet werden, wo eine
<Zeichenfolge> innerhalb einer <Anweisung> angegeben werden mu.
Wenn eine <Textvariable> benutzt wird (z.B. als Teil eines
<Ersatzmusters>), bevor ihr ein Wert zugewiesen wurde, versucht
PED4DOS den Wert einer <Umgebungsvariable> mit dem entsprechenden
Namen (d.h. der <Name> der <Textvariable> ohne das einleitende $
Zeichen) zu benutzen.

Beispiel 15:    zwei Wrter, getrennt durch LEERZEICHEN, TABULATOR
           und NEWLINE Zeichen, sollen ausgetauscht werden (gleiches
           Ergebnis wie Beispiel 9, aber unter Verwendung von
           <Textvariablen>):
*(l) > $w1 + *(ws + nl) > $sp + *(l) > $w2 = $w2 + $sp + $w1;

Beispiel 16:    zwei Wrter, getrennt durch LEERZEICHEN, TABULATOR
           und NEWLINE Zeichen, sollen in einer <Textvariable>
           $string gespeichert werden:
*(l) > $string + *(ws + nl) >> $string + *(l) >> $string;
Beispiel 17:    das Wort 'PATH' suchen und durch den aktuellen Wert
           der PATH <Umgebungsvariable> ersetzen:
'PATH' w ca = $path;


4.1.3.1.3Explizite Zuweisung an Textvariable
Wenn Sie explizit einen Wert an eine <Textvariable> zuweisen wollen,
benutzen Sie die Notation
( <Textvariable> = <Textausdruck> )
Die umgebenden runden Klammern sind erforderlich, um die <explizit
Zuweisung> von einer <Suchanweisung> zu unterscheiden.
Benutzen Sie die folgenden Notationen fr <Textausdruck> , wo
<Textelement> eine <konstante Zeichenfolge>, eine <Textvariable>
oder eine <Textfunktion> sein kann (<numerischer Ausdruck> wird in
Kapitel 4.1.3.2.3 erklrt:
1. <Textelement>
2. (<Textausdruck> )
3. <Textausdruck> <Textoperator> <Textausdruck>
   Ersetzen Sie <Textoperator> durch einen der folgenden:
   +  Verkettung
      Beispiel:
      'abc'+'123' // == 'abc123'
   .. Intervall (beide <Textelemente> sollten genau 1 Zeichen
       enthalten; anderenfalls wird nur das erste Zeichen benutzt)
      Beispiele:
      'a' .. 'd' // == 'abcd'
      x'fd' .. x'02' // == x'fdfeff000102'
   &  Bitweise UND
      Beispiel:
      x'13f2' & x'7633' // == x'1232'
   ^  Bitweise XOR
      Beispiel:
      x'13f2' ^ x'7633' // == x'65c1'
   |   Bitweise OR
      Beispiel:
      x'13f2' | x'7633' // == x'77f3'
4. <Textausdruck> * <numerischer Ausdruck>
   Beispiel:
   'abc' * 3 // == 'abcabcabc'

Die <Trefferanzeige> wird auf true gesetzt, wenn das Ergebnis von
<Textausdruck> mindestens ein Zeichen enthlt, sonst auf false.
Beispiel 18:    Kombination von Beispiel 15 und Beispiel 16:
*(l) > $w1 + *(ws + nl) > $sp + *(l) > $w2;
($string = $w2 + $sp + $w1);

Eine vordefinierte <Textvariable> namens display kann benutzt
werden, um einen <Textausdruck> auf dem Bildschirm anzuzeigen.
Beispiel 19:    zeige den Inhalt der PATH Umgebungsvariable an
           (explizite Zuweisung):
(disp = $PATH);

Beispiel 20:    zeige die gefundene <passende Zeichenfolge> an
           (implizite Zuweisung):
<1>*(l) > disp;

Eine vordefinierte <numerische Variable> namens retcode kann benutzt
werden, um den "Exit Code" von PED4DOS whrend der Ausfhrung des
<Suchprogramms> zu setzen (und nach Beendigung von PED4DOS in einer
Kommando-Datei entsprechend zu verzweigen).
Beispiel 21:    setze den "Exit Code" von PED4DOS auf 2:
(retcode = 2);


4.1.3.1.4Vergleich von Textvariablen
Wenn Sie den aktuellen Inhalt eines <Textelements> oder eines
<Textausdrucks> prfen wollen, benutzen Sie die Notation
( <Textausdruck> <Vergleichsoperator> <Textausdruck> )
Die umgebenden runden Klammern sind erforderlich. <Textausdruck>
wurde in Kapitel 4.1.3.1.3 erklrt.
Anmerkung: Das Ergebnis eines Vergleichs ist ein <numerischer Wert>
(1 == true, 0 == false).
Die folgenden <Vergleichsoperatoren>sind zulssig und setzen die
<Trefferanzeige> auf true wenn die Beschreibung wahr ist:
==     beide Operanden sind gleich
!=     beide Operanden sind verschieden
<      der linke Operand ist alphabetisch kleiner als der rechte
       Operand
>      der linke Operand ist alphabetisch grer als der rechte
       Operand
<=     der linke Operand ist alphabetisch kleiner als oder gleich
       wie der rechte Operand
>=     der linke Operand ist alphabetisch grer als oder gleich
       wieder rechte Operand

Beispiel 22:    andere Version von Beispiel 13:
*(l) > $keyword: f e;
($keyword == 'if') : t if_stmnt;
($keyword == 'switch') : t switch_stmnt;
($keyword == 'while') : t while_stmnt;
...
if_stmnt:// check syntax of the if statement
   *(ws+nl) + '(' + * + ')' :f error;
...
error: : s ;


4.1.3.2  Numerische Variable

4.1.3.2.1Implizite Zuweisung an numerische Variable
Wenn Sie die <Suchposition> einer <passenden Zeichenfolge> in einer
<numerischen Variable> fr die sptere Verwendung speichern wollen,
hngen Sie den  >  <Operator>, gefolgt vom <Name> der <numerische
Variable>, an den <Suchbegriff> an. Der <Name> einer <numerischen
Variablen> mu mit einem # Zeichen beginnen, gefolgt von bis zu 15
Zeichen (jede Kombination aus Buchstaben, Ziffern und Unterstrichen
_ ); Klein- und Grobuchstaben sind gleichbedeutend.. Eine
<numerische Variable> kann jeden ganzzahligen Wert im Bereich von -
999999999 bis +999999999 aufnehmen.

Anmerkung: Wenn Sie nach einem zusammengesetzen <Suchmuster> suchen,
welches aus mehreren <Suchbegriffen> besteht, findet die <implizite
Zuweisung> erst dann statt, wenn eine <passende Zeichenfolge> fr
das gesamte <Suchmuster> gefunden wurde.


4.1.3.2.2Anwendung von numerischen Variablen
Eine <numerische Variable> kann berall benutzt werden, wo ein
<numerisches Element> innerhalb einer <Anweisung> angegeben werden
mu.
Wenn eine <numerische Variable> benutzt wird, bevor ihr ein Wert
zugewiesen wurde, benutzt PED4DOS den Wert 0.

Beispiel 23:    das Wort 'placeholder' suchen und seine
           <Suchposition> merken; den neuen Wert fr 'placeholder'
           irgendwo in der <aktuellen Datei> suchen; zur gemerkten
           <Suchposition> springen und 'placeholder' ersetzen:
'placeholder' > #ph;
// search the new value for 'placeholder'

// $ph contains the new value for 'placeholder'
: <#ph>; 'placeholder' = $ph : stop;


4.1.3.2.3Explizite Zuweisung an numerische Variable
Wenn Sie explizit einen Wert an eine <numerische Variable> zuweisen
wollen, benutzen Sie die Notation
(<Numerische Variable> = <numerischer Ausdruck> )
Die umgebenden runden Klammern sind erforderlich.
Benutzen Sie die folgenden Notationen fr <numerischer Ausdruck> wo
<numerisches Element> eine <numerische Konstante>, eine <numerische
Variable> oder eine <numerische Funktion> sein kann:
1. <numerisches Element>
2. (<numerischer Ausdruck> )
3. <numerischer Ausdruck> <numerischer Operator> <numerischer
   Ausdruck>
   Ersetzen Sie <numerischer Operator> durch einen der folgenden:
   +  Addition
   -  Subtraktion
   *  Multiplikation
   /  Division
   %  Rest
   << Bitweise shift left
   >> Bitweise shift right
   &  Bitweise UND
   ^  Bitweise XOR
   |   Bitweise OR
   && Logisch UND
   ||   Logisch OR

Die <Trefferanzeige> wird auf false gesetzt, wenn das Ergebnis des
<numerischen Ausdrucks> gleich 0 ist, sonst auf true.

Beispiel 24:
(#1 = (#2 * (#3 + 3)));


4.1.3.2.4Vergleich von numerischen Variablen
Wenn Sie den Inhalt eines <numerisches Element> oder eines
<numerischen Ausdrucks> prfen wollen, benutzen Sie die Notation
( <numerischer Ausdruck> <Vergleichsoperator> <numerischer Ausdruck>
)
Die umgebenden runden Klammern sind erforderlich. <numerischer
Ausdruck> wurde in Kapitel 4.1.3.2.3 erklrt.
Anmerkung: Das Ergebnis eines Vergleich ist ein <numerischer Wert>
(1 == true, 0 == false).
Die folgenden <Vergleichsoperatoren>sind zulssig und setzen die
<Trefferanzeige> auf true, wenn die Beschreibung wahr ist:
==     beide Operanden sind gleich
!=     beide Operanden sind verschieden
<      der linke Operand ist kleiner als der rechte Operand
>      der linke Operand ist grer als der rechte Operand
<=     der linke Operand ist kleiner als oder gleich wie der rechte
       Operand
>=     der linke Operand ist grer als oder gleich wieder rechte
       Operand


4.1.3.3  Funktionen
Wenn Sie das Ergebnis einer <Funktion> erhalten wollen, benutzen Sie
die Notation
<Funktion> ( <Parameter>, <Parameter>,... )
Die Anzahl der Parameter und deren Typ hngt von der jeweiligen
<Funktion> ab; jeder <Parameter> mu durch eine <Variable> oder
<Konstante> des verlangten Typs ersetzt werden. Mehrere
vordefinierte <Funktionen> sind verfgbar (siehe unten).

4.1.3.3.1Textfunktionen
Eine <Textfunktion> kann berall benutzt werden, wo ein
<Textelement> erforderlich ist.

$num(#var)              ergibt den Wert von #var im druckbaren
                        Format.
                         Beispiel:
                        $val = $num(123) // = '123'
$hex(#var, #len)        ergibt den Wert von #var als hexadezimale
                        Zeichenfolge, die mindestens #len
                        (hchstens 8) <hexadezimale Ziffern>
                        enthlt.
                        Beispiel:
                        $val = $hex(0x123, 4) // = '0123'
$mem(#var, #count)      ergibt die niederwertigen #count
                        (hchstens 4) Bytes der <numerischen
                        Variablen> #var als eine <Zeichenfolge>.
                        Beispiel:
                        $val = $mem(0x616263, 2) // = 'cb' =
                        x'6362'
$substr($var, #start,   ergibt einen Teil der Zeichenfolge in
#len)                   $var, beginnend mit #start und mit einer
                        Lnge von hchstens #len Zeichen. (#start
                        == 1 bedeutet: beginnend mit dem ersten
                        Zeichen)
                        Beispiel:
                        $val = $substr('abcdef', 2, 3) // = 'bcd'
$input($var)            zeigt den in $var bergebenen Text auf dem
                        Bildschirm an; ergibt die Zeichenfolge,
                        welche Sie ber die Tastatur eingeben und
                        mit ENTER abschlieen
                        Beispiel:
                        $val = $input('new value for $val ')
$lower($var)            ergibt die Zeichenfolge aus $var in
                        Kleinbuchstaben.
                        Beispiel:
                        $val = $lower('AbCDef') // = 'abcdef'
$upper($var)            ergibt die Zeichenfolge aus $var in
                        Grobuchstaben.
                        Beispiel:
                        $val = $upper('AbCDef') // = 'ABCDEF'
$file(0)                ergibt den Namen der <aktuellen Datei>
                        (der Parameterwert 0 ist fr zuknftige
                        Erweiterungen erforderlich)


4.1.3.3.2Numerische Funktionen
Eine <numerische Funktion> kann berall benutzt werden, wo ein
<numerisches Element> erforderlich ist.

#len($var)              ergibt die Anzahl der Zeichen in $var.
                        Beispiel:
                        #val = #len('abc') // = 3
#byte()                 ergibt die aktuelle <Suchposition>, d.h.
                        den Abstand vom Beginn der <aktuellen
                        Datei> zu dem Zeichen, das als nchstes
                        berprft wird, um den Beginn einer
                        <passenden Zeichenfolge> zu finden; der
                        Wert 0 bezeichnet das erste Zeichen der
                        Datei
                        Beispiel:
                        #val = #byte() // = 0 am Dateianfang
#line()                 ergibt die Nummer der Zeile, die die
                        <Suchposition> enthlt; der Wert 1
                        bezeichnet die erste Zeile der Datei.
                        Anmerkung: Diese Funktion ergibt den Wert
                        0, wenn die aktuelle Datei keine ASCII
                        Textdatei ist.
                        Beispiel:
                        #val = #line() // = 1 am Dateianfang
#column()               ergibt die Nummer der Spalte innerhalb der
                        Zeile, die die <Suchposition> enthlt; der
                        Wert 1 bezeichnet die erste Spalte der
                        Zeile.
                        Anmerkung: Diese Funktion ergibt den Wert
                        0, wenn die aktuelle Datei keine ASCII
                        Textdatei ist.
                        Beispiel:
                        #val = #Spalte() // = 1 am Beginn eine
                        Zeile
#num($var)              ergibt den ganzzahligen Wert der
                        abdruckbaren Zahl in $var.
                        Beispiel:
                        #val = #num('123') // = 123
#hex($var)              ergibt den ganzzahligen Wert der
                        hexadezimalen Zeichenfolge in $var.
                        Beispiel:
                        #val = #hex('1f2') // = 0x1f2
#mem($var, #count)      ergibt die ersten #count (hchstens 4)
                        Bytes der<Textvariable> $var als
                        ganzzahligen Wert.
                        Beispiel:
                        #val = #mem(x'010203', 2) // = 0x0201
#options($var)          modifiziert die "Ausfhrungsoptionen" fr
                        alle Dateien entsprechend der bergebenen
                        Zeichenfolge in $var; die Zeichenfolge mu
                        mit den Zeichen 'p:',beginnen, die gefolgt
                        sind von den Optionen, wie im Kapitel 2
                        beschrieben
                        Beispiel:
                        #options('p:b') // setze Batch Modus fr
                        alle Dateien


4.2 Syntax Zusammenfassung

4.2.1    Ausfhrung eines Suchprogramms
Dieses Kapitel beschreibt genau, wie PED4DOS ein <Suchprogramm>
ausfhrt:
1.     Die <Suchposition> wird auf 0 gesetzt (das ist das erste Byte
       der <aktuelle Datei>; die erste <Anweisung> des
       <Suchprogramms> wird die aktuelle <Anweisung>.
2.     Wenn die aktuelle <Anweisung> eine <Suchanweisung> ist:
       2.1    Die <Zeichenfolge> die an der <Suchposition> beginnt,
               wird mit dem <Suchmuster> verglichen. Wenn eine
               <passende Zeichenfolge> gefunden wird:
               2.1.1  Die <Trefferanzeige> wird auf true gesetzt
               2.1.2  Wenn ein <Ersatzmuster> definiert wurde, wird
                       die <passende Zeichenfolge> durch eine
                       <Ersatzzeichenfolge> ersetzt (nach
                       Besttigung)
               2.1.3  Die <Suchposition> wird hinter die <passende
                       Zeichenfolge> (oder hinter die
                       <Ersatzzeichenfolge> wenn eine Ersetzung
                       stattgefunden hat) gesetzt
3.     Wenn die aktuelle <Anweisung> eine <Zuweisung> oder ein
       <Vergleich> ist:
       3.1    Die Zuweisung oder der Vergleich wird ausgefhrt
       3.2    Die <Trefferanzeige> wird entsprechend dem Ergebnis
               gesetzt (siehe Kapitel 4.1.3.1.3, 4.1.3.1.4,
               4.1.3.2.3, und 4.1.3.2.4)
4.     Wenn die aktuelle <Anweisung> eine <Sprunganweisung> ist,
       deren <Sprungziel> eine <Anweisungsmarke> ist, wird die
       <Anweisung> nach der <Anweisungsmarke> zur aktuellen
       <Anweisung> (Fortsetzung bei 2.)
5.     Wenn die aktuelle <Anweisung> eine <Sprunganweisung> ist,
       deren <Sprungziel> eine <Dateiposition> ist, wird die
       <Suchposition> auf <Dateiposition> gesetzt und die
       <Trefferanzeige> auf true gesetzt, wenn <Dateiposition>
       existiert (anderenfalls wird die <Suchposition> hinter das
       letzte Byte der <aktuelle Datei> gesetzt und die
       <Trefferanzeige> auf false)
6.     Wenn die aktuelle <Anweisung> eine <Sprunganweisung> zu der
       vordefinierten stop <Anweisungsmarke> ist:
       6.1    Das <Suchprogramm> wird beendet.
7.     Wenn die aktuelle <Anweisung> die letzte <Anweisung> des
       <Suchprogramms> ist, oder eine <Sprunganweisung> zu der
       vordefinierten end <Anweisungsmarke> ausgefhrt wird:
       7.1    Die <Suchposition> wird um 1 erhht, auer wenn
               entweder    eine <passende Zeichenfolge> gefunden
                       wurde, whrend die vorausgehenden
                       <Suchanweisungen> ausgefhrt wurden
               oder   die <Suchposition> explizit beim Ausfhren
                       einer <Sprunganweisung> verndert wurde
              Fr die sequentielle Ausfhrung eines <Suchprogramms>
               bedeutet dies, da alle <Suchanweisungen>
               nacheinander an derselben <Suchposition> ausgefhrt
               werden und, wenn keine <passende Zeichenfolge>
               gefunden wird, die <Suchposition> auf das nchste
               Byte gesetzt wird, bis alle Bytes der Datei berprft
               sind.
       7.2    Wenn das Ende der <aktuellen Datei> erreicht wurde
               7.2.1  wenn eine eof <Anweisungsmarke> in dem
                       <Suchprogramm> definiert wurde, wird ein
                       Sprung zu dieser <Anweisungsmarke>
                       ausgefhrt.
               7.2.2  Anderenfalls wird das <Suchprogramm> beendet.
       7.3    Die erste <Anweisung> (oder die <Anweisung> welche
               auf die begin <Anweisungsmarke> folgt, falls Sie eine
               solche definiert haben) wird zur aktuellen Anweisung.
               (Fortsetzung bei 2.)
8.     Die <Anweisung> nach der aktuellen <Anweisung> wird zur
       aktuellen <Anweisung> (Fortsetzung bei 2.)

4.2.2    Syntax Beschreibung

4.2.2.1  Definitionen
Terminale sind Endpunkte in der Syntax Definition. Keine andere
Auflsung ist mglich. Terminale schlieen die reservierten
Schlsselwrter und vom Anwender definierten Identifier ein.
Schlsselwrter knnen abgekrzt werden, solange sie im aktuellen
Kontext eindeutig sind.
Nichtterminale sind Platzhalter in der Syntax und werden an anderer
Stelle in der Syntax-Definition erklrt. Definitionen knnen
rekursiv sein.
Eine Produktionsregel beschreibt, wie Nichtterminale durch eine
Komposition aus Terminalen und Nichtterminalen (allgemein Symbole
genannt) ersetzt werden knnen. Der Operator  ::=  bedeutet "kann
ersetzt werden durch eine Kombination aus".

4.2.2.2  Konventionen
Die folgenden Zeichen und/oder Fonts haben eine spezielle Bedeutung:
Bold text         bezeichnet ein Terminal; Sie mssen Terminale
                  genau so eingeben, wie sie hier gezeigt werden
                  (aber kleine und groe Buchstaben sind
                  gleichbedeutend); jedes Zeichen bzw. jedes
                  Zeichenfolge, die keine spezielle Bedeutung in
                  diesem Kapitel hat, ist ein Terminal (auch wenn
                  sie nicht in fetter Schrift dargestellt ist)
<Nichtterminal>   Bezeichnet ein Symbol, welches durch eine
                  Kombination aus Terminalen und Nichtterminalen
                  ersetzt werden kann; der Name eines
                  Nichtterminals darf LEERZEICHEN enthalten.
                  Beispiel: <explizite Zuweisung>
|                 trennt Alternativen
[]                Schliet optionale Symbole ein
{}                Schliet Symbole ein, die wiederholt werden
                  drfen
{}n               Schliet Symbole ein, die exakt n mal wiederholt
                  werden mssen
{}n1..n2          Schliet Symbole ein, die mindestens n1 mal und
                  hchstens n2 mal wiederholt werden mssen (wenn
                  n2 fehlt, knnen die Symbole beliebig oft
                  wiederholt werden)
"..."             Kommentar, der die Produktionsregel beschreibt

Symbole, die in dieser Syntax Definition durch LEERZEICHEN getrennt
sind, knnen durch beliebig viele LEERZEICHEN, TABULATOR und NEWLINE
Zeichen sowie Kommentare getrennt werden; ein Kommentar beginnt mit
zwei Schrgstrichen (//) und endet am Ende der Zeile.

4.2.2.3  Syntax Teil 1
Der erste Teil der Syntax Beschreibung zeigt den grundstzlichen
Aufbau eines <Suchprogramms> in hierarchischer Reihenfolge:

Nichtterminal     kann ersetzt werden durch   Kommentar
<Suchprogramm>    <Anweisung> {; <Anweisung>  "ein <Suchprogramm>
::=               } 0..n                      besteht aus einer
                                              oder mehreren
                                              <Anweisungen>,
                                              getrennt durch
                                              Semikolons"
<Anweisung> ::=   [ <Anweisungsmarke> : ]     "eine <Anweisung>
                  [   <Suchanweisung>         ist eine
                     | <explizit Zuweisung>   <Suchanweisung>
                     | <Vergleich> ]          oder eine
                  { <Sprunganweisung> } 0..n  <explizite
                                              Zuweisung> oder ein
                                              <Vergleich>; sie
                                              kann mit einer
                                              optionalen
                                              <Anweisungsmarke>,
                                              gefolgt von einem
                                              Doppelpunkt,
                                              versehen sein; sie
                                              kann von einer oder
                                              mehreren
                                              <Sprunganweisungen>
                                              gefolgt sein "
<Anweisungsmarke> <Name>                      
::=
<Suchanweisung>   [<Suchbereich>]             
::=               <Suchmuster> [ =
                  <Ersatzmuster> ]
<explizite          ( <Textvariable> =        
Zuweisung> ::=    <Textausdruck> )
                  | ( <numerische Variable> =
                  <numerischer Ausdruck> )
<Vergleich> ::=     ( <Textausdruck>          
                  <Vergleichsoperator>
                  <Textausdruck> )
                  | ( <numerischer Ausdruck>
                  <Vergleichsoperator>
                  <numerischer Ausdruck> )
<Sprunganweisung> : [ <Bedingung> ]           
::=                {
                     <Anweisungsmarke>
                  |   < <Dateiposition> >
                   }


4.2.2.4  Syntax Teil 2
Der zweite Teil der Syntaxbeschreibung zeigt alle Nichtterminale
eines <Suchprogramms> in alphabetischer Reihenfolge:

Nichtterminal     kann ersetzt werden    Kommentar
                  durch
<Anweisungsmarke> <Name>                 
::=
<Bedingung> ::=   true                   "springe wenn
                                         <Trefferanzeige> auf
                  | false                true gesetzt ist"
                                         " springe wenn
                                         <Trefferanzeige> auf
                                         false gesetzt ist "
<Buchstabe> ::=   a | b | c | ... | y |  "jeder ASCII Klein- oder
                  z | A | B | ... | Y |  Grobuchstabe"
                  Z
<Dateiposition>      [ <Datenelement> ]  "<numerisches Element>
::=                  [ <relativer        bezeichnet die Nummer
                  Operator> ]            einer Zeile oder Spalte
                     <numerisches        (Basis 1) oder die
                  Element> >             Nummer eines Bytes
                                         (Basis 0), abhngig vom
                                         durch <Datenelement>
                                         angegebenen Typ"
                                         "Anmerkung: die
                                         Reihenfolge der
                  |  --                  einzelnen Elemente von
                  |  ++                  <Dateiposition> ist
                                         beliebig"
                                         "-- = begin of file"
                                         "++ = end of file"
<Datenelement>       lines               "nur in ASCII
::=               |  columns             Textdateien gltig"
                  |  bytes               "nur in ASCII
                                         Textdateien gltig"
                                         "default"
<druckbares                              "jedes Zeichen, das auf
Zeichen> ::=                             dem Bildschirm
                                         dargestellt und mittels
                                         der Tastatur eingegeben
                                         werden kann "
<Ersatzbegriff>   <Textelement>          
::=               | * <numerisches       "<numerisches Element>
                  Element>               identifiziert die
                                         <passende Zeichenfolge>
                                         die mit dem n-ten
                                         <Suchbegriff>
                                         bereinstimmt"
<Ersatzmuster>    <Ersatzbegriff> { +    
::=               <Ersatzbegriff>}0..n
<exakte Lnge>    1 .. 256               "jeder Wert von 1 bis
::=                                      256 "
<hexadezimale     <Ziffer>               
Ziffer> ::=       | A | a | B | b | C |
                  c | D | d | E | e | F
                  | f

<hexadezimales    <hexadezimale          "Beispiel:
Zeichen> ::=      Ziffer><hexadezimale   x'1b' entspricht der ESC
                  Ziffer>                Taste"
<implizite           > <Textvariable>    "speichert die <passende
Zuweisung> ::=                           Zeichenfolge> in
                  |  >> <Textvariable>   <Textvariable>"
                                         "hngt die <passende
                                         Zeichenfolge> an den
                  |  > <numerische       Inhalt von
                  Variable>              <Textvariable> an"
                                         "speichert die
                                         <Suchposition> der
                                         <passenden Zeichenfolge>
                                         in <numerische
                                         Variable>"
<konstante          '{<Zeichen>}0..256'  
Zeichenfolge> ::= |  x'{<hexadezimales
                  Zeichen>}0..256'
<Lngenbeschrnku  length                "entweder <minimale
ng> ::=           { <exakte Lnge>       Lnge> oder <maximale
                     | ( [ <minimale     Lnge> ist erforderlich;
                  Lnge> ] .. [<maximale wenn beide angegeben
                  Lnge> ] )             sind, mu <minimale
                  }                      Lnge> kleiner als
                                         <maximale Lnge> "
<maximale Lnge>  1 .. 256               "jeder Wert von 1 bis
::=                                      256 "
<minimale Lnge>  0 .. 256               "jeder ganzzahlige Wert
::=                                      von 0 bis 256 "
<Name> ::=        { <Buchstabe> |        " Klein- und
                  <Ziffer> | _ }1..15    Grobuchstaben sind
                                         gleichbedeutend "
<numerische       #<Name> (              "siehe Beschreibung der
Funktion> ::=     <Parameterliste> )     Funktionen in Kapitel
                                         4.1.3.3.2"
<numerische       -999999999 ..          "jeder ganzzahlige Wert
Konstante> ::=    999999999              im Bereich von -
                                         999999999 bis
                                         +999999999"
<numerische       #<Name>                "kann jeden ganzzahligen
Variable> ::=                            Wert im Bereich von -
                                         999999999 bis +999999999
                                         aufnehmen"
<numerischer         [ - |  ]           "Beispiele:"
Ausdruck> ::=     <numerisches Element>  " (-1+2) "
                  [ <numerische          " -(2*(3+4)) "
                  Operator> <numerischer " 200 / #var1 "
                  Ausdruck> ]
                  |  [ - |  ] (
                  <numerischer Ausdruck>
                  )
                  
<numerischer          +                  "die Operatoren sind in
Operator> ::=     |   -                  Kapitel 4.1.3.2.3
                  |   *                  beschrieben"
                  |   /
                  |   %
                  |   <<
                  |   >>
                  |   &
                  |   ^
                  |   |
                  |   &&
                  |   ||
                  
<numerisches        <numerische          
Element> ::=      Konstante>
                  | <numerische
                  Variable>
                  | <numerische
                  Funktion>




<numerisches      <numerisches Element>  "der Wert des ersten
Interval> ::=     .. <numerisches        <numerisches Elements>
                  Element>               mu kleiner sein als der
                                         Wert des zweiten
                                         <numerischen Elements>"
<Parameterliste>   [ <Parameter>         
::=                 { , <Parameter>
                  }0..7 ]
<relativer            +                  "von der <Suchposition>
Operator> ::=                            Richtung Dateiende "
                  |   -                  "von der <Suchposition>
                                         Richtung Dateianfang"
<Sprungziel> ::=    <Anweisungsmarke>    
                  | <vordefinierte
                  Anweisungsmarke>
                  | < <Dateiposition> >
<Suchbegriff> ::= {   <Textelement>      
                     | <unbekannte
                  Zeichenfolge> }
                  {<implizite
                  Zuweisung>}0..n
<Suchbereich> ::= < <erste Spalte> [ ..  "die <passende
                  <letzte Spalte> ] >    Zeichenfolge> mu
                                         zwischen <erste Spalte>
                                         und <letzte Spalte>
                                         beginnen; nur zulssig
                                         fr ASCII Textdateien "
<Suchmuster> ::=  <Suchbegriff> { +      
                  <Suchbegriff>}0..n
<Textausdruck>    <Textelement> [        " die Lnge des
::=               <Textoperator>         Ergebnisses von
                  <Textausdruck> ]       <Textausdruck> darf 256
                  | ( <Textausdruck> )   nicht berschreiten "
                  |  <Textausdruck> *    "Beispiele:
                  <numerischer Ausdruck>  ('word1' + 'word2')
                                          ' ' * 20
                                          $text & (x'7f' * 256) "
<Textelement>       <konstante           
                  Zeichenfolge>
                  | <Textvariable>
                  | <Textfunktion>
<Textfunktion>    $<Name> (              "siehe Beschreibung der
::=               <Parameterliste> )     Funktionen in Kapitel
                                         4.1.3.3.1"
<Textoperator>        +                  "die Operatoren sind in
::=               |   ..                 Kapitel 4.1.3.1.3
                  |   &                  beschrieben"
                  |   ^
                  |   |
                  
<Textvariable>    $<Name>                "kann bis zu 256
::=                                      <Zeichen> enthalten"
<unbekannte       * [ ( <Zeichenmenge> ) 
Zeichenfolge> ::= ]
                     [
                  <Lngenbeschrnkung> ]
<Vergleichsoperat     <                  "kleiner als"
or> ::=           |   <=                 " kleiner als oder
                  |   ==                 gleich "
                  |   !=                 "gleich "
                  |   >=                 "nicht gleich "
                  |   >                  "grer als oder gleich
                                         "
                                         " grer als "
<vordefinierte      begin                "erste Anweisung eines
Anweisungsmarke>                         <Suchprogramms>; kann im
::=                                      <Suchprogramm> neu
                                         definiert werden"
                  |  end                 "nach der letzten
                                         Anweisung eines
                  |  stop                <Suchprogramms>"
                                         "Beendigung des
                                         <Suchprogramms>"
<vordefinierte    letters                "jeder ASCII Klein- und
Zeichenmenge> ::=                        Grobuchstabe"
                  | digits               "jede Ziffer"
                  | specials             "jedes abdruckbare
                  | white_spaces | ws    Sonderzeichen"
                                         "LEERZEICHEN und
                  | new_lines | nl       TABULATOR Zeichen "
                                         "NEWLINE Zeichen"
<Zeichen> ::=       <druckbares Zeichen> 
                  | \x<hexadezimales     
                  Zeichen>               "TABULATOR Zeichen (=
                  | \t                   x'09')"
                  | \n                   "NEWLINE Zeichen (=
                                         x'0d0a')"
<Zeichenintervall '<Zeichen>' ..         "jedes <Zeichen> von dem
> ::=             '<Zeichen>'            ersten <Zeichen> bis zu
                                         dem zweiten <Zeichen>
                                         einschlielich"
<Zeichenmenge>    [ - ]                  "Menge aller Zeichen die
::=               <Zeichenmengenelement> in einer <unbekannten
                   [ { + | - }           Zeichenfolge> enthalten
                  <Zeichenmenge> ]       sein drfen"
                  |  [ - ] (
                  <Zeichenmenge> )
                  
<Zeichenmengenele <Zeichenintervall>     "Menge von Zeichen"
ment> ::=         | <Textelement>
                  | <vordefinierte
                  Zeichenmenge>
<Ziffer> ::=      0 | 1 | 2 | 3 | 4 | 5  
                  | 6 | 7 | 8 | 9


5   Beispiele

Das Verzeichnis SAMPLES enthlt eine Kommandodatei und diverse
Programmdateien (d.h. Dateien, welche ein <Suchprogramm> fr PED4DOS
enthalten).
Starten Sie die Kommandodatei DEMO.BAT, wenn Sie die wichtigsten
Beispiele aus Kapitel 4.1 sehen wollen.
Die folgenden Kapitel beschreiben einige umfangreichere
<Suchprogramme>.

5.1 Prfen des FILES Parameters in CONFIG.SYS
Wenn Sie prfen wollen, wieviele Dateien gleichzeitig erffnet sein
drfen, mssen Sie den FILES Parameter in der Datei CONFIG.SYS
ansehen und den zugewiesenen Wert eventuell durch einen greren
ersetzen, falls der aktuelle Wert nicht ausreicht:
// FILES.PRG
// setzt FILES Wert in CONFIG.SYS auf mindestens 128

// das Schlsselwort 'files' am Beginn der aktuellen Zeile suchen
<1> *(ws)l(0..) + 'files' :f next_line;
// das = Zeichen suchen und den aktuellen Wert in $par speichern
*(ws) l(0..) + '=' + *(ws) l(0..) + *(digit)>$par :f next_line;
// $par in eine ganze Zahl wandeln
(#par = #num ($par));
// mit dem Mindestwert vergleichen; beenden, wenn ausreichend
(#par >= 128) :t s;
// der aktuelle Wert ist zu klein
// die Suchposition zurck auf den Parameterwert setzen
:<- #len($par) bytes>;
// durch den verlangten Wert ersetzen, das Suchprogramm beenden
$par = '128' : s;

// 1 Zeile berspringen; das Suchprogramm am Dateiende beenden
next_line:
 :<+1 line> :f s;
// Ende von FILES.PRG


5.2 Umsetzen der Umlaute von ANSI nach OEM oder ASCII
Benutzen Sie ANSI2ASC.PRG, um Umlaute vom ANSI Code (benutzt unter
MS Windows, MS Word fr Windows) in den ASCII Code umzusetzen (d.h.
jeder Umlaut wird in 2 ASCII Buchstaben umgesetzt). Benutzen Sie
ANSI2OEM.PRG, um Umlaute vom ANSI Code (benutzt unter MS Windows, MS
Word fr Windows) in den OEM Code (benutzt unter MS-DOS) umzusetzen.
// file ANSI2ASC.PRG
// wandelt Umlaute von ANSI nach ASCII
x'e4'='ae':t b;        // ''
x'f6'='oe':t b;        // ''
x'fc'='ue':t b;        // ''
x'c4'='Ae':t b;        // ''
x'd6'='Oe':t b;        // ''
x'dc'='Ue':t b;        // ''
x'df'='ss':t b;        // ''

// file ANSI2OEM.PRG
// wandelt Umlaute von ANSI nach OEM
x'e4'= x'84':t b;  // ''
x'f6'= x'94':t b;  // ''
x'fc'= x'81':t b;  // ''
x'c4'= x'8e':t b;  // ''
x'd6'= x'99':t b;  // ''
x'dc'= x'9a':t b;  // ''
x'df'= x'e1':t b;  // ''


5.3 Umsetzen einer Listendatei in die Eingabe fr ein
Tabellenkalkulationsprogramm
Wenn Sie Daten aus einer Listendatei in Ihr
Tabellenkalkulationsprogramm (z.B. MS Excel) bernehmen wollen, so
mssen Sie die Daten von den berschriften, Druckersteuerzeichen
usw. trennen und die einzelnen Datenfelder voneinander durch
entsprechende Zeichen (zum Beispiel TABULATOR Zeichen) trennen.
Benutzen Sie LIST1.PRG, um nur die Daten in die Logdatei auszugeben.
Benutzen Sie LIST2.PRG, um alles auer den Daten aus der originalen
Listendatei zu entfernen.
Die originale Listendatei LISTE.IN sieht etwa wie folgt aus; die
ersten 3 Zeilen erscheinen in jeder Zeile (Formatierung der Zahlen
in amerikanischer Schreibweise):

 salesman     |                  invoiced sales in 1995
|
              |  1. quarter  |  2. quarter  |  3. quarter  |  4.
quarter  |
 -------------+--------------+--------------+--------------+--------
------|
 Smith        |   120,000.00 |   120,000.00 |   120,000.00 |
120,000.00 |
 Johnson      |    -3,000.00 |    15,000.00 |    33,000.00 |
36,000.00 |
 Carter       | 2,278,239.89 |    78,055.50 |         0.00 |
0.00 |

Das folgende <Suchprogramm> zeigt die Daten aus der Listendatei an;
benutzen Sie die /l Option um diese Daten in eine Logdatei zu
kopieren:

// LIST1.PRG
// nur die Daten anzeigen
// benutzen Sie die Option /l:Liste.out um die Daten in eine Datei
zu kopieren

// jede andere Ausgabe in die Logdatei unterdrcken
(#options ('p:-l:+lo'));

begin:
find_headline:
// Leerzeile bergehen
*(ws)l(0..) + nl : t find_headline;
// erste berschrift suchen; Ende bei Fehler
<1> ' salesman ':f s;
skip_line:
// Zeile bergehen
* + nl;
// Zeile aus Bindestrichen bergehen
<1> ' ------' + * + nl :f skip_line;

check_line:
// prfen auf Seitenende (Leerzeile)
*(ws)l(0..) + nl : t find_headline;
// fhrende Leerzeichen bergehen
*(ws);
// Namen anzeigen
*(-ws) > display;

check_number:
// Trennzeichen zwischen Spalten bergehen
*(ws)l(0..) + '|' + *(ws)l(0..);
// Ende der Zeile prfen
nl > display :t check_line;
// ein TABULATOR Zeichen anzeigen
(display = '\t');
// Vorzeichen ausgeben
'-' > display;

disp_digits:
*(digit) > display;
// Komma bergehen
',':t disp_digits;
// Bruchteil anzeigen
'.' > display + *(digit) > display;
// nchste Zahl suchen
:check_number;
// Ende von LIST1.PRG

Die Logdatei sieht dann etwa folgendermaen aus:

Smith    120000.00120000.00120000.00120000.00
Johnson  -3000.00 15000.00 33000.00 36000.00
Carter   2278239.89    78055.50 0.000.00

Das folgende <Suchprogramm> modifiziert die Listendatei:

// LIST2.PRG
// alles ausser den Daten aus der Listendatei entfernen

find_headline:
// Leerzeile lschen
*(ws)l(0..) + nl = '' : t find_headline;
// erste berschriftzeile finden
<1> ' salesman ':f s;
delete_line:
// Zeile lschen
:<col 1>; * + nl = '';
// Zeile aus Bindestrichen lschen
<1> ' ------' + * + nl = '' :f delete_line;

modify_line:
// fhrende Leerzeichen lschen
:<col 1>;
// auf Seitenende prfen (Leerzeile)
*(ws)l(0..) + nl = '' : t find_headline;
// fhrende Leerzeichen lschen
*(ws) = '';
// skip name
*(-ws);

// Zahlen subern
clean_number:
// Spaltentrenner lschen
*(ws)l(0..) + '|' + *(ws)l(0..) = '';
// Ende der Zeile prfen
nl :t modify_line;
// ein TABULATOR Zeichen einfgen
''='\t';
// Vorzeichen berlesen
'-';
skip_digits:
*(digit);
','='':t skip_digits;
'.' + *(digit);
:clean_number;
// Ende von LIST2.PRG

Anschlieend sieht die Listendatei folgendermaen aus:

Smith    120000.00120000.00120000.00120000.00
Johnson  -3000.00 15000.00 33000.00 36000.00
Carter   2278239.89    78055.50 0.000.00


6   Inhalt des PED4DOS Softwarepakets

Das PED4DOS Softwarepaket (komprimierte Datei oder Diskette) enthlt
die folgenden Dateien und Verzeichnisse:
README.1ST     Einfhrung in die Benutzung von PED4DOS (in
               englisch)
README.GER     Einfhrung in die Benutzung von PED4DOS (in
               deutsch)
FILE_ID.DIZ    Kurzbeschreibung
PED4DOS.TXT    Dokumentation (ASCII Textdatei) (in englisch);
               (deutsche bersetzung siehe 6.3)
LICENSE.TXT    Lizenzbedingungen (ASCII Textdatei) (in englisch)
REG.FRM        Registrierungsformular (ASCII Textdatei) (in
               englisch)
REG_GER.FRM    Registrierungsformular fr PED4DOS (ASCII
               Textdatei) (in deutsch)


6.1 Ausfhrbare Dateien
Das Verzeichnis BIN enthlt die Dateien:
P4D.EXE        ausfhrbare Datei fr MS-DOS
SETUP.EXE      ausfhrbare Datei fr MS-DOS;
               wird benutzt, um die lizensierte Version von
               P4D.EXE zu erstellen


6.2 Beispiele
Das Verzeichnis SAMPLES enthlt die Dateien:
DEMO.BAT        Kommandodatei
ANSI2ASC.PRG    Suchprogramme
ANSI2OEM.PRG
CENTER.PRG
COUNT.PRG
FILES.PRG
LIST1.PRG
LIST2.PRG
CONFIG.SYS      Eingabedateien fr Demo
DEMO.IN
LISTE.IN


6.3 Dokumentation
Das Verzeichnis DOC\ENGLISH enthlt die Dateien:
PED4DOS.DOC    Dieses Dokument in englisch fr "Microsoft Word for
               Windows"
REG.FRM        Registration Form for PED4DOS in englisch

Das Verzeichnis DOC\GERMAN enthlt die Dateien:
PED4DOS.DOC    Dieses Dokument fr "Microsoft Word for Windows"
PED4DOS.TXT    Dieses Dokument (ASCII Textdatei)
LIZENZ.TXT     Lizenz Bedingungen in deutsch (ASCII Textdatei)
REG_GER.FRM    Registrierungsformular (ASCII Textdatei)



