Для тех, кто потерял надежду (экономистам I курса посвящается)

Dec 16, 2014 13:21


Сегодня мы так и не добрались до сути, но для тех, кто потерял надежду, попытаюсь на маленьком примере объяснить, зачем бывает нужен Perl. Вот у нас есть данные, в которых даты записаны так:
простой скрипт и его истолкование... )

perl, преподавательское, 216

Leave a comment

Comments 18

anonymous December 16 2014, 13:15:12 UTC
У меня все равно ничего не работает, получается какой-то невразумительный график

Reply

kouprianov December 16 2014, 16:25:33 UTC
А насколько невразумительный? Он нужную переменную как дату воспринял?

Reply

anonymous December 16 2014, 18:49:08 UTC
В том-то и дело, что вроде как нет

... )

Reply

kouprianov December 16 2014, 20:37:32 UTC
Так. Получил, будем разбираться.

Reply


crazy__cucumber December 16 2014, 14:33:51 UTC
Мне кажется, что это стрельба из пушки по воробьям. То есть хорошая иллюстрация к тому, как можно использовать Perl, но плохая иллюстрация к тому, как стоит делать замены. Или во всяком случае не очень эффективная иллюстрация.

---
Исходные данные лежат в файле data.txt. При помощи обычного текстового редактора (у вас стоит Notepad++) мы открываем этот файл. Нажимаем Ctrl+H (или из меню "Поиск"-"Замена..."). Ставим галочку "Регулярные выражения".

В поле "Найти..." пишем (?<1>\d{1,2}).(?<2>\d{1,2}).(?<3>(?:\d{4}|\d{2}))
В поле "Заменить на..." \3-\2-\1

Нажимаем на "Заменить все". Вот, собственно, и все.
---

В первом примере я умышленно указал наименования групп ("1", "2", "3") с тем, чтобы читателю было легче понять логику перестановки.

Reply

kouprianov December 16 2014, 16:24:19 UTC
О, круто. Не подозревал, что Notepad++ способен на такие подвиги. Т. е. регэкспы в поиске/замене я использовал (в тех редких случаях, когда сидел под виндами), но про захват при матчинге не знал. Я просто попросил поставить его в компьютерном классе, потому что это, на вид, был единственный нормальный текстовый редактор под виндами (возможно, есть и другие, но я и на этот-то набрел случайно).

Но, в целом, это, конечно, действительно не про то, как быстрее и экономнее выполнить такую замену подручными средствами, а про то, как работает Perl на простом и понятном примере.

Reply

kouprianov December 17 2014, 13:10:55 UTC
Чтобы не стрелять из пушки, пальнул из Rогатки: http://kouprianov.livejournal.com/312958.html

Reply


manta December 16 2014, 18:02:06 UTC
$ awk -F. '{print $3"-"$2"-"$1}' data.txt > data.m.txt

Reply

kouprianov December 16 2014, 18:20:50 UTC
TMTOWTDI

И они смогут повторить это под виндами?

Reply

manta December 16 2014, 18:54:13 UTC
Лично не знаком, так что сказать не могу. Но это должны повторить:

C:\> perl -F'\.' -lane 'print join "-", reverse @F' < data.txt > data.m.txt

В Sublime Text с его поддержкой множественных курсоров можно выбирать столбцами и делать им копи-пейст. У них скринкаст на домашней странице.

Наконец, можно еще открыть файл data.txt в Экселе, как табличный, обозначив точку как разделитель колонок, после чего поменять местами колонки и добавить две новые колонки, которые заполнить минусами, а результат скопировать в Ворд.

Reply

kouprianov December 16 2014, 19:17:51 UTC
В Excel наверняка можно просто поменять формат даты. Кроме того, тут вопрос не в таком файле как таковом, а в демонстрации действия RegEx в Perl на простом и знакомом некоторым из них примере (на самом деле. конечная задача имеет более общий характер, поэтому конкретные рецепты по переформатированию даты, хоть и полезны [как возможности Notepad++, так и awk привели меня в восторг], но малоперспективны).

Reply


kilex December 16 2014, 19:55:41 UTC
очень полезный пост

Reply

kouprianov December 16 2014, 20:36:32 UTC
Смеетесь? ))

Reply

kilex December 16 2014, 20:44:23 UTC
Нет, где бы я еще за 3 минуты чтения узнал, как работать с переменными в Perl и что Notepad++ умеет регэкспы

Reply

kouprianov December 16 2014, 21:31:18 UTC
Ну, в принципе, можно было бы заглянуть в присланные мной полгода назад скрипты для преобразования EndNote в табличный формат. Хотя тут, конечно, понятнее. На всякий случай, важно понимать, что это далеко не все, что нужно и можно знать о переменных в Perl.

Reply


sophia_kasitoo December 17 2014, 12:37:38 UTC
Читаю "отголоски", как у вас там нескучно.:) Это что за курс Вы читаете? Или это кафедральный спецсеминар типа toolbox?

Reply

kouprianov December 17 2014, 13:05:30 UTC
Номинально это первый семестр научно-исследовательского семинара у экономистов-первокурсников. В программу входят (1) основы библиографии, (2) поиск научной литературы при помощи каталогов библиотек, полнотекстовых баз данных и индексов цитирования, (3) графика и простые расчеты в R, (4) верстка простых документов в TeX, (5) обработка и преобразование массивов информации с использованием регулярных выражений в скриптах Perl.

P. S. Забыл сказать, что я веду это у 192 студентов, объединенных в 6 групп. 12 пар в неделю.

Reply

sophia_kasitoo December 17 2014, 14:19:01 UTC
Звучит вкусно. Я б отдельные куски этого и сейчас послушала.:)
Цифрами я всячески впечатляюсь, угу. Также как и Вашей тягой к прекрасному вопреки адской нагрузке. 12 пар + еще какие-то курсы?
Я вела 12 пар = 5 разных курсов целиком, не знаю что хуже, читать один на большой поток или кучу разного (когда 4 из 5 надо почти с нуля ставить).

Reply


Leave a comment

Up