Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Dabei seit: 18.05.2006

Beiträge: 624

 

1 Zum Seitenanfang

Freitag, 7. August 2009, 09:46

Perl umschreiben

Hi
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?
 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

2 Zum Seitenanfang

Freitag, 7. August 2009, 10:42

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.
 

Dabei seit: 18.05.2006

Beiträge: 624

 

3 Zum Seitenanfang

Freitag, 7. August 2009, 10:50

und einfach:

Quellcode

1
2
3
4
5
#!/usr/bin/perl -w
use strict;
use Encode;

binmode STDIN;



?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Super_Frettchen« (7. August 2009, 10:50)

 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

4 Zum Seitenanfang

Freitag, 7. August 2009, 11:11

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.
 

Dabei seit: 18.05.2006

Beiträge: 624

 

5 Zum Seitenanfang

Freitag, 7. August 2009, 13:57

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 ;)
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

6 Zum Seitenanfang

Freitag, 7. August 2009, 14:14

Für Perl gilt wohl: Einmal schreiben und nie wieder verstehen oder?

~!__/
..o.o

This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
 

Dabei seit: 18.05.2006

Beiträge: 624

 

7 Zum Seitenanfang

Dienstag, 11. August 2009, 12:51

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?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Super_Frettchen« (11. August 2009, 12:51)

 

Ähnliche Themen