Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

procmail + change subject, w2ksp4.exe download, /proc/kallsyms format, sqldatasource dal, wwwxxxenden, convert raid5 to raid 10 mdadm, apache force chunked, nrao wwwxxx, xxxxxdup, procmail change subject header

Links

XODOX
Impressum

#1: utf-8 Zeichen als hash-key

Posted on 2008-01-11 15:27:39 by Christoph Krempe

Hallo,

ich versuche, UTF-8-Zeichen als hash-key zu benutzen, was offenbar nicht
geht. Meine Idee war nun, das UTF-8-Zeichen in eine Nummernfolge o.ä.
umzusetzen und diese als key zu verwenden, leider habe ich dazu nichts
gefunden. Hat jemand eine Idee?

Danke,

Christoph

Report this message

#2: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-11 15:39:05 by df4or

Christoph Krempe wrote:

> Hallo,
>
> ich versuche, UTF-8-Zeichen als hash-key zu benutzen, was offenbar nicht
> geht.

Warum sollte das nicht gehen? Was für einen Fehler bekommst Du?

> Meine Idee war nun, das UTF-8-Zeichen in eine Nummernfolge o.ä.
> umzusetzen und diese als key zu verwenden, leider habe ich dazu nichts
> gefunden. Hat jemand eine Idee?

ord();

GruÃÂ,
Ekki

Report this message

#3: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-11 15:57:21 by Christoph Krempe

Am Fri, 11 Jan 2008 15:39:05 +0100 schrieb Ekki Plicht (DF4OR):

> Christoph Krempe wrote:
>
>> Hallo,
>>
>> ich versuche, UTF-8-Zeichen als hash-key zu benutzen, was offenbar
>> nicht geht.
>
> Warum sollte das nicht gehen? Was für einen Fehler bekommst Du?
>
>> Meine Idee war nun, das UTF-8-Zeichen in eine Nummernfolge o.ä.
>> umzusetzen und diese als key zu verwenden, leider habe ich dazu nichts
>> gefunden. Hat jemand eine Idee?
>
> ord();
>
> GruÃÂ,
> Ekki

So wird der hash gefüllt:

$u="ÃÂ";
$utftable['$u'] = "l";

$x=$utftable[ÃÂ];

print "$x\n";

gibt mir aus:
Unrecognized character \xC5


$x=$utftable['ÃÂ'];
gibt mir aus: 0

Report this message

#4: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-11 17:04:31 by Christian Winter

Christoph Krempe schrieb:
> Am Fri, 11 Jan 2008 15:39:05 +0100 schrieb Ekki Plicht (DF4OR):
>>
>>> Meine Idee war nun, das UTF-8-Zeichen in eine Nummernfolge o.ä.
>>> umzusetzen und diese als key zu verwenden, leider habe ich dazu nichts
>>> gefunden. Hat jemand eine Idee?
>
> So wird der hash gefüllt:
>
> $u="ÃÂ";
> $utftable['$u'] = "l";
>
> $x=$utftable[ÃÂ];
>
> print "$x\n";
>
> gibt mir aus:
> Unrecognized character \xC5
>
>
> $x=$utftable['ÃÂ'];
> gibt mir aus: 0

Das ist kein perl, was Du das schreibst. Perl benutzt
geschweifte Klammern um Hashelemente zu adressieren
und interpoliert keine Variablen in einfachen Hochkomma.

----------------------------------------------------
#!/usr/bin/perl

use strict;
use warnings;
use utf8;

my %utftable;

my $u="ÃÂ";
$utftable{$u} = "l"; # auch $utftable{"$u"} = "l"; geht

my $x = $utftable{"ÃÂ"};

print "$x\n";
-----------------------------------------------------

Funktioniert problemlos.

-Christian

Report this message

#5: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-11 17:05:57 by Christoph Krempe

Am Fri, 11 Jan 2008 14:57:21 +0000 schrieb Christoph Krempe:

