![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| Exion |
|
|||
|
Unregistered |
Есть 2 файла с некоторым содержанием (близким, но во втрором файле есть дописанные данные). Мне надо сравнивать их и если есть различия, то эти различия копировать из второго фала и дописывать в конец первого.
Если считать файл в массив: open (FILE, "<File.txt") #file opened for reading or die ("Can't open file"); @file1=<FILE>; то каждый элемент массива будет строкой из фала. А мне надо посимвольно сравнивать. Подскажите, пожалуйста, как к символу тогда обратиться в строке этого массива, а не к самой строке? |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Если читать файл нужно построчно, то всегда можно пройти по строке с помощью substr или разбивать строку на символы c помощью split, делать это в том случае, если строки не равны.
Насколько большие файлы? -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Exion |
|
|||
|
Unregistered |
Попробую, на перле прогаю очень мало, поэтому не знаю таких функций. Файлы не большие, ты имеешь ввиду скопировать в временнй файл данные, а не в массив? Мне массив подойдет.
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 3 Всего: 44 |
а может быть еще для этого подлключить стандартный дифф
|
|||
|
||||
| Exion |
|
|||
|
Unregistered |
Какой-такой дифф?
|
|||
|
||||
| BlackLFL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 15.9.2005 Где: Москва Репутация: 1 Всего: 12 |
я думаю такого примера хватит, чтобы выполнить задачю ... Это сообщение отредактировал(а) BlackLFL - 14.10.2005, 14:43 |
|||
|
||||
| Exion |
|
|||
|
Unregistered |
Спасибо за пример, правда он не совсем правильно работает
для кода: my $first="hellooi my fr"; my $second="hello my ft"; он выдает: o<br>i<br> <br>m<br>y<br> <br>f<br> т. е . до пробела исправляет. Думаю это можно легко исправить, сейчас попробую. |
|||
|
||||
| Exion |
|
|||
|
Unregistered |
В перле можно писать цикл фор внутри другого фора?
for($line=0;$line<=$#file1;$line++) { for my $i (0..length $file1[$line]) { print substr($file1[$line],$i,1) ." " if(substr($file1[$line],$i,1) ne substr($file2[$line],$i,1)); } } Например, здесь вылетают ошибки. Походу $line внутри второго фора не определен. |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Можно, вложенность циклов может быть какой угодно, причём не важно какие циклы while, for, foreach или until ты используешь. Мне не совсем понятна суть задачи, если не трудно, поясни. Тебе нужно именно добавлять в конец первого файла или же тебе нужно делать копию второго файла, если были сделаны какие-то изменения в нём? Если добавлять в конец, то попробуй такокой вариант:
Ну а если копию, то всё намного проще. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
Exion если файла почти одинаковые и могут отличаться тем, что во втором дописаны новые строчки, то можно сделать так.
1. сравниваешь размеры файлов: - если одинаковые, то выход, - иначе создаешь копию второго файла (или большего файла) переименовываешь копию в имя первого файла 2. выход Это сообщение отредактировал(а) sharq - 15.10.2005, 11:11 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| Exion |
|
|||
|
Unregistered |
sharq:
korob2001 : даю проге на вход имена двух файлов: первый - оригинал, второй файл с дописанными данными (вида: символы, буквы англ. алфавита, знаки типо [], ":"). Программа должа найти эти новые данные и вытащить их, допустим записать в новый файл. Думаю надо искать с помощью регулярных выражений слова (т.е. символы между пробелами) и если не совпадает, то вытаскивать это слово и записывать. Спасибо, что не поленился написать столько кода. Сейчас буду разбираться... |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Exion - если нужно сохранять эти данные в отдельный файл, то просто укажи другое имя файла при открытии, для добавления. Ну а имена файлов получай через @ARGV
Это сообщение отредактировал(а) korob2001 - 16.10.2005, 19:16 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Exion |
|
|||
|
Unregistered |
Я знаю, прогал раньше на сях нормально
|
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |