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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Число повторений слова в тексте 
V
    Опции темы
marowak
Дата 27.6.2011, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я новичок в Perl, прошу помочь с решением несложной задачи, если возможно хотелось бы с использование for, while для более лёгкого понимания, ну и другим вариантам я естественно буду рад. 
Требуется подсчитать сколько раз встречается слово например "user" в файле "file.txt" содержимое файла типо "авраподдвыппррп user влп user овлала". 
PM MAIL   Вверх
Pfailed
Дата 28.6.2011, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Примерно так
Код

while (<FH>) {
    $cnt += () = /\buser\b/g;
}




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


Эксперт
***


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

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



perl -lne 'BEGIN{ $a = shift } foreach (split "\\W+") { $h{$_}++ } END{ print $h{$a} }' user file
PM MAIL ICQ   Вверх
afiskon
Дата 28.6.2011, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Правильно это задача решается с помощью регулярных выражений. Если вы только учите язык, для вас это будет сложновато. Лучше начните с мат части и задач попроще, типа посчитать число строк в файле, вывести содержимое файла в обратном/случайном порядке, какое-нибудь простое шифрование-дешифрование.
PM MAIL WWW   Вверх
dixoNICH
Дата 28.6.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

$file = "1.txt";
$/=\0;
open FILE, "$file";
$_ = <FILE>;
$i = 0;
$i++ while(/\buser\b/g);

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


Эксперт
***


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

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



$/=\0; -- это к чему?

Добавлено через 5 минут и 55 секунд
а, понял
PM MAIL ICQ   Вверх
marowak
Дата 28.6.2011, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо всем! помогли
PM MAIL   Вверх
SkoobyDoo
Дата 30.6.2011, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dixoNICH @ 28.6.2011,  12:57)
Код

$file = "1.txt";
$/=\0;
open FILE, "$file";
$_ = <FILE>;
$i = 0;
$i++ while(/\buser\b/g);
а я не понял :( можно пояснить 
Код

$/ = \0;

PM MAIL   Вверх
Pfailed
Дата 30.6.2011, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SkoobyDoo @ 30.6.2011,  06:30)
Цитата(dixoNICH @ 28.6.2011,  12:57)
Код

$file = "1.txt";
$/=\0;
open FILE, "$file";
$_ = <FILE>;
$i = 0;
$i++ while(/\buser\b/g);
а я не понял :( можно пояснить 
Код

$/ = \0;

Автор кода хотел с помощью оператора <> считать весь файл за 1 раз. Обычно этот оператор читает по одной строке в скалярном контексте, а строго говоря читает пока не встретит разделитель указанный в специальной переменной $/. По умолчанию это перенос строки. У меня есть подозрение, что автор хотел написать $/ = "\0", действительно нулевой байт в текстовом файле встретиться не должен и весь файл считается за раз. Однако забыв кавычки получилась ссылка на число ноль и разделителем стало нечто вроде SCALAR(0x1041968). Конечно вероятность встретить такое в обычном тексте стремится к нулю, но все же это потенциальная ошибка.
Короче говоря, правильным вариантом будет $/ = undef, это позволит за 1 раз считать любой файл целиком.



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


Шустрый
*


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

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



Pfailed, благодарю!
PM MAIL   Вверх
arto
Дата 30.6.2011, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



несколько не так:

# perldoc perlvar | less -p INPUT_RECORD_SEPARATOR
...
Setting $/ to a reference to an integer, scalar containing an
               integer, or scalar that's convertible to an integer will
               attempt to read records instead of lines, with the maximum
               record size being the referenced integer.
...
Trying to set the record size to zero or less will
               cause reading in the (rest of the) whole file.
PM MAIL ICQ   Вверх
Pfailed
Дата 30.6.2011, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ожидаемый подвох  smile 


--------------------
PM MAIL   Вверх
dixoNICH
Дата 30.6.2011, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


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

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


 




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


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

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