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