Schrift
[thread]7671[/thread]

umlaute und regexp problem



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
e-weder
 2006-02-02 15:09
#62561 #62561
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
hallo

habe hier nen kleines großes problem!
Ich möchte aus einen html dokment alle umlaute in die entsprechende html sequenz umwandeln, nur irgenwie geht das nicht!

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

open(DATA, "< gps.pl.htm");
@data=<DATA>;
close(DATA);

foreach (@data)
{
convert_umlaut($_);
}

sub convert_umlaut
{
$temp=shift;
$temp =~ s/ö/&ouml\;/g;
$temp =~ s/ü/&uuml\;/g;
$temp =~ s/ä/&auml\;/g;
$temp =~ s/Ö/&Ouml\;/g;
$temp =~ s/Ü/&Uuml\;/g;
$temp =~ s/Ä/&Auml\;/g;
$temp =~ s/ß/&szlig\;/g;
print $temp;
}


ich denke der code ist selbsterklärent.
ich bitte um hilfe

mfg e-weder
Matze
 2006-02-02 16:21
#62562 #62562
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Welche Fehlermeldung bekommst du ?

Ich denke es liegt daran das ä, ü ,ö ... auch Sonderzeichen sind.
Du müsstest also auch vor diese Zeichen einen \ setzten.
Vielleicht auch noch vor das &, ich probier das dann immer aus wenn bei mir sowas nicht geht.

Oder löschst du verändert dein Programm nicht alle ä, ü , ö ... ?
Das liegt dann daran das du jede Zeile einmal bearbeitest.

Besser wäre folgendes:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/perl -w
#
use strict;

my @html;

open IN, "gps.pl.htm" or die "Datei nicht gefunden / Datei konnte nicht geoeffnet werden.";
@html = <IN>;
chomp @html;
close IN;

foreach (@html) {
  convert_umlaut($_);
}

# convert_umlaut:
#
sub convert_umlaut {
  my $temp = shift;

  print "Vorher: $temp"; # \ n noch rein, kann Forum nicht

  while ($temp =~ /\ä\ü\ö\ß/i) {

    # Vor das & noch jeweils ein \
    # Forum kann das leider nicht, ersetzt es dann in ä, ö ...
    #

    $temp =~ s/\ö/&ouml\;/g;
    $temp =~ s/\ü/&uuml\;/g;
    $temp =~ s/\ä/&auml\;/g;
    $temp =~ s/\Ö/&Ouml\;/g;
    $temp =~ s/\Ü/&Uuml\;/g;
    $temp =~ s/\Ä/&Auml\;/g;
    $temp =~ s/\ß/&szlig\;/g;
  }

  print "Nacher: $temp"; # \ n noch rein, kann Forum nicht
}


EDIT: Das was das Forum falsch interpretiert, \ n und \ vor den & verändert.

MfG. Matze\n\n

<!--EDIT|Matze|1138890366-->
Mit freundlichen Grüßen: Matze
Matze
 2006-02-02 16:30
#62563 #62563
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Matze,02.02.2006, 15:21]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    # Vor das & noch jeweils ein \
    # Forum kann das leider nicht, ersetzt es dann in ä, ö ...
    #

    $temp =~ s/\ö/ö\;/g;
    $temp =~ s/\ü/ü\;/g;
    $temp =~ s/\ä/ä\;/g;
    $temp =~ s/\Ö/Ö\;/g;
    $temp =~ s/\Ü/Ü\;/g;
    $temp =~ s/\Ä/Ä\;/g;
    $temp =~ s/\ß/ß\;/g;
  }

  print "Nacher: $temp"; # \ n noch rein, kann Forum nicht
}
[/quote]
Entschuldige, aber innerhalb von [ Perl ] und [ /Perl ](ohne die Leerzeichen) werden wohl diverse Zeichenfolgen ersetzt.
Hier das ganze nochmal ohn [ Perl ]:

   $temp =~ s/\ö/\&ouml\;/g;
   $temp =~ s/\ü/\&uuml\;/g;
   $temp =~ s/\ä/\&auml\;/g;
   $temp =~ s/\Ö/\&Ouml\;/g;
   $temp =~ s/\Ü/\&Uuml\;/g;
   $temp =~ s/\Ä/\&Auml\;/g;
   $temp =~ s/\ß/\&szlig\;/g;

MfG. Matze
Mit freundlichen Grüßen: Matze
e-weder
 2006-02-02 16:30
#62564 #62564
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
allso ich habe das alles mal ausprobiert!
ich habe auch die ganzen sonderueichen maskiert, es geht aber nicht!
er ersetzt mir kein einzigen umlaut!!

habe auch mal deine code probiert, geht auch nicht!!
Matze
 2006-02-02 16:32
#62565 #62565
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du hast aber schon die Datei danach nochmal überschrieben, oder ?

MfG. Matze
Mit freundlichen Grüßen: Matze
e-weder
 2006-02-02 16:37
#62566 #62566
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
ähhh nein warum?

ich lasse mir doch die veränderte variable danach direkt ausgeben!
Matze
 2006-02-02 16:41
#62567 #62567
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja nach STDOUT und nicht in die Datei.

Am besten fügst du deinem Skript nach der foreach-Schleife noch dieses hinzu:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
# Nach der foreach-Schleife, also
# bisher Ende des Skripts:
#

open OUT, ">gps.pl.htm";
  foreach (@html) {  # Oder @data
    print OUT "$_\n";
  }
close OUT;
Mit freundlichen Grüßen: Matze
e-weder
 2006-02-02 16:50
#62568 #62568
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
häääää was bitte

es ist doch absolut egal ob ich es mir in eine datei schreiben lasse oder es mir auf STDOUT ausgeben lasse, das ändert doch nichts daran das er es mir nicht ersetzt!
Matze
 2006-02-02 16:58
#62569 #62569
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich dachte du wolltest es in der Datei haben,

Aber gut, stimmt, ich habs gerade mal selbser getestet, funktioniert auch bei mir nicht...

Mmh, ich gucks mir nochmla an.

MfG. Matze
Mit freundlichen Grüßen: Matze
e-weder
 2006-02-02 17:02
#62570 #62570
User since
2005-11-08
31 Artikel
BenutzerIn
[default_avatar]
:-)

allso ich bin mir fast sicher, das es einfach nur probleme mit den Umlauten bei den regexp gibt, das man die irgenwie anders angeben muss!
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-02-02 15:09.