> Am Fri, 11 Jan 2008 15:39:05 +0100 schrieb Ekki Plicht (DF4OR):
>
>> Christoph Krempe wrote:
>>
>>> Hallo,
>>>
>>> ich versuche, UTF-8-Zeichen als hash-key zu benutzen, was offenbar
>>> nicht geht.
>>
>> Warum sollte das nicht gehen? Was für einen Fehler bekommst Du?
>>
>>> Meine Idee war nun, das UTF-8-Zeichen in eine Nummernfolge o.ä.
>>> umzusetzen und diese als key zu verwenden, leider habe ich dazu nichts
>>> gefunden. Hat jemand eine Idee?
>>
>> ord();
>>
>> GruÃÂ,
>> Ekki
>
> So wird der hash gefüllt:
>
> $u="ÃÂ";
> $utftable['$u'] = "l";
>
> $x=$utftable[ÃÂ];
>
> print "$x\n";
>
> gibt mir aus:
> Unrecognized character \xC5
>
>
> $x=$utftable['ÃÂ'];
> gibt mir aus: 0

War mein Fehler, ich hatte ein chomp falsch gesetzt, und den hash mit "["
statt "{" definiert ...

Christoph

Report this message

#6: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-11 19:57:58 by Ferry Bolhar

Christoph Krempe:

> So wird der hash gefüllt:
>
> $u="L";
> $utftable['$u'] = "l";

Ja, in PHP vielleicht. In Perl solltest du

$utftable{"$u"} = 1;

schreiben, das wird sicher besser funktionieren.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: ferdinand.bolhar-nordenkampf@wien.gv.at

Report this message

#7: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-13 23:58:05 by Helmut Wollmersdorfer

Christoph Krempe wrote:

> So wird der hash gefüllt:
>
> $u="ÃÂ";
> $utftable['$u'] = "l";
>
> $x=$utftable[ÃÂ];
>
> print "$x\n";

Abgesehen vom Syntaxfehler willst Du vermutlich folgendes machen:

use strict;
use warnings;
use utf8;

use Text::Undiacritic qw(undiacritic);

$u = 'ÃÂ';
$utftable{$u} = lc( undiacritic( $u ) );

Helmut Wollmersdorfer

Report this message

#8: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-14 10:38:10 by Christoph Krempe

Am Sun, 13 Jan 2008 23:58:05 +0100 schrieb Helmut Wollmersdorfer:

> Christoph Krempe wrote:
>
>> So wird der hash gefüllt:
>>
>> $u="ÃÂ";
>> $utftable['$u'] = "l";
>>
>> $x=$utftable[ÃÂ];
>>
>> print "$x\n";
>
> Abgesehen vom Syntaxfehler willst Du vermutlich folgendes machen:
>
> use strict;
> use warnings;
> use utf8;
>
> use Text::Undiacritic qw(undiacritic);
>
> $u = 'ÃÂ';
> $utftable{$u} = lc( undiacritic( $u ) );
>
> Helmut Wollmersdorfer

Genau!! Das Modul hat mir gefehlt, besten Dank!

Leider bekomme ich bei der Umsetzung meiner Daten folgende Fehler:

