JavaRush/Java блог/Архив info.javarush/Это удивительно!
artur-ant
30 уровень

Это удивительно!

Статья из группы Архив info.javarush
участников
Привет всем! Я хочу написать о том, что программирование это удивительно! Сегодня на работе, еще не программистом, мне потребовалось обработать файл от 1000 (тысячи!) сотрудников, мне необходимо было собрать по ним по всем список ПО, которое стоит у них на компах. В экселевском файле были огромные строки с большим количеством ПО, в этих строка были по разному разделены названия программ. И этих строк было 1200 (!). Когда я впервые увидел файл, я, честно говоря, испугался. Такое количество тупой обработки, копипаст отсюда сюда. ЖЕСТЬ! И тут руки сами потянулись к IDEA. Я скопировал 1200 строк из опросника (экселевская колонка со списком программ) в текстовый документ. Руки сами по себе накидали скрипт (спасибо за такое количество практики на курсе (!)). Открыть файл считать из файла все поместить в TreeSet с новым компаратором, который не учитывает регистр все вывести в другой файл. В итоге 230 строчек, которые хоть и не были уникальны совершенно, но это 230 строчек АККУРАТНО уложенного и отсортированного списка программ вместо 1200 строк слипшегося, простите меня, плохо пахнущего вещества. А так как все отсортировано, то похожие название уже рядом, и мне остается лишь немного доработать список вручную. И все это за 1600 мс. Меньше, чем за 2 секунды (!). А я бы потратил на это перелопачивание руками часа 2 или 3, я бы возненавидел всех тех нерадивых сотрудников за такие списки, проклял бы тот день, когда я сел за баранку этого пылесоса. А так 2 секунды. Я ВОСХИЩЕН! Спасибо всем тем, кто все это придумал. Множество умных людей все это создавали годами. Внутри Java огромные мощности. Фантастика!!! Спасибо создателям курса за то, что научили этому всему. Программирование РЕАЛЬНО облегчает жизнь людям. p.s. буду дальше скрипт допиливать, чтобы сделать еще несколько отчетов по по этому ( а дальше еще будет) опроснику. p.p.s. хочу для этой цели, если пойдет, освоить Apache Lucene, потому что есть еще одна задачка по поиску этих названий в базе. Поэтому, если кто захочет составить компанию, то с радостью поизучаю эту технологие в компании. Также было бы здорово поработать с наставником.
Комментарии (17)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
EvIv
Уровень 30
5 апреля 2016, 12:46
Да, это крутое ощущение. Как-то тоже пришлось логи с сервера «прочёсывать» на предмет поиска глючащих или неотвечающих датчиков. А всего датчиков несколько тысяч, шлют данные периодически с меткой времени (иногда неверной). Глючных пару сотен нашлось. Больше всего времени ушло на скачивание десятков файлов логов, остальное Java сделала за пару минут =) Хотя и скачивание, если заморочиться, можно было автоматизировать.
artur-ant
Уровень 30
5 апреля 2016, 13:52
Считаю, что это очень круто, когда мало того, что знаешь как делать, но и знаешь где применить полученные навыки и умения.
:)
Truefirefox
Уровень 40
5 апреля 2016, 06:30
В екселе такие штуки делаются через макросы. Если нужно что позаковыристее, то можно поюзать VBA.
artur-ant
Уровень 30
5 апреля 2016, 11:19
Безусловно Вы правы. Макросы, VBA. Эксель богат возможностями.

