Сегодня мы так и не добрались до сути, но для тех, кто потерял надежду, попытаюсь на маленьком примере объяснить, зачем бывает нужен Perl. Вот у нас есть данные, в которых даты записаны так: ( простой скрипт и его истолкование... )
Мне кажется, что это стрельба из пушки по воробьям. То есть хорошая иллюстрация к тому, как можно использовать 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") с тем, чтобы читателю было легче понять логику перестановки.
О, круто. Не подозревал, что Notepad++ способен на такие подвиги. Т. е. регэкспы в поиске/замене я использовал (в тех редких случаях, когда сидел под виндами), но про захват при матчинге не знал. Я просто попросил поставить его в компьютерном классе, потому что это, на вид, был единственный нормальный текстовый редактор под виндами (возможно, есть и другие, но я и на этот-то набрел случайно).
Но, в целом, это, конечно, действительно не про то, как быстрее и экономнее выполнить такую замену подручными средствами, а про то, как работает Perl на простом и понятном примере.
В Sublime Text с его поддержкой множественных курсоров можно выбирать столбцами и делать им копи-пейст. У них скринкаст на домашней странице.
Наконец, можно еще открыть файл data.txt в Экселе, как табличный, обозначив точку как разделитель колонок, после чего поменять местами колонки и добавить две новые колонки, которые заполнить минусами, а результат скопировать в Ворд.
В Excel наверняка можно просто поменять формат даты. Кроме того, тут вопрос не в таком файле как таковом, а в демонстрации действия RegEx в Perl на простом и знакомом некоторым из них примере (на самом деле. конечная задача имеет более общий характер, поэтому конкретные рецепты по переформатированию даты, хоть и полезны [как возможности Notepad++, так и awk привели меня в восторг], но малоперспективны).
Ну, в принципе, можно было бы заглянуть в присланные мной полгода назад скрипты для преобразования EndNote в табличный формат. Хотя тут, конечно, понятнее. На всякий случай, важно понимать, что это далеко не все, что нужно и можно знать о переменных в Perl.
Номинально это первый семестр научно-исследовательского семинара у экономистов-первокурсников. В программу входят (1) основы библиографии, (2) поиск научной литературы при помощи каталогов библиотек, полнотекстовых баз данных и индексов цитирования, (3) графика и простые расчеты в R, (4) верстка простых документов в TeX, (5) обработка и преобразование массивов информации с использованием регулярных выражений в скриптах Perl.
P. S. Забыл сказать, что я веду это у 192 студентов, объединенных в 6 групп. 12 пар в неделю.
Звучит вкусно. Я б отдельные куски этого и сейчас послушала.:) Цифрами я всячески впечатляюсь, угу. Также как и Вашей тягой к прекрасному вопреки адской нагрузке. 12 пар + еще какие-то курсы? Я вела 12 пар = 5 разных курсов целиком, не знаю что хуже, читать один на большой поток или кучу разного (когда 4 из 5 надо почти с нуля ставить).
Comments 18
Reply
Reply
( ... )
Reply
Reply
---
Исходные данные лежат в файле 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
Но, в целом, это, конечно, действительно не про то, как быстрее и экономнее выполнить такую замену подручными средствами, а про то, как работает Perl на простом и понятном примере.
Reply
Reply
Reply
И они смогут повторить это под виндами?
Reply
C:\> perl -F'\.' -lane 'print join "-", reverse @F' < data.txt > data.m.txt
В Sublime Text с его поддержкой множественных курсоров можно выбирать столбцами и делать им копи-пейст. У них скринкаст на домашней странице.
Наконец, можно еще открыть файл data.txt в Экселе, как табличный, обозначив точку как разделитель колонок, после чего поменять местами колонки и добавить две новые колонки, которые заполнить минусами, а результат скопировать в Ворд.
Reply
Reply
Reply
Reply
Reply
Reply
Reply
P. S. Забыл сказать, что я веду это у 192 студентов, объединенных в 6 групп. 12 пар в неделю.
Reply
Цифрами я всячески впечатляюсь, угу. Также как и Вашей тягой к прекрасному вопреки адской нагрузке. 12 пар + еще какие-то курсы?
Я вела 12 пар = 5 разных курсов целиком, не знаю что хуже, читать один на большой поток или кучу разного (когда 4 из 5 надо почти с нуля ставить).
Reply
Leave a comment