1 2 3 4 5 6 7 8 9 10 11 12 13
my %adresses; # schleife über csv 1 { $adresses{ $name } = $address; } # schleife über csv 2 { if (exists $addresses{ $name }) { # gib $name, $address und $addresses{ $name } in die 3. csv-datei aus } }
1 2 3 4 5 6 7
... # schleife über csv 2 { if (exists $addresses{ $name } && $addresses{$name} ne $address) { # gib $name, $address und $addresses{ $name } in die 3. csv-datei aus } }
2013-05-13T15:29:31 pqwenn ich noch was nicht-technisches anmerken darf: ich gehöre zu den menschen, die mit einem allerweltsnamen gesegnet sind. ... überlege dir also, wie du mit menschen umgehen möchtest, die den gleichen namen haben.
Guest andyDas dürfte deutlich besser dafür geeignet sein als Namen, oder?
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
open INFILE1, '<content.csv' or die "Fehler beim Öffnen der Datei"; open INFILE2, '<common.csv' or die "Fehler beim Öffnen der Datei"; open OUTFILE, '>neu.csv' or die "Fehler beim Öffnen der Datei"; my @datei1 = <INFILE1>; my $nummer1; my $kuerzel1; my $gesetz1; my @datei2 = <INFILE2>; my $nummer2; my $kuerzel2; my $gesetz2; my %hash; for (my $i=1;$i<@datei1;$i++){ my $line1 = $datei1[$i]; ($nummer1, $kuerzel1, $gesetz1) = split /;/, $line1, 3; } $hash {$kuerzel1} = $gesetz1; for (my $j=1;$j<@datei2;$j++){ my $line2 = $datei2[$j]; ($nummer2, $kuerzel2, $gesetz2) = split /;/, $line2, 3; } if (exists($hash{$kuerzel2})){ print OUTFILE join(';', $kuerzel1, $gesetz1, $gesetz2); }
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
my $INFILE1 = 'asw_content.csv'; my $INFILE2 = 'fv_common.csv'; my $OUTFILE = 'neu.csv'; open (my $fh1, '<', $INFILE1) or die "Fehler beim Öffnen der Datei"; open (my $fh2, '<', $INFILE2) or die "Fehler beim Öffnen der Datei"; open (my $fh3, '>', $OUTFILE) or die "Fehler beim Öffnen der Datei"; my @datei1 = $fh1; my $nummer1; my $kuerzel1; my $gesetz1; my @datei2 = $fh2; my $nummer2; my $kuerzel2; my $gesetz2; my %hash; for (my $i=1;$i<@datei1;$i++){ my $line1 = $datei1[$i]; ($nummer1, $kuerzel1, $gesetz1) = split /;/, $line1, 3; } $hash {$kuerzel1} = $gesetz1; for (my $j=1;$j<@datei2;$j++){ my $line2 = $datei2[$j]; ($nummer2, $kuerzel2, $gesetz2) = split /;/, $line2, 3; } if (exists($hash{$kuerzel2})){ print $fh3 join(';', $kuerzel1, $gesetz1, $gesetz2); }
open my $fh, '<', $filename or die "open '$filename' failed: $!\n";
open my $fh, '<', $filename or die "open '$filename' failed: $!";
2013-05-31T11:22:48 LinuxerSchau Dir mal Zeile 8 an. In $fh1 steckt ein Filehandle, welches Du nun einem Array zuweist. Warum?
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
use warnings; use strict; open my $infile_1, '<', 'content.csv' or die "Fehler beim Öffnen der Datei"; open my $infile_2, '<', 'common.csv' or die "Fehler beim Öffnen der Datei"; open my $outfile, '>', 'neu.csv' or die "Fehler beim Öffnen der Datei"; my @datei1 = <$infile_1>; my @datei2 = <$infile_2>; chomp (@datei1, @datei2); my %hash; for my $line_1 (@datei1) { my ($nummer1, $kuerzel1, $gesetz1) = split /;/, $line1; $hash{$kuerzel1} = $gesetz1; } for my $line2 (@datei2) { my ($nummer2, $kuerzel2, $gesetz2) = split /;/, $line2; if (exists($hash{$kuerzel2})){ # in $hash{$kuerzel2} steht $gesetz1 zum kuerzel print $outfile join(';', $kuerzel2, $hash{$kuerzel2}, $gesetz2), "\n"; } }
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
#!/usr/bin/perl use strict; use warnings; my $in_file1='content.csv'; my $in_file2 'common.csv'; my $out_file='neu.csv'; my %gesetze; open(my $ifh1, '<', $in_file1) or die "ERROR OPEN $in_file1 ($!)\n"; while(my $line=<$ifh1>) { chomp $line ; my ($nummer, $kuerzel, $gesetz) = split /;/, $line, 3; $gesetze{$kuerzel}=$gesetz; } close $ifh1; open(my $ifh2, '<', $in_file2) or die "ERROR OPEN $in_file2 ($!)\n"; open(my $ofh, '>', $out_file) or die "ERROR OPEN $out_file ($!)\n"; while(my $line=<$ifh1>) { chomp $line; my ($nummer, $kuerzel, $gesetz) = split /;/, $line, 3; if( exists $gesetze{$kuerzel} ) { print $ofh join(';', $kuerzel, $gesetze{$kuerzel}, $gesetz)."\n"; } } close $ofh; close $ifh2;
Guest werWas sollen die Zuweisungen außerhalb der Schleife? Warum erst in ein Array lesen und dann bearbeiten? Warum globale Filehandles? Warum kein strict und warnings?
Code (perl): (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#!/usr/bin/perl use strict; use warnings; my $in_file1='content.csv'; my $in_file2 'common.csv'; my $out_file='neu.csv'; my %gesetze; open(my $ifh1, '<', $in_file1) or die "ERROR OPEN $in_file1 ($!)\n"; while(my $line=<$ifh1>) { chomp $line ; my ($nummer, $kuerzel, $gesetz) = split /;/, $line, 3; $gesetze{$kuerzel}=$gesetz; } close $ifh1; open(my $ifh2, '<', $in_file2) or die "ERROR OPEN $in_file2 ($!)\n"; open(my $ofh, '>', $out_file) or die "ERROR OPEN $out_file ($!)\n"; while(my $line=<$ifh1>) { chomp $line; my ($nummer, $kuerzel, $gesetz) = split /;/, $line, 3; if( exists $gesetze{$kuerzel} ) { print $ofh join(';', $kuerzel, $gesetze{$kuerzel}, $gesetz)."\n"; } } close $ofh; close $ifh2;