Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Perl


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4018
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1762
∙ повысить рейтинг »
Хватов Сергей
Статус: Академик
Рейтинг: 608
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Perl (Перл)

Номер выпуска:144
Дата выхода:13.02.2013, 09:30
Администратор рассылки:Коцюрбенко Алексей aka Жерар (Советник)
Подписчиков / экспертов:42 / 10
Вопросов / ответов:3 / 8

Консультация # 51911: Здравствуйте эксперты, у меня следующее: Программа должна считывать несколько слов в массив, затем выдать количесво элементов, и затем, распечатать все введенные элементы... для заполнения массива я использую оператор <STDIN>, это у меня получается, так же получается вывести все элементы массива на экран... но вот подсчитать колличест...


Консультация # 52308: Здравствуйте. Можно ли и как в Perl получить данные о фотографии в формате jpeg как это делает программа ACDSee при выборе свойств фото в контекстном меню(дата и время и название камеры которой были сделаны фото) ? Спасибо...
Консультация # 71939: Никак не пойму, как обрабатывать символы в строке. Предположим есть: $str = "hello, perl"; Как в цикле пробежатся по всем символам и сделать с ними что-нибудь ? Я естествено попробовал тыкнуть пальцем в небо и написал так: $str[2] - естественно perl лишь ответил молчанием, не Си все таки. Конкретно решаю такую задачу. ...

Консультация # 51911:

Здравствуйте эксперты, у меня следующее:
Программа должна считывать несколько слов в массив, затем выдать количесво элементов, и затем, распечатать все введенные элементы...
для заполнения массива я использую оператор <STDIN>, это у меня получается, так же получается вывести все элементы массива на экран... но вот подсчитать колличество слов в массиве не получается, насколько мне известно это делается путем присваевания скалярной переменной всего массива (то бишь массив в скалярном контексте), но вот у меня, после того как я введу 5 слов, пишет что в массиве только 2, почему??? (заканчиваю ввод слов путем нажатия ctr+z, т.е. конец строки) листинг примерной программки в приложениии.
Всем спасибо за внимание.

Дата отправки: 12.08.2006, 02:22
Вопрос задал: Lperw
Всего ответов: 3
Страница онлайн-консультации »


Консультирует dianacode:

Доброе время суток, Lperw

эта проблема - не проблема - подскажите перл как обращаться с переменной - ответьте ему что это скаляр - а именно :

$q=@words+0;

или

$q=$#words;

вот и всё

с уважанием, удачи

Консультировал: dianacode
Дата отправки: 12.08.2006, 02:40
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует -OC- (Специалист):

Здравствуйте, Lperw!
начнем с простого - с размера массива.
вы делаете правильно , т.е. присвоение скаляру массива всегда дает его размер.
но более "красивым" считается использование функции scalar.
$q = scalar(@words);
Но ошибка у вас скорее всего не в получении размера массива, а в его формировании.
А почему вы не пользуетесь отладкой? Я не говорю об встроенном отладчике, но хотя бы контролировать значения вводимые с STDIN , а тем более в массив.После ввода просто выведите построчно ваш массив( т.е. каждый элемент массива - новая строка) и вы поймете почему у вас размер не совпадает с требуемым.
ИМХО ошибка у вас именно вот здесь - @words=;. Так не делается. Вы должны четко знать каким образом будет осужествлятьсяя ввод и что будет являться элементом массива т.е. при вводе слов что будет разделять их на элементы массива пробелы или перевод строки.
Если каждое слово будет вводиться с новой строки, то для этого лучший вариант такой(см. приложение). Если же в каждой строке будет по нескольку слов и их так же надо разбить на элементы, то приведенный код нужно только немного модифицировать с учетом разбиения строки на подэлементы , используя split с соответствующим разделителем вместо $_ в push. См. вариант 2 в приложении . Этот вариант более универсален и его можно модифицировать под свои нужды. Он работает когда каждый элемент массива- новая строка и отделенные друг от друга пробелом слова в строке. Т.е. при таком вводе :
hfwfhoei
fhdslhf hfskdjhfsd sedfuefj
hfsih dihfsdi
это будет 6 элементов.

надеюсь что об"яснил понятно. Извиняюсь за некоторую сумбурность.

Приложение:

Консультировал: -OC- (Специалист)
Дата отправки: 12.08.2006, 14:09
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Хватов Сергей (Академик):

Здравствуйте, Lperw!

words=<STDIN>;
считывает весь файл, разбивая его на строки. Так что вы считаете не слова, а строки.
Попробуйте так:

Приложение:

Консультировал: Хватов Сергей (Академик)
Дата отправки: 14.08.2006, 10:21
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 52308:

Здравствуйте.
Можно ли и как в Perl получить данные о фотографии в формате jpeg как это делает программа ACDSee при выборе свойств фото в контекстном меню(дата и время и название камеры которой были сделаны фото) ?
Спасибо

Дата отправки: 16.08.2006, 11:36
Вопрос задал: Sergi
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Хватов Сергей (Академик):

Здравствуйте, Sergi!

Да. Есть модуль Image::ExifTool.
Берется, как и любой модуль, на CPAN (http::/www.cpan.org/)
в нем помимо библиотеки есть утилита exiftool

Консультировал: Хватов Сергей (Академик)
Дата отправки: 16.08.2006, 11:54
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует dianacode:

Доброе время суток, Sergi

несколько нестандартными средствами, но можно с помощью ImageMagick (сейчас многие хостеры устанавливают )

вот здесь возможности и пример
http://imagemagick.org/script/perl-magick.php#get-attribute

с уважением, удачи

Консультировал: dianacode
Дата отправки: 16.08.2006, 19:16
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 71939:

Никак не пойму, как обрабатывать символы в строке.
Предположим есть:
$str = "hello, perl";
Как в цикле пробежатся по всем символам и сделать с ними что-нибудь ?
Я естествено попробовал тыкнуть пальцем в небо и написал так: $str[2] - естественно perl лишь ответил молчанием, не Си все таки.
Конкретно решаю такую задачу. Есть текст, в нем данные разбиты в группы по 3 байта, первые два байты мне нужно обработать особым образом, 3-ий вообще не нужен.
Собственно это все мелочи, которые решаются ручками в течении нескольких минут, я не пойму как обращаться к отдельным символам в строке.

Дата отправки: 21.01.2007, 16:08
Вопрос задал: Torsten
Всего ответов: 3
Страница онлайн-консультации »


Консультирует -OC- (Специалист):

Здравствуйте, Torsten!
Обрабатывать строку посимвольно можно обработав ее ф-цией split с пустым шаблоном. Т.е. @str = split(//,$str); вернет вам список из отдельных символов строки, а дальше уже обрабатывайте список как вам нужно. Но это не самый хороший вариант решения задачи.
Если приведете пример текста (хотя бы одну строку) который надо обработать, то тогда можно найти более "красивый" вариант решения.

Консультировал: -OC- (Специалист)
Дата отправки: 21.01.2007, 16:35
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Хватов Сергей (Академик):

Здравствуйте, Torsten!

Помимо уже упомянутого в ответах split можно использовать unpack (и pack для обратной операции) Примерно как в приложении, хотя с описанием формата я могу и ошибиться - нечасто его использую

Ещё можно использовать s//

Приложение:

Консультировал: Хватов Сергей (Академик)
Дата отправки: 21.01.2007, 16:50
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Duke:

Здравствуйте, Torsten!
Одна из самых сильных сторон Perl это регулярные выражения
Смотри приложение и поставляемую с перлом справку - там всё разжовано

Приложение:

Консультировал: Duke
Дата отправки: 22.01.2007, 08:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное