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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не открывается файл для записи 
:(
    Опции темы
emian
Дата 26.8.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте всем!
Пишу простейший скрипт, который берет по строчке из одного файла, и заносит эти строчки в новый файл, за исключением указанных в условии.
Сам скрипт вот:
Код

sysopen(input,"input.txt",O_RDONLY) || die;
sysopen(output,"output.txt",O_WRONLY|O_TRUNC|O_CREATE) || die;

while ($l = <input>)
{
    if (!($l[0]=="¦" && $l[1]==" " && $l[3]==" " && $l[10]==" "))
    {
        print output $l."\n";
    }
}

close(input);
close(output);

Файл input.txt лежит рядом со скриптом. output.txt по идее должен создаться.
В консоле получается вот что:
Код

----------------------------------------------
 Welcome to Strawberry Perl Portable Edition!
 * URL - http://www.strawberryperl.com/
 * see README.portable.TXT for more info
----------------------------------------------
Perl executable: S:\perl\perl\bin\perl.exe
Perl version   : 5.12.1

Microsoft Windows [Версия 5.2.3790]
(С) Корпорация Майкрософт, 1985-2003.

S:\perl>perl ex.pl
Died at ex.pl line 2.

S:\perl>

То ли я чего-то не понимаю, то ли...
Прошу помощи...
PM MAIL   Вверх
Jimy
Дата 26.8.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



O_CREAT

без "E" в конце

Добавлено через 6 минут и 48 секунд
И, кстати, вот эта конструкция работать не будет:

Код

 if (!($l[0]=="¦" && $l[1]==" " && $l[3]==" " && $l[10]==" "))

PM   Вверх
dva300
Дата 26.8.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



use strict; - и откроете для себя массу интересных вещей



Это сообщение отредактировал(а) dva300 - 26.8.2010, 12:21
--------------------
Участник движения Культура Вождения
PM   Вверх
emian
Дата 27.8.2010, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ух... Давно на перле не писал, подзабыл...
Поменял на CREAT и изменил условие...
Код
sysopen(input,"input.txt",O_RDONLY) || die;
sysopen(output,"output.txt",O_WRONLY|O_TRUNC|O_CREAT) || die;

while ($l = <input>)
{
    if (length($l)>=11)
    {
        if (substr($l,0,1)=="¦" && substr($l,2,1)==" " && substr($l,10,1)==" ")
        {
            print output "DELETED\n";
        }
        else
        {
            print output $l."\n";
        }
    }
    else
    {
        print output $l."\n";
    }
}

close(input);
close(output);

Но результат оказался тот же...
Код

S:\perl>perl ex.pl
Died at ex.pl line 2.

PM MAIL   Вверх
Jimy
Дата 27.8.2010, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не могу сказать в чем дело. Строка №2 корректная. Возможно это связано с какими-то ограничениями доступа для пользователя создающего файл.
Попробуйте открывать файлы с помощью функции open.

Это все равно не будет работать корректно:
Код

if (substr($l,0,1)=="¦" && substr($l,2,1)==" " && substr($l,10,1)==" ") {

}


В изначальной строке было 2 ошибки, Вы исправили одну из них smile
Для проверки равенства строк используется оператор "eq", а не "==".
"==" - для проверки равенства чисел

Для поиска строк по шаблону обычно используют регулярные выражения.
Это регулярное выражение найдет нужные строки (первый символ "|", третий и одиннадцатый - пробелы):
Код

if ($l =~ /^\|.\s.{7}\s/) {

}


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


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

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


 




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


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

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