Thema: warum geht dem net ($data =~ tr/s//;)

servus,<BR>warum funktionieren folgende schnippsel net<P><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR>$data =~ tr/s//;<BR>oder<BR>$data =~ tr/s//d;<BR></pre><HR></BLOCKQUOTE><BR>meiner meinung nach dürtfe in $data jetzt keine leerzeichen (tn usw.) mehr sein<BR>warum geht dem net?<P>mit umwege bekoomm ich in etwa das awas ich will.<BR>aber es wäre besser eine liste der zeichen zu haben die weg sollen als eine liste der zeichendie bleiben sollen<BR><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR>$data =~ tr/0-9A-Za-z/./cs;<BR>$data =~ tr/.//d;<BR></pre><HR></BLOCKQUOTE><P>gruß<BR>manu<BR>p.s.: sind die ersten richtigen erfahrungen mit reg exp in perl.... *hartes_brot*

Source Code Editor in Perl
http://proton-ce.sf.net

2

Re: warum geht dem net ($data =~ tr/s//;)

Nimm mal das:<P>#!usr/bin/perl -w<P>$data="grtrtt997         7979<BR>         9rttt<BR>zzzzzzz<BR>              llll                 i9887";<P>$data =~s/s//g;<P>print $data;<P><BR>gruß<P>matho

3

Re: warum geht dem net ($data =~ tr/s//;)

servus,<BR>vielen dank <BR>hat mir sehr geholfen<P>gruß <BR>manu

Source Code Editor in Perl
http://proton-ce.sf.net

4

Re: warum geht dem net ($data =~ tr/s//;)

nabend,<P>ich muss ehrlich gestehen, ich hab den tr/// operator auch nie wirklich richtig verstanden. Klar, s/// ersetzt, und tr/// wandelt die Zeichen. Zeichen für Zeichen.<P>$_ = "Hallo Welt";<BR>tr/ab/ba/;<BR>print;<BR>= Holla Welt,<P>hört sich irgenwie spanisch an *g*<BR>sonne Geschichte wär ja auch mit dem s/// Operator nicht so einfach zu erledigen, zumindest nicht ohne helper oder so.<BR>Aber wo setzt man das Teil richtig ein. <BR>Wir hatten ja schon mal das Thema bei meiner Suchmaschiene (die jetzt wirklich gut läuft) mit dem Umlauten, da hab ich auch überlegt ob man nich so was machen könnte:<P>tr/öäü/&ouml ; &auml ; &uuml ;/ aber das geht ja so nich, wei dann ö zu & a zu ö und ü zu u wird, auch mit ner Liste die ja in dem 2ten Teil des tr/// Operators interpoliert wird hats nicht hingehaun. Also: wann setzt man das Teil wirklich gekonnt und sinnvoll ein?<P>cu, sel.

5

Re: warum geht dem net ($data =~ tr/s//;)

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von SeleCToR:<BR><STRONG>nabend,<P>ich muss ehrlich gestehen, ich hab den tr/// operator auch nie wirklich richtig verstanden. Klar, s/// ersetzt, und tr/// wandelt die Zeichen. Zeichen für Zeichen.<P>$_ = "Hallo Welt";<BR>tr/ab/ba/;<BR>print;<BR>= Holla Welt,<P>hört sich irgenwie spanisch an *g*<BR>sonne Geschichte wär ja auch mit dem s/// Operator nicht so einfach zu erledigen, zumindest nicht ohne helper oder so.<BR>Aber wo setzt man das Teil richtig ein. <BR>Wir hatten ja schon mal das Thema bei meiner Suchmaschine (die jetzt wirklich gut läuft) mit dem Umlauten, da hab ich auch überlegt ob man nich so was machen könnte:<P>tr/öäü/ö ; ä ; ü ;/ aber das geht ja so nich, wei dann ö zu & a zu ö und ü zu u wird, auch mit ner Liste die ja in dem 2ten Teil des tr/// Operators interpoliert wird hats nicht hingehaun. Also: wann setzt man das Teil wirklich gekonnt und sinnvoll ein?<P>cu, sel.</STRONG><HR></BLOCKQUOTE>

6

Re: warum geht dem net ($data =~ tr/s//;)

Ich darf kurz aus einem meiner Lieblingsbücher zitieren :<P>-<BR>Der Operator s/// ist für einfache Eins-zu- Eins-Änderungen prima geeignet. Manchmal möchten Sie aber auch eventuell eine Viele-zu-Vieles-Änderung machen, zum Beispiel Großbuchstaben in Kleinbuchstaben übersetzen. Zu diesem Zweck können Sie den Operator tr/// benutzen.<BR>......<BR>...beachten Sie, daß der Operator tr/// keine regulären Ausdrücke verwendet, nur aktuelle Zeichen und Zeichenbereiche.<P>-Perl 5 für Dummies, S.243f.<P>Alle Klarheiten beseitigt?<P>gruß<P>matho

7

Re: warum geht dem net ($data =~ tr/s//;)

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von matho:<BR><STRONG>nur aktuelle Zeichen und Zeichenbereiche.<BR></STRONG><HR></BLOCKQUOTE><P>Wo ist den der Unterschied zwischen Zeichen und Zeichenbereichen? <P>Auch wenn man keine reg. Ausdrücke einsetzten kann, werden aber Variablen auf in der rechten Seite des Ausdrucks interpoliert. Ich dachte das man sich dadurch vielleicht jede Menge s/// Ausdrücke in manchen Situtationen sparen könnte...<P>thx, sel.

8

Re: warum geht dem net ($data =~ tr/s//;)

High sel,<BR>ich dachte, es ginge jetzt weniger um den Unterschied zwischen Zeichen und Zeichenbereichen, als vielmehr um den zwischen tr/// und s///.<P>Und wie Du ja schon gesgt hast, benutzt man die eben in verschiednen Situationen, es kommt drauf an, was man machen möchte. Also in etwa:<P>#!usr/bin/perl -w<P>$data="0 1 2 3 4 5 6 7 8 9";<P>$data =~tr/0-9/a-z/;<P>$data =~s/[^a-z]/n,t,<br>/g;<P>print $data;<P>Aber das ist Dir ja sowieso klar, denk ich. Wahrscheinlich versteh ich wieder mal das Problem nicht......<P>gruß<P>matho

9

Re: warum geht dem net ($data =~ tr/s//;)

nabend,<P>ne, problem gibts keins, zumindest nicht mit dem tr/// Operator. Ich denk ich hab ich schon ganz richtig verstanden. Ich dachte aber bloss immer das sich hinter ihm noch mehr verbirgt. Ich hab ihn eigentlich fast noch nie eingesetzt und das kam mir komisch vor. Ich dachte halt immer er wär DAS Ding mit DER Funktionalität und mir entgeht die ganze Zeit was wenn ich ihn NICHT, oder nicht richtig einsetze. Aber er übersetzt halt nur. Naja, nur ist vielleicht auch blöd gesagt.<P>schöne nächste Woche, cu, sel.