Thread Bei UTF-8 file wird erste Zeile nicht gelesen (9 answers)
Opened by crojay at 2011-06-10 10:05

crojay
 2011-06-10 10:05
#149545 #149545
User since
2011-03-08
81 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe ein seltsame Problem. Ich lese eine Datei in einen Hash, damit ich mir dann auf einfache Weise Werte aus der Datei anhand des keys holen kann. Grundsätzlich funktioniert das auch :-) aber jetzt habe ich einen Sonderfall. Den Key den ich holen will ist in der aktuellen Datei in der ersten Zeile, wenn die Datei mit UTF-8 gespeichert wird, dann wird dieser Value des keys nicht gefunden. Positioniere ich diese Zeile an eine andere Stelle dann wird alles gefunden. Wenn ich die DAtei als ANSI speichere wird es der Wert des Key auch an erster Zeile gefunden. Ich habe bereits über den Bimode auf utf geschaltet aber das hat auch nichts gebracht, verstehe nicht weshalb es an im UTF-8 Format einfach nicht gefunden wird, wenn der Key in der ersten Zeile ist. Also der Key wird immer gefunden aber nicht der zugehörige Wert, sobald ich die Datei auf ANSI stelle ist alles gut.

Hier mein Code

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
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
49
50
51
52
53
54
55
56
57
my $jobFile = $_[0];
my $key =$_[1];
binmode STDOUT, ':utf8';
print "searching for key $key\n";
if (-e $jobFile){
my $propertyHashRef = &readFileIntoHash($jobFile,":");
my @keys = keys %{$propertyHashRef};
print "@keys\n";
my @values = values %{$propertyHashRef};
print "@values\n";

if (defined $propertyHashRef){
if (!exists $propertyHashRef{$key}){
print "key $key exists in file $jobFile with value ". $propertyHashRef->{$key} ."\n";
return $propertyHashRef->{$key};
}
else{
print "key: $key does not exist in file $jobFile\n";

}
}
else{
&log_this($customer,$ordername,"hash is not defined");
print "hash is not defined\n";
}

}
else{
&log_this($customer,$ordername,"cannot find file $jobFile");
print "cannot find file $jobFile\n";
}
print "no form id found in file $jobFile\n";
return undef;

sub readFileIntoHash{
my $inputFile = $_[0];
my $seperatorChar = $_[1];
if (! $seperatorChar){ $seperatorChar = "="}

&log_this($customer,$ordername,":using input file $inputFile") ;
my %exportHash;
if (-e $inputFile){
open (HASHFILE,$inputFile) || die "file $inputFile konnte nicht geoeffnet werden\n";
binmode(HASHFILE, ":encoding(UTF-8)");
%exportHash = map { chomp; split /\s*$seperatorChar\s*/, $_, 2; } <HASHFILE>;
#while (<HASHFILE>){
# print "$_\n";
#}
#
close(HASHFILE);
return \%exportHash;
}
else{
&log_this($customer,$ordername,":file $inputFile does not exist, returning undef");
return;
}
}



Meine Datei sieht wie folgt aus

Code: (dl )
1
2
3
Formid : XXXXXXXXX
InstanceID : test
Queue: test


Ist die Datei in ANSI gespeichert liefert mit meine obige Methode XXXXXXX als Wert zurück im, ist es im UTF-8 gespeichert so wird kein Wert für die Formid gefunden

Kann mir jemand einen Rat geben?

Danke

View full thread Bei UTF-8 file wird erste Zeile nicht gelesen