Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Строки Перл


Автор: S8ORD 13.5.2011, 08:24
Все это делается в Linux консоли, с Шеллом вот я разобрался, а перл понять, что-то не могу, буду очень благодарен за помощь!))
Подсчитать количество строк, содержащих заданное слово в заданном файле. Если файл имеет кодировку, отличную от заданной, подсчет не производить, а просто вывести сообщение об этом.

Формат вызова:

  команда слово кодировка файл1 файл2 файлN

Автор: arto 13.5.2011, 12:13
что такое "кодировка" ?
и что такое "слово" ?

Добавлено через 7 минут и 45 секунд
а еще проще -- напишите ваше решение на шелле

Автор: S8ORD 14.5.2011, 15:00
Цитата(arto @ 13.5.2011,  12:13)
что такое "кодировка" ?
и что такое "слово" ?

Добавлено @ 12:21
а еще проще -- напишите ваше решение на шелле

#!/bin/bash
slovo=$1 shift //извлекается заданное слово из команды
kods=$1 shift // извлекается заданная кодировка из команды
sum=0
while [ $# -ne 0 ] //организуется цикл для выделения параметров команды
do                        //за каждую итерацию, т.е. происходит обработка файлов
 file=$1                //в этом цикле
 coding=`file -i "$file" | cut -f2 -d'='` //извлекается кодировка файла
 if [ "$coding" = "$kods" ]
 then
   for value in `cat $file` //подсчет слов в файле
   do
     if [ "$value" = "$slovo" ]
     then
      sum=$(($sum + 1))
     fi
   done
   echo "В Файле $file - $sum слов соответствующих слову $slovo!!"
 else echo "Файл $file имеет кодировку $coding отличную от должной $kods!!!"
 fi
 shift
done


//Вот, такой скрипт на Shell=)))

Автор: arto 14.5.2011, 15:28
а оно правильно работает?

# cat > test
Русский Текст
^d
# file -i test
test: text/plain; charset=iso-8859-1
#

Автор: S8ORD 14.5.2011, 16:42
Цитата(arto @ 14.5.2011,  15:28)
а оно правильно работает?

# cat > test
Русский Текст
^d
# file -i test
test: text/plain; charset=iso-8859-1
#

ну да, после знака равно во втором поле извлекает кодировку, в этом случае кодировка будет iso-8859-1
а формат вызова команды будет
команда iso-8859-1 слово файл1 файл2 файл3
в файлах будет искать слово, если они кодировку имеют не равную iso-8859-1 то ничего искать не будет, а выведет соответствующее сообщение!

ну или для этого конкретного случая будет: 
# myscript iso-8859-1 Русский test 
Выдаст сообщение В Файле test - 1 слов соответствующих слову Русский!!

Ну так на Перл поможете сделать данное задание???

Автор: shamber 14.5.2011, 22:37
Цитата(S8ORD @  14.5.2011,  16:42 Найти цитируемый пост)
Ну так на Перл поможете сделать данное задание???

а зачем? оно же у вас на шелле работает.

Автор: S8ORD 15.5.2011, 05:39
Цитата(shamber @ 14.5.2011,  22:37)

а зачем? оно же у вас на шелле работает.

А это уже другой вопрос)))  ну момогите пожалуйстаsmile)))

Автор: arto 15.5.2011, 12:39
я записал в файл строку в кодировке koi8-r.
опознана она как iso-8859-1.

повторяю вопрос: оно правильно работает?

Автор: S8ORD 16.5.2011, 09:55
Цитата(arto @ 15.5.2011,  12:39)
я записал в файл строку в кодировке koi8-r.
опознана она как iso-8859-1.

повторяю вопрос: оно правильно работает?

да блин, iso-8859-1 это шрифт кодировки koi8-r все правильно работает, просто скажите, что переписать на перл не можете!
это же Linux Console, под Windoй все иначе

Автор: arto 16.5.2011, 11:12
"iso-8859-1 это шрифт кодировки koi8-r" -- 5 баллов! smile

зачем переписывать на чем либо заранее неработающее решение?

ps:
# cat | iconv -f koi8-r -t cp1251 > test
Русский Текст
# file -i test
test: text/plain; charset=iso-8859-1
# cat | iconv -f koi8-r -t iso-8859-5 >| test
Русский Текст
# file -i test
test: text/plain; charset=iso-8859-1
# cat | iconv -f koi8-r -t cp855 >| test
Русский Текст
# file -i test
test: text/plain; charset=iso-8859-1
#

cp1251, iso-8859-5, cp855 это тоже iso-8859-1 ?
может в консерватории что подправить?

Автор: S8ORD 16.5.2011, 15:58
Цитата(arto @ 16.5.2011,  11:12)
"iso-8859-1 это шрифт кодировки koi8-r" -- 5 баллов! smile

зачем переписывать на чем либо заранее неработающее решение?

ps:
# cat | iconv -f koi8-r -t cp1251 > test
Русский Текст
# file -i test
test: text/plain; charset=iso-8859-1
# cat | iconv -f koi8-r -t iso-8859-5 >| test
Русский Текст
# file -i test
test: text/plain; charset=iso-8859-1
# cat | iconv -f koi8-r -t cp855 >| test
Русский Текст
# file -i test
test: text/plain; charset=iso-8859-1
#

cp1251, iso-8859-5, cp855 это тоже iso-8859-1 ?
может в консерватории что подправить?

Чувак, забей!!! Просто переведи на Перл и все!! и пофиг то, что скрипт определяет кодировку текста))) мне лабу защитить надо последнюю))

Автор: arto 16.5.2011, 16:28
perldoc Lingua::DetectCharset

зачитывание вслух документации -- 50€/hour.
написание за кого-то курсовых, дипломов етц -- приравнивается к зачитыванию вслух документации.

Автор: DBegunkov 16.5.2011, 17:05
Насчет кодировки я не понял, а остальное можно, например, так:
#!/usr/local/bin/perl
my $search_word=shift (@ARGV);
my $kol_word=0;
while (my $name_file=shift (@ARGV))
    {
    open (FILE ,"<:encoding(cp1251)",$name_file);
    while (<FILE>)
        {
        while (/\b$search_word\b/g)
            {$kol_word++;}
        }
    close (FILE);
    }
    print "Word= $search_word kol=$kol_word \n";

Автор: S8ORD 16.5.2011, 21:12
Цитата(DBegunkov @ 16.5.2011,  17:05)
Насчет кодировки я не понял, а остальное можно, например, так:
#!/usr/local/bin/perl
my $search_word=shift (@ARGV);
my $kol_word=0;
while (my $name_file=shift (@ARGV))
    {
    open (FILE ,"<:encoding(cp1251)",$name_file);
    while (<FILE>)
        {
        while (/\b$search_word\b/g)
            {$kol_word++;}
        }
    close (FILE);
    }
    print "Word= $search_word kol=$kol_word \n";

Спасибо большое)) Остальное сам додумаюsmile)) +1))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)