suche/ersetze
roger
- perl
0
dedlfix
Hallo,
ich möchte aus "true,ja,yes" in "1" wandeln, genau so
"false,nein,no" in "0".
$zellinhalt =~ tr/[true][ja][yes]/1/d;
$zellinhalt =~ tr/[false][nein][no]/0/d;
Leider funktioniert dies nicht bei "nein"
"nein" wird nach "nin" gewandelt... warum ?
Danke
roger
Tach!
ich möchte aus "true,ja,yes" in "1" wandeln, genau so "false,nein,no" in "0".
$zellinhalt =~ tr/[true][ja][yes]/1/d;
$zellinhalt =~ tr/[false][nein][no]/0/d;Leider funktioniert dies nicht bei "nein"
Du solltest Syntax nicht raten, sondern die Elemente anwenden, die auf dein Thema passen.
"nein" wird nach "nin" gewandelt... warum ?
In []-Klammern stehen Zeichenklassen. Es passt ein Zeichen daraus. [false][nein][no] matcht, wenn das erste Zeichen eins aus f, a, l, s, e ist, das zweite eins von n, e, i (das zweite n spielt keien Rolle mehr, weil doppelt) ist, etc. Das e in 'nein' steht an zweiter Stelle, da passt also das e in der zweiten Zeichenklasse. Dieses wird durch 0 ersetzt, vermutlich macht Perl dann das Zeichen \0 daraus. Das erste und dritte Zeichen passt nicht, das vierte wird von deinem Muster nicht berücksichtigt.
Aber das wolltest du vermutlich alles gar nicht wirklich wissen. Dein Fall braucht eine Alternation, also ein Oder, was mit true|ja|yes (gegebenenfalls auch mit Klammern drumherum) notiert wird.
dedlfix.
gudn tach!
ich möchte aus "true,ja,yes" in "1" wandeln, genau so "false,nein,no" in "0".
$zellinhalt =~ tr/[true][ja][yes]/1/d;
$zellinhalt =~ tr/[false][nein][no]/0/d;Leider funktioniert dies nicht bei "nein"
Du solltest Syntax nicht raten, sondern die Elemente anwenden, die auf dein Thema passen.
hierbei stimme zwar zu, aber der rest der antwort bezieht sich eigentlich auf gar nicht genannten code. ;-)
"nein" wird nach "nin" gewandelt...
nein.
es geht hier nicht um gewoehnliches suchen/ersetzen von strings, sondern um suchen und ersetzen von zeichen. strings werden in perl durch
$haystack =~ s/needle/replacement/;
ersetzt. hier wurde aber die tr-syntax angewendet, die nur nach einzelnen zeichen sucht und jene ersetzt (transliteration), siehe perldoc
$_ = 'true,ja,yes';
tr/[true][ja][yes]/1/d;
print $_,\"\n\";"
liefert als ergebnis zwei kommas:
,,
weil alle oeffnenden eckigen klammern durch "1" ersetzt werden und die restlichen zeichen aus dem pattern geloescht werden.
Dieses wird durch 0 ersetzt, vermutlich macht Perl dann das Zeichen \0 daraus.
0 und "0" ist in perl eigentlich das gleiche. je nach kontext wird es halt so oder so interpretiert. wenn man das zeichen "\0" benutzen moechte, muss man es auch so schreiben, also "\0", wohlgemerkt mit nur einem backslash, also nicht wie im regexp-verunstaltenden php.
Aber das wolltest du vermutlich alles gar nicht wirklich wissen.
damit hattest du wohl rechter als du denkst.
Dein Fall braucht eine Alternation, also ein Oder, was mit true|ja|yes (gegebenenfalls auch mit Klammern drumherum) notiert wird.
z.b. so:
$zellinhalt =~ s/\b(?:true|ja|yes)\b/1/g;
$zellinhalt =~ s/\b(?:false|nein|no)\b/0/g;
prost
esth
Tach!
hierbei stimme zwar zu, aber der rest der antwort bezieht sich eigentlich auf gar nicht genannten code. ;-)
Hmm, da bin ich in die hotti-Falle getappt. Ich hab einfach mal ohne viel Ahnung von einem System aufs andere geschlossen, was prompt schief ging. Dabei hatte es so gut auf die Problembeschreibung des OP gepasst ...
dedlfix.
Morgen,
vielen Dank euch beiden.... auch Infos nebenbei finde ich "OK".
Ich habe was gelernt. :-)
Gruß
roger