Załóżmy plik1 wygląda następująco:Ile różnych sposobów łączenia dwóch plików wiersz po linii przy użyciu Perla?
bye bye hello thank you
I plik2 wygląda następująco:
chao hola gracias
Pożądana moc jest taka:
bye bye chao hello hola thank you gracias
ja już wymyślić pięć różnych podejścia do rozwiązania tego problemu. Ale myślę, że musi być więcej sposobów, prawdopodobnie bardziej zwięzłych i bardziej eleganckich sposobów i mam nadzieję, że mogę się nauczyć więcej fajnych rzeczy :)
Oto, co próbowałem do tej pory, na podstawie tego, czego się nauczyłem od wiele rozwiązań moich poprzednich problemów. Próbuję też przetrawić lub zinternalizować wiedzę, którą zdobyłem z księgi Lamy.
KOD 1
#!perl
use autodie;
use warnings;
use strict;
open my $file1,'<','c:/file1.txt';
open my $file2,'<','c:/file2.txt';
while(defined(my $line1 = <$file1>)
and defined(my $line2 = <$file2>)){
die "Files are different sizes!\n" unless eof(file1) == eof(file2);
$line1 .= $line2;
$line1 =~ s/\n/ /;
print "$line1 \n";
}
Kod 2:
#!perl
use autodie;
use warnings;
use strict;
open my $file1,'<','c:/file1.txt';
my @file1 = <$file1>;
open my $file2,'<','c:/file2.txt';
my @file2 =<$file2>;
for (my $n=0; $n<=$#file1; $n++) {
$file1[$n] .=$file2[$n];
$file1[$n]=~s/\n/ /;
print $file1[$n];
}
KOD 3
#!perl
use autodie;
use warnings;
use strict;
open my $file1,'<','c:/file1.txt';
open my $file2,'<','c:/file2.txt';
my %hash;
while(defined(my $line1 = <$file1>)
and defined(my $line2 = <$file2>)) {
chomp $line1;
chomp $line2;
my ($key, $val) = ($line1,$line2);
$hash{$key} = $val;
}
print map { "$_ $hash{$_}\n" } sort keys %hash;
Kod 4:
#!perl
use autodie;
use warnings;
use strict;
open my $file1,'<','c:/file1.txt';
open my $file2,'<','c:/file2.txt';
while(defined(my $line1 = <$file1>)
and defined(my $line2 = <$file2>)) {
$line1 =~ s/(.+)/$1 $line2/;
print $line1;
}
Kod 5:
#!perl
use autodie;
use warnings;
use strict;
open my $file1,'<','c:/file1.txt';
my @file1 =<$file1>;
open my $file2,'<','c:/file2.txt';
my @file2 =<$file2>;
while ((@file1) && (@file2)){
my $m = shift (@file1);
chomp($m);
my $n = shift (@file2);
chomp($n);
$m .=" ".$n;
print "$m \n";
}
Próbowałem coś takiego:
foreach $file1 (@file2) && foreach $file2 (@file2) {...}
Ale Perl dał mi ostrzeżenie o błędzie składniowym. Byłem sfrustrowany. Ale czy możemy uruchamiać jednocześnie dwie pętle foreach
?
Dzięki, jak zawsze, za wszelkie uwagi, sugestie i oczywiście dzielić hojny kod :)
Nie piszesz prawie identyczne pytanie niedawno? –
W rzeczywistości brzmi to jak pytanie typu ankiety bez właściwej odpowiedzi, więc prawdopodobnie powinno to być CW. –
@Kinopiko, to pytanie zadałem kilka dni temu "Jak mogę zamienić kolumnę jednego pliku na kolumnę innego przy użyciu Perla?" był trudniejszy niż ten. – Mike