Schrift
[thread]6786[/thread]

String zu hash wandeln + CSV



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
crypt0
 2005-03-13 23:15
#52615 #52615
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
Hi hab ein Probem. Warscheinlich ist es gar nciht so schwer aber ich weiss echt nicht wie ich das amchen soll.

Folgendes:

Habe eine CSV Datei:

Id Menge Name Einheit ....
1 14 bla Ohm
2 5 Teil ...

Und jetzt will ich z.B. den Namen auslesen und in einen Hash Wandeln, damit dieser Falls das Teil in der Liste öfters vorkommt eindeutig ist.

Danke für eure Hilfe
format_c
 2005-03-13 23:30
#52616 #52616
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
CPAN:Text::CSV ist dein Freund.

Gruß Alex
crypt0
 2005-03-14 09:30
#52617 #52617
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
mit einem code snippet mag mir keiner unter die arme greifen?

das modul text::CSV_XS hät ich schon installiert wenns vll damit auch geht ?
renee
 2005-03-14 10:12
#52618 #52618
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ob jetzt CPAN:Text::CSV oder CPAN:Text::CSV_XS macht nur in der Geschwindigkeit einen Unterschied...

*) Öffne CSV-Datei
*) lasse Zeile parsen
*) erzeuge Hash-Eintrag, mit Namen als Schlüssel
*) schließe CSV-Datei...

Ist doch gar nicht so schwer, oder?? ;)

Probier erstmal, was eigenes zu schreiben, dann lernst Du am meisten... Wenn Du dann immer noch auf Probleme stößt, kannst Du Dich gerne hier nochmal mit Code-Snippets (aber bitte [code]-Tags verwenden) und Problembeschreibung melden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crypt0
 2005-03-14 14:38
#52619 #52619
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
also hab das jetzt mal so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use DBI;

my $dbh = DBI->connect("DBI:CSV:f_dir=C:/;csv_sep_char=\t")
or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info.csv'};
my $sth = $dbh->prepare("SELECT PartID FROM info");
$sth->execute();

while(my $test = $sth->fetchrow_hashref){
print "$test \n";


Als ergebnis bekomm ich das:
HASH(0x1db0240)
HASH(0x1db06f0)
HASH(0x1db06d8)
HASH(0x1db0240)

aber PartID 1 und 3 sind gleich und 2 und 4 sind glecih warum bekomm ich dann so ein komisches ergebnis ? Eigentlich müssten doch hash 1und 3 und 2 und 3 auch gleich sein und noicht 1 und 4 oder ????
renee
 2005-03-14 14:46
#52620 #52620
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach mal
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use DBI;
use Data::Dumper;

my $dbh = DBI->connect("DBI:CSV:f_dir=C:/;csv_sep_char=\t")
or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info.csv'};
my $sth = $dbh->prepare("SELECT PartID FROM info");
$sth->execute();

while(my $test = $sth->fetchrow_hashref){
print Dumper($test);
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crypt0
 2005-03-14 14:58
#52621 #52621
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
also jetzt gibt er so was aus
$VAR1 = {
         'PartID' => 'xxx'
       };
$VAR1 = {
         'PartID' => 'yyy'
       };
$VAR1 = {
         'PartID' => 'xxx'
       };
$VAR1 = {
         'PartID' => 'yyy'
       };

und es gitb die partid als partid aus nicht als hash\n\n

<!--EDIT|crypt0|1110805176-->
renee
 2005-03-14 15:23
#52622 #52622
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, jetzt kannst Du überprüfen, ob alles so selektiert wurde, wie Du es Dir vorgestellt hast...

in $test ist eine Referenz auf einen Hash...

Wenn Du alles in einem Hash haben willst:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use DBI;
use Data::Dumper;

my $dbh = DBI->connect("DBI:CSV:f_dir=C:/;csv_sep_char=\t")
or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info.csv'};
my $sth = $dbh->prepare("SELECT PartID FROM info");
$sth->execute();

my %hash;
while(my $test = $sth->fetchrow_hashref){
$hash{$test->{PartID}} = 1;
}

print Dumper(\%hash);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crypt0
 2005-03-14 16:23
#52623 #52623
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
Ah okay.
und noch was kleines, wie kann ich abfragen ob z.B. die Part ID schon einmal vorhanden ist, wenn ja soll ers nimmer eintragen wenn nein dann nicht.
renee
 2005-03-14 16:32
#52624 #52624
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use DBI;
use Data::Dumper;

my $dbh = DBI->connect("DBI:CSV:f_dir=C:/;csv_sep_char=\t")
or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info.csv'};
my $sth = $dbh->prepare("SELECT PartID FROM info");
$sth->execute();

my %hash;
while(my $test = $sth->fetchrow_hashref){
unless($hash{$test->{PartID}}){
$hash{$test->{PartID}} = 1;
}
else{
print "Schon vorhanden: ",$test->{PartID},"\n";
}
}

print Dumper(\%hash);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-03-13 23:15.