Trick 48:
Präzisions-Ersetzungen
Aufgabe:
Schnell mal eben in eine Zeichenfolge an einer bestimmten 
         Position 1 oder mehr
Zeichen einfügen, und zwar  
         mit oder ohne
Ersetzung von 1 oder mehr dort stehenden Zeichen
Warum? Man hat zuweilen Zeichenfolgen, in denen an bestimmten (festen)
       Positionen bestimmte Angaben
stehen, die man durch etwas anderes
       ersetzen will.
Hinweis: Zum Ersetzen von exakten Zeichenfolgen an beliebiger Stelle
         durch andere gibt es
den Befehl  insert %abc%xyz%
         Zum Ersetzen einzelner
Zeichen oder Doppelzeichen durch andere
         im gesamten Text (das
nennt man "Umcodierung") gibt es das
         Instrumentarium des
Befehls  xcode
Lösung:
Man schreibt sich eine Datei  stri.inc  (siehe unten) und
bindet sie 
mit "include stri.inc" ein. 
So wird die Funktion dann benutzt:
Wenn in das Feld  #789  an der Position 11 die Zeichen "abc"
eingesetzt
werden sollen, dort genau 2 Zeichen ersetzend, die vorher da stehen,
dann macht man folgendes:
var
#789
  Startstring
ins #usT
  Befehlsstring (kann
beliebig konstruiert werden, auch aus Variablen!)
var "10,abc,2"
  (Statt , als Trenner ist
auch / möglich)
  Aufruf
perf stri
  Ergebnis in iV nach #789
sichern
ins #789
var "Resultat: " #789
mes
  ... weitere Aktionen
  Am Ende das UP einbinden:
include stri.inc
            Und
dies ist das Unterprogramm  stri.inc
 ***********************************************************
 
STRI.INC : Zeichen an fester Position in eine Zeichenfolge einfuegen
  2007-07-17  
u.U. mit Ersetzung vorhandener Zeichen
  Aufruf :  Man besetzt
zuerst folgende Variable:
         
#usT  : die Ausgangs-Zeichenfolge
         
iV    : zahl1,zeichenfolge,zahl2  oder  /
statt ,
                 
die beiden Zahlen muessen positive ganze sein oder 0
                 
zahl2 mit dem vorangehenden Komma darf fehlen
          
         
Bedeutung:  zahl1 Zeichen vom Anfang von #usT belassen
                     
dann die  zeichenfolge  anhaengen
                     
vom Rest von #usT  zahl2  Zeichen wegnehmen, 
                     
und was noch von #usT uebrig ist, anhaengen
         
Beispiele:
                
Das vierte Zeichen durch x ersetzen
         
var "3,x,1"
                
In #upo steht Position, in #uez die einzufueg. Zeichen
                     
in #uaz ANz. der zu ersetzenden Zeichen
         
var #upo "," #uez "," #uaz
                
Hinter dem 10. Zeichen  Inhalt von #uab  zwischenfügen
         
var "10," #uab ",0"   oder   var "10," #uab
                
Vorn 2 Zeichen durch abcdeg  ersetzen, Rest belassen
         
var "0,abcdeg,2"
                  
(einfacher mit  var "abc" #usT(2,0) )
                
Hinter dem 2. Zeichen  abcdeg  einsetzen, Rest weg
         
var "2,abcdeg,1000"
                  
(einfacher mit  var #usT(0,2) "abcdeg" !)
      
Dann der Aufruf:
         
perf stri
      
Ergebnis steht danach in der iV
  UPro beginnt hier
end
  Setze
        
#uS1 = zahl1 , #uS2=zahl2 , #uSB = Zeichenfolge bei Beginn
:stri
  Kontrolle beim Testen
 mes
ins #uSB
var #uSB(f"0123456789")
if "/" jump stri:s
if not "," return
  Komma ist Trennung:
var #uSB(e",")
ins #uS1
var #uSB(b"," b",")
ins #uS2
  Trennsymbol ,
#uST,
jump stri:w
  / ist Trennung:
:stri:s
var #uSB(e"/")
ins #uS1
var #uSB(b"/" b"/")
ins #uS2
  Trennsymbol /
#uST/
:stri:w
eval #uS1 + #uS2
  Position, wo der Rest
beginnt
ins #uS3
  Manipulations-Ausdruck in
die iV schreiben: 
      
(beachte den Nebentrick mit dem Trennsymbol #uST)
var #uS1
if not "0" var "#usT(0," #uS1 "
F' ') #uSB(b'#uST' e'#uST') #usT(" #uS3 ",0)"
if "0" var "#uSB(b'#uST' e'#uST')
#usT(" #uS3 ",0)"
  zur Kontrolle beim Testen
den Ausdruck zeigen:
 mes
  Ausdruck
auswerten   (das ist der eigentliche Trick!)
var
  Nun steht das Erg. in der
iV
  Hilfsvar. loeschen
#uST
#uSB
#uS1
#uS2
#uS3
return
  **********************************************************