Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > inplace edit


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

Автор: Cyr 15.10.2015, 11:45
Я попробовал такую процедуру:
Код

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. условия задачи не выполняет - пишет новую строку, а не редактирует существующую.

Автор: noize 16.10.2015, 00:15
задача поставлена некорректно
Цитата

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

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

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

Кто на ком стоял? Что такое значение1 и значение2? что передаётся в процедуру? кого с чем сравнивать и что куда в итоге записывать? Непонятно smile 

Автор: arto 19.10.2015, 08:26
у вас ошибка в open (perldoc perlopentut),
и не передёргивается файловый указатель (perldoc -f seek)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)