Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Петрович-2 Гость
|
Добавлено: Пн Ноя 08 2004 20:04 Заголовок сообщения: Вопрос PERL-специалисту |
|
|
Есть файл содержащий информацию:
красный
синий
жёлтый
Мне бы хотелось удалить красный, для этого я использую следующую конструкцию:
open (NEW,">new.txt"); # открываю пустой файл
open (OLD,"colors.txt"); # открываю файл содержащий цвета
@ARRAY_OLD=<OLD>; # помещаю содержание colors.txt в массив
$i="0";
while (<OLD>)
{
if($i ne "0") # если номер строки ( $ARRAY_OLD[$i] ) не "0" (первая строка = красный)
{
print NEW $_; # записать в новый файл
}
$i++;
}
close(OLD); # закрыть деск.
close(NEW); # закрыть деск.
rename("colors.txt","deleted.txt"); # переименовать
rename("new.txt","colors.txt"); # переименовать
Мне кажется, что эта конструкция слишком "большая", нельзя ли сделать по-проще? |
|
Вернуться к началу |
|
|
FUKS
Зарегистрирован: 14.04.2002 Сообщения: 148 Откуда: Москва
|
Добавлено: Вт Ноя 09 2004 15:06 Заголовок сообщения: Re: Вопрос PERL-специалисту |
|
|
$i="0";
$i не обязательно инициализировать нулём, тем более строковым (хотя можно).
while (<OLD>)
Пардон, при чём тут <OLD>? Он же уже считан в @ARRAY_OLD.
Как попроще: Код: |
open (OLD,"colors.txt");
@ARRAY_OLD=<OLD>;
close(OLD);
shift @ARRAY_OLD; # Удалить первый элемент (строку)
rename("colors.txt","deleted.txt");
open (NEW,">colors.txt");
print NEW @ARRAY_OLD
close(NEW); # закрыть деск.
|
Должно работать |
|
Вернуться к началу |
|
|
Петрович-2 Гость
|
Добавлено: Вт Ноя 09 2004 17:02 Заголовок сообщения: |
|
|
Большое спасибо!
Про shift не знал. |
|
Вернуться к началу |
|
|
Петрович-2 Гость
|
Добавлено: Вт Ноя 09 2004 20:48 Заголовок сообщения: |
|
|
"shift -
Удаляет первый элемент массива и возвращает его значение. Если массив пустой, то результат - неопределенность. Если аргумент опущен - обрабатывается массив @ARGV в головной программе или @_ в подпрограмме. "
источник: http://www.opennet.ru/docs/RUS/perl-maslov/func.html#125
А если мне нужно удалить четвёртую строку массива, например? |
|
Вернуться к началу |
|
|
FUKS
Зарегистрирован: 14.04.2002 Сообщения: 148 Откуда: Москва
|
Добавлено: Чт Ноя 11 2004 16:49 Заголовок сообщения: |
|
|
Петрович-2 писал(а): | А если мне нужно удалить четвёртую строку массива, например? |
Тогда splice @ARRAY_OLD,3,1; (счёт от нуля):
splice массив, смещение, длина, список
splice массив, смещение, длина
splice массив, смещение
Удаляет элементы массива, начиная со смещения и указанной длины.
Заменяет их указанным списком. Возвращает удаленный список.
Если длина не указана, удаляет все элементы списка, начиная со смещения.
Источник - citforum.ru, далее по ссылкам, не помню где именно. |
|
Вернуться к началу |
|
|
|