Perl umschreiben
Hi
bräuchte hilfe mit diesem Code hier:
es geht um den teil $out.=from_utf8 usw bis zur ausgabe (die 2 schleifen).
Das ganze ist nämlich mit use Unicode; programmiert und ist deswegen ziemlich langsam und will es mit der use Encode; proggen (http://perldoc.perl.org/Encode.html).
Nur bekomme ich eben die 2. while schleife mit der Encode nicht hin.
Könnt ihr mir da helfen?
bräuchte hilfe mit diesem Code hier:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
my $LAT = "</KYR>";
my $CYR = "<KYR>";
my $out="";
while(my $line = <STDIN>) {
chomp $line;
if ( $line =~ /([^\p{inlatin2}\p{incyr}])/ ){
die "unknown character in line $.: $1 ".sprintf("%04x",ord($1))."$/";
}
while ( $line =~ /(?=.)(\p{inlatin2}*)(\p{incyr}*)/g ) {
$out.=from_utf8({ -string => "$1" , -charset => 'ISO-8859-2' }) unless ( "$1" eq "" );
$out.=$CYR.from_utf8({ -string => "$2" , -charset => 'ISO-8859-5' }).$LAT unless ( from_utf8({ -string => "$2" , -charset
=> 'ISO-8859-5' }) eq "" );
}
$out.=$/;
print $out;
$out="";
|
es geht um den teil $out.=from_utf8 usw bis zur ausgabe (die 2 schleifen).
Das ganze ist nämlich mit use Unicode; programmiert und ist deswegen ziemlich langsam und will es mit der use Encode; proggen (http://perldoc.perl.org/Encode.html).
Nur bekomme ich eben die 2. while schleife mit der Encode nicht hin.
Könnt ihr mir da helfen?
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
my $LAT = "</KYR>";
my $CYR = "<KYR>";
my $out="";
while(my $line = <STDIN>) {
chomp $line;
if ( $line =~ /([^\p{inlatin2}\p{incyr}])/ ){
die "unknown character in line $.: $1 ".sprintf("%04x",ord($1))."$/";
}
while ( $line =~ /(?=.)(\p{inlatin2}*)(\p{incyr}*)/g ) {
$out.=from_to($1, "utf8", "iso-8859-2") unless ( "$1" eq "" );
$out.=$CYR.from_to($2 ,"utf8", 'ISO-8859-5' ).$LAT unless ( from_to("$2" ,"utf8", 'ISO-8859-5' ) eq "" );
}
$out.=$/;
print $out;
$out="";
|
So sollte es doch gehen.
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Probiers einfach mal aus, hab schon ewig kein Perl Script mehr geschrieben
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
|
|
Quellcode |
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 40 41 42 43 44 45 46 47 48 |
#!/usr/bin/perl -w
use strict;
use Encode qw(encode);
#use open STDIN => ':utf8';
sub inlatin2{
return <<'END';
0000 00A0
END
}
sub incyr{
return <<'END';
0000 00A0
END
}
sub inasc{
return <<'END';
0000 0080
END
}
my $LAT = "</KYR>";
my $CYR = "<KYR>";
my $out = "";
binmode STDIN, ':encoding(UTF-8)';
while(my $line = <STDIN>) {
chomp $line;
if ( $line =~ /([^\p{inlatin2}\p{incyr}])/ ){
die "unknown character in line $.: $1 ".sprintf("%04x",ord($1))."$/";
}
if ( $line =~ /^\p{inasc}*$/ ){
$out.=$line;
}else{
while ( $line =~ /(?=.)(\p{inlatin2}*)(\p{incyr}*)/g ) {
$out.=encode("iso-8859-2",$1) unless ( "$1" eq "" );
$out.=$CYR.encode("ISO-8859-5", $2).$LAT unless ( "$2" eq "" );
}
}
$out.=$/;
#print $out;
#$out="";
}
print $out;
close STDIN;
exit;
|
Habs das ganze jetzt umgeschrieben und funktioniert jetzt so.
Jetzt geht es mir nur noch um die Perfomance, sprich Geschwindigkeit.
Fällt jemanden noch was ein, was ich ändern könnte damit es schneller wird?
Grüße
So circa, in Perl kannst alles so schreiben, das es sonst keiner versteht (:
Worüber wunderst dich denn?
Edit: Habs jetzt wieder ein wenig "optimiert", fällt sonst jemanden noch was ein, wie es besser sein könnte bzgl Geschwindigkeit?
Worüber wunderst dich denn?
Edit: Habs jetzt wieder ein wenig "optimiert", fällt sonst jemanden noch was ein, wie es besser sein könnte bzgl Geschwindigkeit?
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Super_Frettchen« (11. August 2009, 12:51)
Ähnliche Themen
-
eigener Server »-
Server und Dyn Dns Problem und frage
(24. November 2004, 15:40)
-
Archiv: Betriebssysteme »-
MRTG Stat für Linux 9
(19. August 2004, 15:38)
-
PHP »-
wie ist der perl interpreter?
(10. Februar 2003, 22:18)
-
Newbies »-
wo ist men cgi-bin?
(31. Oktober 2002, 02:13)


