einzelnes zeichen aus einer zeichenkette (skalarvariable) auslese
|
Seitenanfang |
| Hallo, ich habe follgendes Problem... wie kann ich wenn ich eine Zeichenkette (zb satz oder text) in einem skaler habe, eine einzelnes zeichen rausfinden und feststellen wie oft dieses zb in diesem skaler vorkommt? vielen dank schon einmal... mfg felix
Datum: 16.10.2006-21:25

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
Das kannst du über einen einfachen regulären Ausdruck machen:
my $char; # Das Zeichen, das du suchst my $count = () = $text=~/\\$char/gs;
Der Skalar $text wird per ~=/ / nach $char durchsucht. Das Vorrangestellte Backslash (\) stellt sicher, das auch genau dieses Zeichen gesucht wird, und nicht eine besondere Bedeutung einzelner Zeichen zum Tragen kommt (z.B. eines Punktes). Wird das Ergebnis des Suchvorganges einer Liste zugewiesen (hier die anonyme Liste () ), werden alle gefundenen Muster aufgelistet. Das Zuweisen dieser Liste an einen Skalar bewirkt, dass die Länge dieser Liste in diesem gespeichert wird, also hier die Anzahl der gefundenen $char.
Datum: 17.10.2006-19:58

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
| oh, ich nehme alles zurück, hab mich im Forum geirrt, tut mir leid :-$
Datum: 17.10.2006-20:00

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
| hi ich bins nochmal... da ich ja ausversehen ins falsche forum meine frage gestellt habe und jetzt nicht zwei postings betreiben will werde ich einfach hier weiter fragen:) also ich programmiere nch nicht so lange mit perl und daher kommt das n bissl blöd jetzt aber irgendwie funktioniert diese lösung nicht..... ich weis nicht was ich falsch gemacht haben könnte aber ich kann ja einfach mal ne ganz simple ausführen dieses problems darstellen:
#!/usr/bin/perl -w use strict; my $char = "a"; my $text = "BLAblaBlaBla....so hier sollten jetzt 5 as drin sein"; my $count = () = $text=~/\\$char/gs; print "Anzahl der vorhandenen a: ", $count, "\n";
vielen dank nochmal... ps sorry wegens des falschen postings...
Datum: 21.10.2006-15:01

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
es darf nur ein backslash sein, nicht zwei. weiss nicht, wie Skrilax darauf kommt.
Datum: 21.10.2006-17:18

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
aeh, qutasch, es muss statt \\$char natuerlich \Q heissen (\Q steht fuer quotemeta) Skrilax hat mich mit seinem backslash etwas irritiert.
Datum: 21.10.2006-17:19

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
| Das doppelte Backslash war für den Fall vorgesehen, das ´du z.B. nach einem Punkt (.) suchen willst. Da der Punkt in einem RA eine besondere Bedeutung hat, muss dieser über ein Backslash codiert werden. Funktioniert so aber nicht, wie ich grad beim Testen gesehen habe. Zum einen muss das Backslash mit in die Variable. Außerdem ergibt sich das Problem, das z.B. \w wiederum eine eigene Bedeutung hat. Es gibt also zwei Möglichkeiten: 1. Du weißt sowieso schon beim Schreiben des Skriptes nach welchem Zeichen du suchen willst, dann kannst du jene speziellen Zeichen selbst codieren, z.B. $char="\\."; $char2="a"; 2. Die automatisierte Variante: Dem Zeichen wird nur ein Backslash vorgestellt, wenn es kein(e) Buchstabe oder Zahl ist:$char = "\\$char" unless ($char=~/\w/); Noch eine Korrektur: Deinem Beispiel entnehme ich, dass du zwischen Groß- und Kleinschreibung nicht unterscheiden willst. Dazu musst du dem Regulären Ausdruck noch den 'i'-Parameter übergeben, also:
my $count = () = $text=~/$char/gis; Bei mir hat es nun mit diesen Korrekturen geklappt.
Datum: 21.10.2006-18:21

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
so hat jetzt auch funktioniert...... vielen dank an alle und besonders an Skrilax ..und nochmal entschuldigung wegens dem falschen posting^^
Datum: 22.10.2006-10:13

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
| "vielen dank an alle und besonders an Skrilax .." na bitte, wenn du umstaendlich arbeiten willst... /\Q$char/ finde ich viel einfacher, aber vielleicht gibt es ja auch leute, die nicht nach stunden bezahlt werden, sondern nach der anzahl der zeichen im code. viel spass noch damit.
Datum: 23.10.2006-10:02

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
das ist doch viel zu umstaendlich. quotemeta() bzw. \Q sollte man hier benutzen. warum hast du das ignoriert?
Datum: 23.10.2006-10:00

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
| Tjo, ich kannte quotemeta() bisher noch nicht, und dein Beitrag war etwas verwirrend formuliert. Es zweifelt wohl aber niemand dran, dass
my $count = () = $text=~/\Q$char/gis die elegantere Lösung ist. ;-)
Datum: 23.10.2006-18:57

|
re: einzelnes zeichen aus einer zeichenkette auslesen
|
Seitenanfang |
jetzt aber für PHP:
for ($c=0;$c<strlen($text);$c++) { if($text{$c} == $zeichen) $anzahl++; }
Da du die selbe Anfrage auch ins Perl-Forum geworfen hast, kann es natürlich sein das wir uns beide in der Hausnummer geirrt haben ;-). Für die Lösung in Perl siehe zwei Postings weiter oben....
Datum: 18.10.2006-18:36

|