[Tustep-Liste] Funktion zum Vergleichen zweier Variablen

Thomas Kollatz kol at steinheim-institut.org
Di Dez 14 13:28:46 CET 2010


Liebe Gottfried, 
liebe Liste, 

sehe deine Anfrage erst jetzt, und es hat noch niemand geantwortet, oder?

> zwei Variablen sollen miteinander verglichen werden, um zu sehen, an welcher Stelle sie voneinander abweichen.
> Gibt es hierzu eine Makrofunktion?

... ich glaube nein. Aber ich habe mir das auch schon mal gewünscht ... 
Compare vergleicht Dateien und .eq. stellt nur fest, ob zu vergleichende Variablen gleich sind, oder nicht.
Man könnte natürlich zwei Variablen string für string durch einen loop jagen und sich dann irgendeine Markierung ausdenken, dazu habe ich mir letztes Jahr mal ein kleines Beispiel-Skript gebastelt, aber nie weiter ausgearbeitet, obwohl da noch drin wäre die Abweichung in Zeichen 3/4 in Zeile zwei als Zeilendreher zu markieren (sortieren, dann gleich, also Dreher), die Abweichung in Zeile 4 (hier steht was anderes) und Zeile fünf das Sondergut definieren könnte (das gibts nur in einer Version).
Richtig komplex wirds aber dann, wenn Einschübe / Auslassungen / Sprungmarken in Variablen markiert werden sollen. Es geht gewiß, aber dann programmiert man eigentlich ein #ve für Variablen und dazu sind meine Winterabende leider zu kurz.

Herzliche Grüße
TK

Hier das Ergebnis: 
---------------

Zeile 1: eins=eins
Vergleich: zwei/zwie
Zeile 2 Zeichen: 3: e i
Zeile 2 Zeichen: 4: i e
Zeile 3: drei=drei
Vergleich: vier/sechs
Zeile 4 Zeichen: 1: v s
Zeile 4 Zeichen: 2: i e
Zeile 4 Zeichen: 3: e c
Zeile 4 Zeichen: 4: r h
Zeile 4 Zeichen: 5:  s
Vergleich: fünf/
Zeile 5 Zeichen: 1: f
Zeile 5 Zeichen: 2: ü
Zeile 5 Zeichen: 3: n
Zeile 5 Zeichen: 4: f

Und hier das Skript:
-----------------
$$ MODE TUSCRIPT
MODE DATA
$$ SET var1=*
eins
zwei
drei
vier
fünf
$$ SET var2=*
eins
zwie
drei
sechs
$$ MODE TUSCRIPT
LOOP n,v1=var1,v2=var2
IF (v1==v2) THEN
 PRINT "Zeile ",n,": ",v1,"=",v2
ELSE
 SET str_v1=STRINGS (v1,":<%:")
 SET str_v2=STRINGS (v2,":<%:")
 PRINT "Vergleich: ",v1,"/",v2
 LOOP z,s1=str_v1,s2=str_v2
 IF (s1!=s2) PRINT "Zeile ",n," Zeichen: ",z,": ",s1," ",s2
ENDLOOP
ENDIF
ENDLOOP




drs Thomas Kollatz  - wissenschaftlicher Mitarbeiter / research assistant
* Salomon Ludwig Steinheim-Institut fuer deutsch-juedische Geschichte
  D-47057 Duisburg  Geibelstr. 41 T 0203-370071  F 0203-373380
* Institut <http://www.steinheim-institut.de/wiki/index.php/Mitarbeiter:Thomas_Kollatz>
* Epigraphische Datenbank <http://www.steinheim-institut.de/cgi-bin/epidat>



Mehr Informationen über die Mailingliste Tustep-Liste