Автор Тема: Удаление строки  (Прочитано 4083 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Axion

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.web-programmer.net.ru
Удаление строки
« : 14 Декабря 2002, 00:43:17 »
Вот кусок кода:

open (FILE,">$base_autors");
@LINES=;
$SIZE=@LINES;
for ($i=0;$i<=$SIZE;$i++) {
   $_=$LINES[$i];
   if (/\\-\\|\\-$god\\-\\|\\-$tom\\-\\|\\-$nom\\-\\|\\-$sta\\-\\|\\-(.*)\\-\\|\\-(.*)\\-\\|\\-/) {
   $del="ok";
   } else {
      print FILE $_;
   }
}
close FILE;

Он по идее должен делать:
открывает файл, удаляет строку, содержащую:
-|-$god-|-$tom-|-$nom-|-$sta-|-(.*)-|-(.*)-|-
остальные строки должны остаться без изменений

Он делает:
Удаляет из файла ВСЁ


Почему так?

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление строки
« Ответ #1 : 14 Декабря 2002, 01:41:53 »
Цитировать
Почему так?
Ты очищаешь файл первой же строкой. Читай про open, sysopen.
А еще используй поиск по форуму - недавно вроде обсуждали.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Axion

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.web-programmer.net.ru
Удаление строки
« Ответ #2 : 14 Декабря 2002, 01:56:36 »
Н ведь я же делаю:
 print FILE $_;

...непонимаю

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление строки
« Ответ #3 : 14 Декабря 2002, 02:04:50 »
Если тебе лень почитать доки (я же пальцем уже ткнул!), учись отлаживать свои скрипты - проверь для начала, что находится в @LINES после второй строки - там не будет того, что ты ожидаешь.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
Удаление строки
« Ответ #4 : 14 Декабря 2002, 08:21:16 »
Axion
Цитировать
Н ведь я же делаю:
print FILE $_;


а еще ты делаешь
Цитировать
open (FILE,">$base_autors");

поэтому YA тебе тонко намекает, что открыв файл в режиме записи туды, ты первым "принтом" стираешь все содержимое тама. Ибо как сказано в мануале, открывши файл только для записи и записамши туда хоть что нибудь, да уничтожишь все содержимое файла.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн ---===STINGER===---

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://huk.ru
Удаление строки
« Ответ #5 : 03 Января 2003, 16:15:30 »
ГЫ! Точно! и ещё одно! Правельнее писать не open (FILE,">$base_autors"); А open (FILE,">",$base_autors"); так скрпт не перепутает имя файла с Аргементом, что вполне вероятно под Unix системами ....
Так написанно в Кемел Буке (Лари Уол)!:)
Когда не достигают желаемого, делают вид, что желали достигнутого.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Удаление строки
« Ответ #6 : 03 Января 2003, 16:37:45 »
---===STINGER===---
Ты бы хоть когда советы даешь проверял что пишешь.
The documentations is your friend

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Удаление строки
« Ответ #7 : 03 Января 2003, 20:30:34 »
---===STINGER===---, еще не забывай, что многие до сих пор сидят на версии 5.0 - там такое работать вообще не будет.
Литературный перевод с русского и английского на Perl. Дорого!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28