Как извлечь данные из 2 файлов и поместить их в другой файл (одна строка из одного файла и другая строка из другого файла и т. Д.)? - PullRequest
1 голос
/ 12 июня 2019

Мне нужно, чтобы файлы сказали one.txt и two.txt.

one.txt, имеющий следующие данные -

ab
cd
ef

two.txt со следующими данными -

gh
ij
kl

** Я хочу вывод, как это в другом файле, как

output.txt -

ab
gh
cd
ij
ef
kl

Может кто-нибудь, пожалуйста, помогите в этом.

Я пытался открыть два файла одновременно, но почему-то я не могу это сделать ..

1 Ответ

1 голос
/ 12 июня 2019

Вам просто нужно прочитать строки из чередующихся файлов.

Например:

open my $fh1, '<', $file1 or die "$0: $file1: $!\n";
open my $fh2, '<', $file2 or die "$0: $file2: $!\n";

while () {
    defined(my $line1 = readline $fh1) or last;
    defined(my $line2 = readline $fh2) or last;
    print $line1, $line2;
}

В качестве альтернативы вы можете выполнить чтение в условии цикла, но это может выглядеть немного странно:

while (
    defined(my $line1 = readline $fh1) &&
    defined(my $line2 = readline $fh2)
) {
    print $line1, $line2;
}

Это остановится, как только в самом коротком файле закончатся строки.

Если вы всегда хотите обработать все строки, вы можете использовать следующее решение (которое обобщает в более чемдва файла):

my @fhs = ($fh1, $fh2);
while (@fhs) {
    my $fh = shift @fhs;
    defined(my $line = readline $fh) or next;
    push @fhs, $fh;
    print $line;
}

Это сохранит чтение строк из первого дескриптора файла в @fhs, а затем повернет массив (переместив первый дескриптор в последнюю позицию).Когда дескриптор файла заканчивается строк, он удаляется из массива.Это продолжается до тех пор, пока все дескрипторы не будут исчерпаны.

Если вы хотите, чтобы он остановился, как только в первом дескрипторе закончатся строки, измените next на last.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...