Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как найти нужную строчьку и работать с ней? 
:(
    Опции темы
Dima85
Дата 23.1.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Добрый день. 
Есть файл с таким содержимим:
Код

3;dsfsdfe;fdsfe;dfdfsdfe
2;df sdf d;sdf df s;dfdsfsdf
1;df sdfsd;dfdsd;sdfsdf
5;dsfsdfdsf;dsfds;dfee
4;dfdffd;dfsdfsdf;sdfsdf


Покажите пожалуйста на примере как найти допустим в файле $temp[0]; равный 4 и изменить в нем $temp[2]?
Надеюсь понимаете о чем я, я не знаю как понятней объяснить.


Это сообщение отредактировал(а) Dima85 - 23.1.2009, 15:17
PM MAIL   Вверх
ginnie
Дата 23.1.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Если файл небольшой

Код

open FILE, '<', 'filename.txt' or die "Can't open file: $!";
my @content = <FILE>;
close FILE;

open FILE, '>', 'filename.txt' or die "Can't open file: $!";
for my $line (@content) {
   $line =~ s/[\r\n]+$//;
   my @fields = split(/;/, $line);
   $fields[2] = 'new value' if ($fields[0] == 4);
   print join(';', @fields), $/;
}
close FILE;



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Dima85
Дата 23.1.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Спасибо. В файле 2 000 строк. Каждая из них не более 300 символов. Это маленький файл или большой по вашим меркам?
PM MAIL   Вверх
amg
Дата 23.1.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Dima85 @  23.1.2009,  13:56 Найти цитируемый пост)
Надеюсь понимаете о чем я, я не знаю как понятней объяснить.
ginnie, у Вас, несомненно, есть телепатические способности! Я, например, ничего не понял. smile 
PM MAIL   Вверх
ginnie
Дата 23.1.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



amg, просто повезло  smile 

Dima85, вариант обработки выбирать Вам, я бы не стал забивать память и сразу обрабатывал бы строки в цикле чтения, результат сохранял бы во временный файл, в конце заменил исходный файл временным.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
amg
Дата 23.1.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Dima85 @  23.1.2009,  14:22 Найти цитируемый пост)
Это маленький файл или большой по вашим меркам?

"Маленьким" можно считать файл, размер которого значительно меньше объема оперативной памяти. По нынешним временам файл  размером 2 000 х 300 = 0.6 М -- маленький.
PM MAIL   Вверх
Dima85
Дата 23.1.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Спасибо
PM MAIL   Вверх
Dima85
Дата 23.1.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Хм, предложенный скрипт почему-то опусташает полностью весь файл. В чем может быть дело?
PM MAIL   Вверх
ginnie
Дата 23.1.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Dima85, в скрипте ошибка, вместо 

Код

print join(';', @fields), $/;


надо

Код

print FILE join(';', @fields), $/;



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
amg
Дата 23.1.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Dima85 @  23.1.2009,  15:14 Найти цитируемый пост)
Хм, предложенный скрипт почему-то опусташает полностью весь файл. В чем может быть дело?
Попробйте заменить 
print join(';', @fields), $/;
на 
print FILE join(';', @fields), $/;

PM MAIL   Вверх
Dima85
Дата 23.1.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Помогло, спасибо. А почему так? Это зависит от версии Perl?
PM MAIL   Вверх
ginnie
Дата 23.1.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(Dima85 @  23.1.2009,  15:26 Найти цитируемый пост)
А почему так? Это зависит от версии Perl?

От версии не зависит. В исходном скрипте я допустил ошибку, по невнимательности, т.к. писал в форум и не проверял.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
amg
Дата 23.1.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Dima85 @  23.1.2009,  15:26 Найти цитируемый пост)
А почему так? Это зависит от версии Perl?
Нет, не зависит от версии. Совершенно очевидно, у ginnie была тривиальная описка.

Функция print, если ей не указать FH, в который печатать, печатает в умолчаемый. А это STDOUT (т.е. на экран/в консоль).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.