0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 2
1

Вывод строк файла, содержащих заданную подстроку

20.07.2014, 15:57. Показов 2659. Ответов 9
Метки нет (Все метки)

Привет всем. Недавно начал изучать perl , из хорошо знающий языков только паскаль.
Нужна такая программа чтобы она читала файл и искала в нем строки со словом "the", и выводила именно их.
Perl
1
2
3
4
5
6
7
#!/usr/bin/perl
    open(PASS, "</home/oleg/name") || die "Файл не найден!";
    $PASS=~"/the/";
    
        print $PASS;
        
    close(PASS);
Программа ничего не выводит в итоге. Можете поправить? И не только поправить желательно но и объяснить мою ошибку. Был бы еще рад если покидал бы кто полезных ссылок на статью и т.д. Не на учебник где рассказывается история о языке или как он работает, а конкретно с присутствием кода. И подробно расписано.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2014, 15:57
Ответы с готовыми решениями:

Реализовать вывод всех строк, содержащих заданную подстроку
Использовать контейнер ArrayList для создания связного списка строк. Реализовать удаление всех...

Ввод массива строк и поиск среди них строк, содержащих заданную подстроку
Необходимо сделать вывод каждой строки, содержащей подстроку, а не только первой using System;...

Найти, количество строк длины n, состоящих только из указанных символов и не содержащих заданную подстроку
Найдите, сколько существует строк заданной длины n, состоящих только из символов 'a', 'b' и 'c', и...

Получение строк, содержащих подстроку, из ОГРОМНОГО csv-файла
Как получить все строки, содержащие подстроку, из ОГРОМНОГО csv-файла?

9
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
21.07.2014, 06:58 2
Bash
1
$ perl -e 'while (<>) { print if /the/; }' /home/oleg/name
Или без Perl-а:
Bash
1
cat /home/oleg/name | grep the
А у тебя в 3 строке лишние кавычки и вообще нет операции чтения.
Почитать -- книга с верблюдом. Там есть всё.
2
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
21.07.2014, 08:07 3
Напишу, чтобы было понятнее начинающему
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!perl
 
# требует объявления переменных
use strict;
# выводит не только ошибки, но и опасные моменты
use warnings;
 
# открываем файл на чтение, если не открывается - прекращаем работу
# с выводом сообщения в консоль
open(my $in, "<", "text.txt") || die("Error open text.txt\n");
# последовательно перебираем строки файла с присвоение содержимого
# текущей строки переменной $x
foreach my $x (<$in>) {
    # проверяем, встречается ли в строке the, причём до этого
    # должно быть начало строки или не слово, а после - конец строки или
    # не слово. регистр игнорируется
    # при этом сюда не попадёт thematic, cathether и т.д., только the
    if ($x =~ /(\A|\W)the(\W|\Z)/i) {
        # если условия выполнены, выводим строку
        print $x;
    } 
}
# закрываем файл
close($in);
при входном файле вида
Код
dasdas thematic jksdh
djskj the jclkjc dajls
the jdahaj hdajkshd dhasjh
hkdshfkjsh dhfj the
hfdjhf catheter jkvklj k;lk
dhajskhd hsdjash hsadja
выводит
Код
djskj the jclkjc dajls
the jdahaj hdajkshd dhasjh
hkdshfkjsh dhfj the
Удачи.
1
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,162
21.07.2014, 08:12 4
pka, надо еще и регулярное выражение для начинающих объяснить
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
21.07.2014, 08:25 5
Цитата Сообщение от S_el Посмотреть сообщение
регулярное выражение для начинающих объяснить

попробую
Код
/(\A|\W)the(\W|\Z)/i
(\A|\W) - группа, состоящая из начала строки или символа, не являющегося словом
the - искомое слово
(\W|\Z) - группа, состоящая из символа, не являющегося словом, или конца строки
i - игнорировать регистр символов

p.s. Если при поиске используются национальные алфавиты (не латиница), то в начале программы поставить ещё и
Код
use locale;
1
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
21.07.2014, 08:30 6
Perl
1
/\bthe\b/i
делает то же самое, но проще. \b -- граница слова. И я бы использовал
Perl
1
while (my $x = <$in>) { ... }
чтобы не заглатывать весь файл, а пережёвывать построчно.
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 2
21.07.2014, 10:44  [ТС] 7
Благодарю)но доехал сделать так
Perl
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl
open ( dasd, "/home/oleg/name") || die "Файл не найден!\n";
while($dd=<dasd>)
{
    if ($dd=~ /\sthe\s/)
        {
        print $dd;
        }
}
close(dasd);
Тут как, тему закрывать или что?
0
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
21.07.2014, 11:00 8
Это
Perl
1
$dd=~ /\sthe\s/
не найдет строку
the jdahaj hdajkshd dhasjh
из-за первого пробельного символа \s, которого в этой строке нет
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11646 / 7158 / 1699
Регистрация: 25.07.2009
Сообщений: 13,115
23.07.2014, 23:12 9
Олег Гулаев, темы закрывают модераторы, если на то есть веские причины (тема перешла во флуд, в холивар или просто в перепалку между кем-то из участников), в противном случае тема просто остаётся открытой.
0
173 / 169 / 19
Регистрация: 31.08.2010
Сообщений: 573
24.07.2014, 20:28 10
Можно использовать такой однострочник
$ perl -nE 'print if /\bthe\b/' names.txt

Флаг -n работает следующим образом:
Следующий код:
perl -ne 'print 1'

эквивалентен этому:
LINE: while (defined($_ = <ARGV>)) {
print 1;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2014, 20:28
Помогаю со студенческими работами здесь

Формирование файла из имеющихся в лог-файлах строк, содержащих определённую подстроку
Доброго дня, форумчане Помогите, пожалуйста, VBS не знаю совсем Задача следующая В папке лежит...

Определить количество строку, содержащих заданную подстроку
дан файл текстовый,посчитать количество строк содержащих 'run' Помогите пожалуйста

Заменить заданную подстроку в исходной строке на другую заданную подстроку
Всем привет. Вот программа: Заменить заданную подстроку в исходной строке на другую заданную...

Pаменять заданную подстроку в исходной строке на другую заданную подстроку
Всем привет. Я тут создаю программу, которая будет заменять заданную подстроку в исходной строке на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru