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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Помогите начинающему найти ошибку... 
:(
    Опции темы
XOTA6bI4
Дата 24.9.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я  начал изучать и тут как раз понадобился скрипт, который считывает построчно файл, находит строки содержащие какое-то конкретное слово и записывает эти строки в другой файл.....Я написал, но где то косяк, и я не вижу где: 
#!C:\Perl\bin\perl -w
open(OST, "ost.txt") || die;
open(NEW, ">new.txt") || die; 
@sor=<OST>;
print "Vvedite slovo "; 
$w=<STDIN>;
$z=0;
for ($i=0; $i <= $#sor; $i++)
{$a=$sor[$i]; @t=split(/ /, "$a");
for ($b=0; $b <= $#t; $b++)
{if ($t[$a] eq $w) 
{$r[$z]=$a;
$z=$z++;}}}
print NEW @r;
close(OST);
close(NEW);
Я только начал изучать перл, так что простите за возможно не самый рациональный способ выполнение задачи......а также за возможно глупый вопрос.....
PM MAIL   Вверх
nitr
Дата 24.9.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



если именно твой скрипт переделать. то вот держи:
Код

#!C:\Perl\bin\perl -w
open(OST, "ost.txt") or die $!;
open(NEW, ">new.txt") or die $!; 
print "Vvedite slovo: "; 
my $word = <STDIN>;
$word =~ s/\n|\r//;
while (<OST>) {
    print NEW $_ if $_  =~ /\b$word\b/;
}
close(NEW);
close(OST);




--------------------
PM   Вверх
amg
Дата 25.9.2006, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(XOTA6bI4 @  24.9.2006,  22:26 Найти цитируемый пост)
где то косяк, и я не вижу где:
Код

open(OST, "ost.txt") || die;
open(NEW, ">new.txt") || die; 
@sor=<OST>;
print "Vvedite slovo "; 
$w=<STDIN>;
chomp $w; # удаляем <LF><CR> из конца строки
$z=0;
for ($i=0; $i <= $#sor; $i++)
{$a=$sor[$i]; @t=split(/ /, "$a");
for ($b=0; $b <= $#t; $b++)
#{if ($t[$a] eq $w) # индекс неправильный
{if ($t[$b] eq $w) 
{$r[$z]=$a;
$z=$z++;
last; # чтобы строка не повторялась, если в ней несколько нужных слов
}}}
print NEW @r;
close(OST);
close(NEW);
А вообще лучше использовать код nitr'а 

Кстати, для решения такой задачки можно просто набрать в командной строке
Код

perl -ne "print if /\bslovo\b/" ost.txt > new.txt

 
PM MAIL   Вверх
XOTA6bI4
Дата 25.9.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

код Perl
open(OST, "ost.txt") || die;
open(NEW, ">new.txt") || die; 
@sor=<OST>;
print "Vvedite slovo "; 
$w=<STDIN>;
chomp $w; # удаляем <LF><CR> из конца строки
$z=0;
for ($i=0; $i <= $#sor; $i++)
{$a=$sor[$i]; @t=split(/ /, "$a");
for ($b=0; $b <= $#t; $b++)
#{if ($t[$a] eq $w) # индекс неправильный
{if ($t[$b] eq $w) 
{$r[$z]=$a;
$z=$z++;
last; # чтобы строка не повторялась, если в ней несколько нужных слов
}}}
print NEW @r;
close(OST);
close(NEW);


Он записывает в файл new только последнюю строчку из ost.txt, если в ней есть введенное слово, а если нет то ваще ничего не записывает. За совет с командной строкой спасибо! Не подскажешь где можно найти информацию о других командах командной строки?

Добавлено @ 14:05 
Nitr большое спасибо: то что нужно, но я бы хотел узнать, где я ошибаюсь в своем скрипте....

Добавлено @ 14:13 
Nitr как сделаь так, что бы на регистр скрипт не обращал внимания?
PM MAIL   Вверх
sergejzr
Дата 25.9.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Модератор: Название темы не отражает ее суть, или несколько вопросов в одном топе!

Ознакомьтесь с правилами форума!:

http://forum.vingrad.ru/index.php?showtopic=96391


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


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

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


 




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


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

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