| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
#!/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 | ||
ну да, после знака равно во втором поле извлекает кодировку, в этом случае кодировка будет 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 15.5.2011, 05:39 | ||
А это уже другой вопрос))) ну момогите пожалуйста |
| Автор: arto 15.5.2011, 12:39 |
| я записал в файл строку в кодировке koi8-r. опознана она как iso-8859-1. повторяю вопрос: оно правильно работает? |
| Автор: S8ORD 16.5.2011, 09:55 | ||
да блин, iso-8859-1 это шрифт кодировки koi8-r все правильно работает, просто скажите, что переписать на перл не можете! это же Linux Console, под Windoй все иначе |
| Автор: arto 16.5.2011, 11:12 |
| "iso-8859-1 это шрифт кодировки koi8-r" -- 5 баллов! зачем переписывать на чем либо заранее неработающее решение? 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, 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 | ||
Спасибо большое)) Остальное сам додумаю |