zeichen zählen ohne Leerzeichen
|
Seitenanfang |
Hi, ich habe ein Array der so aussieht: $arr[0]="irgendwas Störung_stört_mich"; $arr[1]="irgendwas Störung_stört_blabla"; $arr[1]="irgendwas Störung_stört_bloblo"; . . $arr[n]="irgendwas Störung_stört_boblo";und zwar ich möchte die Störung_.. durch Dummy000 bis Dummy000 ersetzen Das habe ich mit diesem Code geschaft: $maxindex = $#arr; for($i=0;$i<=$maxindex;$i++) { $table[$i]=~s/irgendwas .*/irgendwas Dummy001/; } jetzt möchte ich die Störung nur ersetzen wenn die Zahl dieser Buchstaben > als 12 ist könnt ihr mir bitte sagen wie ich das machen kann?
Datum: 25.06.2007-16:03

|
re: zeichen zählen ohne Leerzeichen
|
Seitenanfang |
Mit dieser Funktion werden leider auch die Leerzeichen mitgezählt: $laenge = length ($arr[4]); habt ihr eine andere idee?danke euch
Datum: 25.06.2007-16:05

|
re: zeichen zählen ohne Leerzeichen
|
Seitenanfang |
length zaehlt ja auch die Laenge des Strings, also die Anzahl der Zeichen und Leerzeichen sind nun mal Zeichen. Generell kann man mit den tr//- bzw. mit den y//-Operator Zeichen zaehlen. Das Zaehlen von Zeichen die kein Whitespace-Zeichen sind ist mit tr// aber etwas schwierig da man all die Zeichen die man zaehlen moechte mit in der Zeichenliste angeben muss. Deshalb verwendet man hier zum Zaehlen den Substitutions-Operator s///.
#!/usr/bin/perl use strict; use warnings; my $example_text = 'We do not want count whitespaces'; my $none_whitespace_char_count = $example_text =~ s/(\S)/$1/g; print length($example_text), "\n"; print $none_whitespace_char_count, "\n";
Das Muster trifft auf die Zeichenklasse \S zu, also all die Zeichen die kein Whitespace sind, und ersetzt es mit sich selbst. Da s/// die Anzahl der Ersetzungen zurueck gibt, kann man so auch Zeichen zaehlen.
Datum: 25.06.2007-22:30

|
re: zeichen zählen ohne Leerzeichen
|
Seitenanfang |
Du machst es einen nicht gerade leicht dir zu helfen, man muss erst immer etwas raetseln was genau du eigentlich machen moechtest. Einerseits bringen Beispieldaten wie dein Array nichts wenn die Daten nicht halbwegs an der Realitaet sind, so laesst sich nicht erkennen was deine Intuition ist diesen Code so zu schreiben bzw. was er letztendlich als Ergebnis bringen soll. Das naechste mal bitte die Anfrage etwas klarer formulieren und lies dir deinen Beitrag noch ein- oder zweimal durch bevor du ihn abschickst, ob auch wirklich verstaendlich ist was du geschrieben hast. #!/usr/bin/perl use strict; use warnings; my @texts = ( "irgendwas Störung_stört_mich", "irgendwas Störung_stört_blabla", "irgendwas Störung_stört_bloblo", "irgendwas Störung", ); for my $text_index (0 .. $#texts) { $texts[$text_index] =~ s/(irgendwas\s+?)\S{13,}/$1Dummy001/; } print "$_\n" for @texts;
Beim letzten Beispieldatensatz wird "Störung" nicht ersetzt, da es weniger als 13 Nicht-Whitespace-Zeichen sind.Nicht-Whitespace-Zeichen => Zeichen die kein Leerzeichen, Tabulatorzeichen, etc. sind
Datum: 25.06.2007-22:18

|
re: zeichen zählen ohne Leerzeichen
|
Seitenanfang |
es hatsich erledigt in dem ich einfach die Leerzeichen ersetzt habe durch µ und danach habe ich µ gelöscht. aber das nächste Mal lese ich wass ich schreibe bevor ich es schicke. danke.
Datum: 12.07.2007-17:42

|