Use of uninitialized value in chr at /usr/perl5/site_perl/5.8.4/Text/
Undiacritic.pm line 28, <ALG> line 444.
Use of uninitialized value in substitution (s///) at /usr/perl5/
site_perl/5.8.4/Text/Undiacritic.pm line 27, <ALG> line 453.
Use of uninitialized value in pattern match (m//) at /usr/perl5/5.8.4/lib/
charnames.pm line 303, <ALG> line 453.
Use of uninitialized value in exists at /usr/perl5/5.8.4/lib/charnames.pm
line 305, <ALG> line 453.
Use of uninitialized value in concatenation (.) or string at /usr/
perl5/5.8.4/lib/charnames.pm line 309, <ALG> line 453.
Use of uninitialized value in chr at /usr/perl5/site_perl/5.8.4/Text/
Undiacritic.pm line 28, <ALG> line 453.
Use of uninitialized value in substitution (s///) at /usr/perl5/
site_perl/5.8.4/Text/Undiacritic.pm line 27, <ALG> line 490.
Use of uninitialized value in pattern match (m//) at /usr/perl5/5.8.4/lib/
charnames.pm line 303, <ALG> line 490.
Use of uninitialized value in exists at /usr/perl5/5.8.4/lib/charnames.pm
line 305, <ALG> line 490.
Use of uninitialized value in concatenation (.) or string at /usr/
perl5/5.8.4/lib/charnames.pm line 309, <ALG> line 490.
Use of uninitialized value in chr at /usr/perl5/site_perl/5.8.4/Text/
Undiacritic.pm line 28, <ALG> line 490.

Ich vermute, das hängt mit der Art meiner Eingabedaten zusammen, sie
bestehen u.a. aus \x00 und \x01-Zeichen, sind also keine reinen UTF8-
Daten. Ich will einfach die Eingabedatei Satz für Satz auf das vorkommen
von UTF-8-Zeichen prüfen und jeweils den Grundbuchstaben zurückgeben.

Ein anderes Problem ist, daàder split in meinem Progrämchen offenbar
byteweise, nicht zeichenweise arbeitet:

use strict;
use warnings;
use utf8;
use Text::Undiacritic qw(undiacritic);


while(<ALG>){
my $kopf="";
my $zeichen="";
my @satz = split(/@@@/, $_); # nur den Teil bis "@@@"
my @ssatz = split(//,$satz[0]);
foreach $zeichen (@ssatz) {
$s = lc(undiacritic($zeichen));
$kopf .= $zeichen;
}
print $kopf$satz[1]; # Kopf + Rest d. Satzes
}


Ein "print "$zeichen\n"; _vor_ dem undiacritic bringt im Fall von "ö"
zwei Zeichen statt "ö".

Report this message

#9: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-14 14:07:33 by Christoph Krempe

Am Mon, 14 Jan 2008 09:38:10 +0000 schrieb Christoph Krempe:

> Am Sun, 13 Jan 2008 23:58:05 +0100 schrieb Helmut Wollmersdorfer:
>
>> Christoph Krempe wrote:
>>
>>> So wird der hash gefüllt:
>>>
>>> $u="ÃÂ";
>>> $utftable['$u'] = "l";
>>>
>>> $x=$utftable[ÃÂ];
>>>
>>> print "$x\n";
>>
>> Abgesehen vom Syntaxfehler willst Du vermutlich folgendes machen:
>>
>> use strict;
>> use warnings;
>> use utf8;
>>
>> use Text::Undiacritic qw(undiacritic);
>>
>> $u = 'ÃÂ';
>> $utftable{$u} = lc( undiacritic( $u ) );
>>
>> Helmut Wollmersdorfer
>
> Genau!! Das Modul hat mir gefehlt, besten Dank!
>
> Leider bekomme ich bei der Umsetzung meiner Daten folgende Fehler:
>
> Use of uninitialized value in chr at /usr/perl5/site_perl/5.8.4/Text/
> Undiacritic.pm line 28, <ALG> line 444. Use of uninitialized value in
> substitution (s///) at /usr/perl5/ site_perl/5.8.4/Text/Undiacritic.pm
> line 27, <ALG> line 453. Use of uninitialized value in pattern match
> (m//) at /usr/perl5/5.8.4/lib/ charnames.pm line 303, <ALG> line 453.
> Use of uninitialized value in exists at
> /usr/perl5/5.8.4/lib/charnames.pm line 305, <ALG> line 453.
> Use of uninitialized value in concatenation (.) or string at /usr/
> perl5/5.8.4/lib/charnames.pm line 309, <ALG> line 453. Use of
> uninitialized value in chr at /usr/perl5/site_perl/5.8.4/Text/
> Undiacritic.pm line 28, <ALG> line 453. Use of uninitialized value in
> substitution (s///) at /usr/perl5/ site_perl/5.8.4/Text/Undiacritic.pm
> line 27, <ALG> line 490. Use of uninitialized value in pattern match
> (m//) at /usr/perl5/5.8.4/lib/ charnames.pm line 303, <ALG> line 490.
> Use of uninitialized value in exists at
> /usr/perl5/5.8.4/lib/charnames.pm line 305, <ALG> line 490.
> Use of uninitialized value in concatenation (.) or string at /usr/
> perl5/5.8.4/lib/charnames.pm line 309, <ALG> line 490. Use of
> uninitialized value in chr at /usr/perl5/site_perl/5.8.4/Text/
> Undiacritic.pm line 28, <ALG> line 490.
>
> Ich vermute, das hängt mit der Art meiner Eingabedaten zusammen, sie
> bestehen u.a. aus \x00 und \x01-Zeichen, sind also keine reinen UTF8-
> Daten. Ich will einfach die Eingabedatei Satz für Satz auf das vorkommen
> von UTF-8-Zeichen prüfen und jeweils den Grundbuchstaben zurückgeben.
>
> Ein anderes Problem ist, daàder split in meinem Progrämchen offenbar
> byteweise, nicht zeichenweise arbeitet:
>
> use strict;
> use warnings;
> use utf8;
> use Text::Undiacritic qw(undiacritic);
>
>
> while(<ALG>){
> my $kopf="";
> my $zeichen="";
> my @satz = split(/@@@/, $_); # nur den Teil bis "@@@"
> my @ssatz = split(//,$satz[0]);
> foreach $zeichen (@ssatz) {
> $s = lc(undiacritic($zeichen));
> $kopf .= $zeichen;
> }
> print $kopf$satz[1]; # Kopf + Rest d. Satzes
> }
>
>
> Ein "print "$zeichen\n"; _vor_ dem undiacritic bringt im Fall von "ö"
> zwei Zeichen statt "ö".

Das Problem liegt woanders: Unter Linux (32bit) funktioniert
split(//,$string) wie erwartet, unter Solaris10 (64bit) nicht ...

Danke für die Hinweise!

Christoph

Report this message

#10: Re: utf-8 Zeichen als hash-key

Posted on 2008-01-15 19:55:29 by hjp-usenet2

On 2008-01-14 09:38, Christoph Krempe <krempe@ub.fu-berlin.de> wrote:
> Ich vermute, das hängt mit der Art meiner Eingabedaten zusammen, sie
> bestehen u.a. aus \x00 und \x01-Zeichen, sind also keine reinen UTF8-
> Daten.

Was ist an \x00 und \x01 nicht UTF-8?

> Ich will einfach die Eingabedatei Satz für Satz auf das vorkommen
> von UTF-8-Zeichen prüfen und jeweils den Grundbuchstaben zurückgeben.
>
> Ein anderes Problem ist, daà der split in meinem Progrämchen offenbar
> byteweise, nicht zeichenweise arbeitet:

split arbeitet mit dem was es bekommt: Wenn Du einen Character-String
splittest, arbeitet es zeichenweise, wenn Du einen Bytestring splittest,
(natürlich) byteweise.

Also ...

> use strict;
> use warnings;
> use utf8;
> use Text::Undiacritic qw(undiacritic);
>
>
> while(<ALG>){
> my $kopf="";
> my $zeichen="";
> my @satz = split(/@@@/, $_); # nur den Teil bis "@@@"

.... ist hier vermutlich $_ ein Bytestring.

Wo kommt $_ her? Es wird ein paar Zeilen vorher von ALG gelesen.

Wie wurde ALG geöffnet? Das hast Du uns nicht mitgeteilt.

hp

PS: Folgende Routine ist gelegentlich recht praktisch:

sub dumpstr {
my ($s) = @_;

print utf8::is_utf8($s) ? "char" : "byte";
print ":";
for (split //, $s) {
printf " %#02x", ord($_);
}
print "\n";
}

Report this message