Но мне было гораздо приятней применять полученные тут знания на практике. помочь себе и своим коллегам.
К тому же я не знаю ни макросов, ни VBA.
Joysi
Уровень 41
5 апреля 2016, 11:25
В реальности такие штуки делаются тем инструментом, который в данный момент времени решает задачу быстро и с ожидаемым результатом (плюс зависит от регламента использования ПО в конкретной конторе, если он есть). Кому то удобно VBA(если у кого опыт есть), кто то на Java, а деды проведшие начало 90х на UnixV/BSD почесывая седую бороду и глотнув волшебного напитка, ухмыляясь на Perl выдадут решение за 5 секунд.
Lexw
Уровень 35
31 марта 2016, 19:39
да, я помню мне как-то понадобилось преобразовать один экселевский файл с 5-ю тысячами абонентов в другой экселевский файл, который можно было импортировать в базу данных. проблема была в том, что записи велись не очень аккуратно и многие данные были или не полные, или не подходили под шаблон. В итоге потратив полдня я на powershell написал скрипт (ох уж эти регэкспы, тогда я познал их мощь) который отсеял в один файл нормальные данные, а в другие файлы рассортировал данные по одинаковому признаку неправильности.
в общей сложности осталось около 300 «неправильных» абонентов. их распределили трем сотрудницам, которые поправили информацию (гораздо легче, когда в одно файле неправильные номера договоров, в другом не полная информация об абоненте и т.п.) за оставшиеся полдня.
artur-ant
Уровень 30
31 марта 2016, 20:57
Во во! :)
artur-ant
Уровень 30
21 марта 2016, 22:18
Очень круто находить полученным тут знаниям и умениям реально применение.
Это вдохновляет.
sergiiko
Уровень 32
21 марта 2016, 22:12
Тоже недавно отпарсил эксель документ, в котором 1-й столбец — название товара, а 700 столбцов вправо — даты за 2 года. На пересечении — остатки.
Мне нужны были остатки на 1-е число каждого месяца. Без использования VBA это было бы куча ручного ВПРа…
Решил забецать на Java, кайфонул :-)
Кстати, ты в блокнот мог не копировать, а сохранить файл в CSV через «Сохранить как...»
artur-ant
Уровень 30
21 марта 2016, 22:18
Да, да.
Я парсил CSV файл, когда работал со всем файлом. Отдельно считывал данные сотруднико в в объекты, составлял списки этих объектов, извлекал список софта, производил «нечеткий» поиск в базе.
Получилось не особо, но поиск работал, хоть и не гугл :):):)
Joysi
Уровень 41
21 марта 2016, 21:46
Это полезно, что находятся реальные задачи, которые убивают 2х зайцев: дополнительно совершенствовать Java и попутно решив проблему. Это здорово и приятно применить недавно полученные знания, чего скрывать.
artur-ant
Уровень 30
21 марта 2016, 22:16
Вот вот.
Я спецом напросился на подобного рода задачи.
Я увидел задачу, над которой трудились другие, проверяя вручнуюи используя какие-то средства Экселя. Посмотрел на это и решил соорудить программу.
Я, признаться честно, не хотел также париться.
И практика нужна, коль на работе решать задачи не получается, так хоть буду кодить «официально» :)

Изначально я «пилил» более крупное приложение на нечеткий поиск. Я тогда не знал про Apache Lucene и изучал технологию поиска, индексации, ранжирования и «велосипедил» сам.
Получился худо-бедный поиск по базе названий. Но то, как пользователи порой называют программы вместо правильного названия меня убивало )
AndreGold
Уровень 28
21 марта 2016, 19:16
не знал что на Java пишут скрипты

И вообще есть подозрение, что это можно было сделать средствами Еxcel не прибегая к Java.
artur-ant
Уровень 30
21 марта 2016, 19:17
В принципе, какая разница, пишут скрипты или нет :)
Самое главное что в жизни помогло.
Говоря скрипт, я подразумеваю некий небольшой набор команд без особой «интеллектуальной» логики.

С библиотекой для Excel еще не пробовал работать. Apache POI, знаю называется.
К сожалению за программирование мне пока что не платят, необходимо было сделать работу по обработке данных.
artur-ant
Уровень 30
21 марта 2016, 19:23
Исходные строки:
Название 1 Название 2 Название 3 Название 4
Название 1; Название 2; Название 3; Название 7
Название 5 Название 6

Название 3, Название 2, Название 1

Итог:
Название 1
Название 2
Название 3
Название 4
Название 5
Название 6
Название 7

Дубликаты тут не удалишь :)
В том то и дело, что данные от сотрудников огогогого какие «качественные» и форматированные.
valera7979
Уровень 31
21 марта 2016, 21:57
тут важно что быстрее. если знаешь как на джава то почему бы и нет. а так еще нужно смотреть как там в экселе. и не всегда есть человек который так раз и кинул ссылку на годный мануал. а в гугле бывает что смотришь а там все не то. как говорится кто в чем джедай))
artur-ant
Уровень 30
21 марта 2016, 22:12
true
:)