[Tustep-Liste] Endtags richtig zuordnen und aufloesen
Hans Derkits
hans.derkits at utanet.at
Fr Jun 10 14:39:39 CEST 2005
Lieber Herr Kopp,
Liebe Listenteilnehmer,
gerne hier die Kommentare zur der vorgeschlagenen Lösung.
Ihr Interesse, Herr Kopp, freut mich besonders.
Am Freitag, 10. Juni 2005 10:44 schrieb Matthias Kopp:
> vielen Dank für die Mitteilung der RUBY-Lösung;
> dürfte ich Sie bitten, das Programm noch etwas zu kommentieren?
Kommentare stehen über der Zeile.
---------------------
## Definition einer Liste (von Zeichenketten) - die zugleich als
## Stapel ansprechbar ist
kennungen = [ ]
## Für jede Eingabezeile ... hier von der Standareingabe gelesen
while zeile = gets
## startpos: Beginnpositon für die Suche (0 bei neuer Zeile)
startpos = 0
## Solange zeile[ab startpos] das Muster
## |<<></a><<><%>>| - hier in Tustep-Notation -
## enthält ("..-1" bedeutet: bis zum Ende der Zeile)
while ( muster = %r|</?a(\w*)>|.match( zeile[startpos..-1] ))
## '(\w*)': beliebig viele Wortzeichen, die auch fehlen dürfen,
## die () erlaubt, auf das Ergebnis mit dem index 1 zuzugreifen
## (erster Klammerausdruck des Suchmusters).
## Wenn '(\w*)' (= muster[1]; = '<=02' in Tustep-Notation)
## länger als 0 Zeichen (z.B. 'ABC')
if muster[1].length > 0
## Inhalt von '(\w*)' (Tustep: '<=02') auf den Stapel legen
kennungen.push muster[1]
## sonst (<=02 hat die Länge 0; das gef. TAG ist also '</a>')
else
## das erste Vorkommen von '</a>' in zeile ersetzen durch
## '</a' + oberstes Stapelelement + '>'
zeile.sub! %r|</a>|, "</a#{ kennungen.pop }>"
## END IF
end
## Beginnposition für die nächste Suche:
## Endposition des zuvor gefundenen (gesamten) Musters,
## deshalb '0'.
## (Sie wird aufaddiert, weil die vorige Suche
## wahrscheinlich nach 0 begann).
startpos += muster.end(0)
## END WHILE
end
## fertige Zeile ausgeben
print zeile
## DATEIENDE
end
---------------------
So üppig kommentiert, könnte das womöglich kompliziert erscheinen. Um
zu sehen, dass die Sache sogar sehr intuitiv ist (ohne Handbuch und
'Sprungziele'), braucht man nur selbst ein wenig probieren. Ist man
erst die Schreibkonventionen gewohnt - dazu genügt ein halber Tag -,
kann man das ohne jeden Kommentar einfach lesen, einfache Programme
auch schreiben.
Mit herzlichen Grüßen an Sie
und Sie alle
Hans Derkits
--
Hans Derkits
hans.derkits at utanet.at
Mehr Informationen über die Mailingliste Tustep-Liste