Thread Daten "Hashen"? (14 answers)
Opened by gmafx at 2010-11-25 22:39

gmafx
 2010-11-25 22:39
#143046 #143046
User since
2009-11-19
47 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich möchte Daten aus einer Datei (Tab-delimited) mit folgender Struktur mittels Perl einlesen:

id1 wert1 wert2 wert3
id1 wert1 wert2 wert3
..
id2 wert1 wert2 wert3
id2 wert1 wert2 wert3
..
etc.

Ich möchte die Daten so einlesen, dass ich die Daten später über die ID (1. Spalte) ansprechen kann. Das mache ich derzeit so:

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
%col2 = ();
%col3 = ();
%col4 = ();

$input = @ARGV[0];
open (INP , "$input");
foreach (<INP>)
{
chomp;
@words = split /\s+/, $_;

$id = $words[0];
$col2 = $words[1];
$col3 = $words[2];
$col4 = $words[3];

if ( !exists($col2{$id}) )
{
$col2{$id} = $col2;
$col3{$id} = $col3;
$col4{$id} = $col4;

}
else
{
$col2{$id} .= " ".$col2;
$col3{$id} .= " ".$col3;
$col4{$id} .= " ".$col4;
}
$c++;
$a= $c %= 1000000;
if ($a == 0) {print "read another 1000000 lines!\n";}
}


while( my ($k, $v) = each %col2 ) {
print "key: $k, value: $v.\n";
# print "key: $k\n";
}


Funktioniert zwar irgendwie, aber die Daten sind danach irgendwie nicht wirklich systematisch handhabbar. Zum Beispiel würde ich jetzt gerne die Werte für jeden Key sortieren, zB für col2. Diese Sortierreihenfolge soll dann aber auch für col3 und col4 gelten.

Ich denke, dass man das Ganze lieber über einen einzigen Hash, oder eine Hashreferenz auf Arrays von Arrays lösen sollte, statt 3 individuelle Hashs zu erstellen - nur wie? Ich probiere damit gerade etwas herum, prinzipiell bin ich aber noch nicht wirklich soweit, spielerisch mit komplexeren Strukturen in Perl umzugehen.

Deshalb wollte ich auf diesem Weg erstmal klären, ob diese Ideen sinnvoll ist oder ob es bessere Vorschläge gibt, obige Daten unter der Prämisse der Sortierbarkeit und des Zugriffs über die ID einzulesen (letzteres ist aufgrund der Dateigröße > 1Gb notwendig)?

Ich freue mich über Anregungen und Ideen!
gma

View full thread Daten "Hashen"?