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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> inplace edit 
:(
    Опции темы
Cyr
Дата 15.10.2015, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть файл со строками из 2-х чисел в каждой строке разделёнными пробелом: значение1 и значение2.
Надо сделать простую процедуру по записи/редактированию значений:
1. Если значение1 есть и значение2 совпадают с переданными в процедуру, то ничего не делать.
2. Если значение1 есть, а значение2 не совпадают с переданным в процедуру, то переписать значение2.
3. Если значение1 нет в файле, то записать новую строку со значением1 и значением2.


Это сообщение отредактировал(а) Cyr - 15.10.2015, 11:55
PM MAIL   Вверх
Cyr
Дата 15.10.2015, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я попробовал такую процедуру:
Код

sub writedata{
    my $writevalue1=shift;
    my $writevalue2=shift;
    # открываем файл
    open DATA ,'>>', $filename or die "Невозможно открыть $filename: $!";
    # читаем построчно из файла
    while (<DATA>) {
        chomp; # удаление символа конца строки
        # теперь в $_ есть строка и мы ее разделяем на переменные
        my ($value1, $value2) = split(/ /);
        if (($value1==$writevalue1) & ($value2==$writevalue2)) { # п.1. задачи
            return;
        } elsif ($value1==$writevalue1){ # п.2. задачи
            print DATA $writevalue1, " ", $writevalue2, "\n";
            return;
        }
    }
    print DATA $writevalue1, " ", $writevalue2, "\n"; # п.3. задачи
    close DATA;
}

Но она п.2. условия задачи не выполняет - пишет новую строку, а не редактирует существующую.

Это сообщение отредактировал(а) Cyr - 15.10.2015, 11:51
PM MAIL   Вверх
noize
Дата 16.10.2015, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


5.18.2
*


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

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



задача поставлена некорректно
Цитата

1. Если значение1 есть и значение2 совпадают с переданными в процедуру, то ничего не делать.

Что значит "ничего не делать"? Вы не будете писать в тот же самый файл из которого читаете. Нужно сделать tmp-файл, в него записать обработанные данные и потом им подменить исходный файл. Под "ничего не делать" имеется ввиду, что строки должны остаться в файле неизменными?
Цитата

2. Если значение1 есть, а значение2 не совпадают с переданным в процедуру, то переписать значение2.
3. Если значение1 нет в файле, то записать новую строку со значением1 и значением2.

Кто на ком стоял? Что такое значение1 и значение2? что передаётся в процедуру? кого с чем сравнивать и что куда в итоге записывать? Непонятно smile 
PM MAIL   Вверх
arto
Дата 19.10.2015, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у вас ошибка в open (perldoc perlopentut),
и не передёргивается файловый указатель (perldoc -f seek)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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