|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
В общем стоит следующая задача, нужно перемешать содержимое двух файлов таким образом, чтобы строки из двух файлов выводились по очереди т.е. первая строка из файла file1, затем вторая строка должна быть первой строкой из файла file2, третья строка должна быть второй строкой из файла file2 и т.д. Также результат работы программы нужно вывести в третий файл file3. #!/usr/bin/perl open (file11, "<file1") or die($!); my %hash1=<file11>; while (<file11>) { chomp; $hash1{$_}=0; } close (file11); open (file22, "<file2") or die($!); my %hash2=<file22>; while (<file22>) { chomp; $hash2{$_}=0; } close (file22); while (eof(file11) and eof(file22)) { my $line; my %hash3; if ($line=readline($hash1{$_})) { $hash3{$_}=0; } elsif ($line=readline($hash2{$_})) { $hash3{$_}=0; } elsif ($line=readline($hash1{$_}) and $line=readline($hash2{$_})) { next; } } open (out, ">file3") or die($!); foreach (keys(%hash3)) { print out "$_\n"; } close (out); ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 16:24 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
Помогите новичку понять, что я делаю не так или предложите альтернативные варианты решения данной задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2017, 16:25 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
fanager, Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 02:47 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
Если есть гарантия, что файлы влазят в память Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Иначе Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 04:23 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
Если надо реализовать самостоятельно, то сделал бы так: открыть интересующие файлы( их может быть произвольное количество ), handles засунуть в какой-нить список и читать в цикле построчно из нулевого индекса, гоняя handles в этом списке по кольцу с помощью функций shift и push . (В качестве списка можно использовать глобальный @_ , чтобы типа пальцы поберечь) Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 04:33 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
поочерёдный вывод строк для всех файлов в тек. каталоге: ( синтаксис постарался сделать как можно более загадочным, а то народ забыл уже, что такое perl ага) Код: perl 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 08:10 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
volodin661, Можете немного поподробнее описать работу этой программы, просто если я пишу вот так ничего не работает #!/usr/bin/perl open $A, ">file1" or die($!); open $B, ">file2" or die($!); open $C, "<file3" or die($!); my @a1=<$A>; my @b1=<$B>; while (readline $_[0]) { if (readline @a1) {print $C "@_\n" && push ( @a1 ), shift @a1;} else {print $C "@_\n" && push ( @b1 ), shift @b1;} } close for $A, $B, $C; ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 15:14 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
fanagervolodin661, Можете немного поподробнее описать работу этой программы, просто если я пишу вот так ничего не работает я могу поподробнее описать работу своей программы, хотя я это уже и сделал. попробуй для начала запустить её в моей редакции , а потом поговорим. по результатам. Код: perl 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 17:24 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
volodin661, а ну кстати я тоже самое писал, только select не использовал (незнал, что есть такая удобная функция для вывода), но вот теперь проблема в том, что не распознаются дескрипторы файлов F1 и F2. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 18:02 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
да, каюсь, не проверил. без use strict разумеется всё работать будет. можно заменить все F на *F, тогда прагма strict заткнётся в тряпочку, но правильный путь - заменить их на скаляры. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 18:37 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
тьфу, в первом open $fh1, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2017, 18:40 |
|
(Perl)поочерёдный вывод строк из двух файлов
|
|||
---|---|---|---|
#18+
volodin661, Спасибо большое!!!Всё работает, но всё равно не могу понять почему не работает вот эта версия программы. !/usr/bin/perl open (my $file11, "<file1") or die($!); open (my $file22, "<file2") or die($!); my $a=1; my $b=1; while ($a or $b) { if ($a) { while (<file11>) { if (readline $file11[0]){ chomp; my $hash1{$_}=0; last;} } } continue { if ($b) { while (<file22>) { if (readline $file22[0]){ chomp; my $hash1{$_}=0; last;} } } } } open (out, ">file3") or die($!); foreach (keys(%hash1)) { print out "$_\n"; } close for out, file11, file22; ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 10:32 |
|
|
start [/forum/topic.php?fid=23&fpage=29&tid=1460493]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 304ms |
total: | 415ms |
0 / 0 |