Stringmanipulationen
Peter Seitz
seitz at bzs.tu-graz.ac.at
Sun Dec 26 07:23:53 CST 1999
* * * vienna-pm-list * * *
Hallo Leute,
ich habe einige Problemstellungen bei der Stringmanipulation, welche
ich moeglichst elegant und effizient loesen moechte.
Ich habe verschiedene Zeilen eines C++ Resource-Files zu parsen und
ich moechte mir die erste in Hochkommas vorkommende Zeichenkette
extrahieren. Hier mal 3 Beispiele:
CONTROL "", -1, "static", SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, -4, -16, 128, 86
CONTROL "Wir haben einen Text; zum bearbeiten bitte auf ""oeffnen"" klicken.", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 6, 6, 151, 18
CONTROL "Bitte geben Sie \"&eine\" uahl ein", 121, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 16, 88, 131, 12
Daraus ergeben sich folgende Probleme:
Ich moechte ermitteln, wieviele "" in einer Zeile auftreten!
Gibt es einen Befehl um die Haeufigkeit einer Zeichenkette zu
ermitteln oder muss ich das mit einer Schleife selber zaehlen?
Ich moechte mir den ersten String - sofern er nicht nur aus ""
besteht - ermitteln. Bis jetzt habe ich das so geloest, indem ich
zuerst die \" Paare und dann die "" Paare ersetzt habe, habe
anschliessend die Zeile so aufgesplittet, dass die " als Trennzeichen
dienten und dann im zweiten Feld den String gehabt. Dort hab ich dann
wieder die Zeichen rueckersetzt. Also in etwa so:
#!/usr/bin/perl -w
$line= 'CONTROL "Wir haben einen Text; zum bearbeiten bitte auf ""oeffnen"" klicken.", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 6, 6, 151, 18';
print "Zeile='$line'\n";
# in $line ist eine zeile der Quelle abgespeichert
$line =~ s/\\\"/\xff\xff\xff/g; # replace _\"_
$line =~ s/\"\"/\x7f\x7f\x7f/g; # replace _""_
@test = split (/"/, $line);
$extracted_string = $test[1];
$extracted_string =~ s/\x7f\x7f\x7f/\"\"/g; # recreate _""_
$extracted_string =~ s/\xff\xff\xff/\\\"/g; # recreate _\"_
print "String='$extracted_string'\n";
Diese Prozedur wuerde ich mir allerdings sparen, wenn ich weiss, dass
in der Zeile nur einmal ein "" vorkommt (also ein leerer String).
Gibts irgendwelche Vorschlaege wie man das geforderte optimal und vor
allem effizient programmieren kann, oder ist mein Loesungsweg nicht
so schlecht?
Gruss
Peter Seitz
Projektleiter Projekt Woerterbuch
--
Interesse an einem freien deutschen Woerterbuch? Helfer gesucht!
Projekt Woerterbuch: <URL:http://Free-Dict.bzs.tu-graz.ac.at/>
###
You are subscribed to vienna-pm-list
http://www.fff.at/fff/vienna.pm/
More information about the Vienna-pm
mailing list