Так как этот блог мой, и я устанавливаю в нем правила, решил разнообразить разработку игры другими историями связанными с программированием. :) Название у таких история, если их будет конечно несколько, будет отличатся, и вам будет сразу понятно, хотите ли вы это читать или нет. :)
Это тот случай, когда лень - двигатель прогресса. Мне на работе дали задание: файл в котором 84 000 строк, которые имеют особый алгоритм и последовательность. Этот файл, это карта сайта, которая содержит абсолютно все ссылки, которые есть на сайте. А нужна эта карта для индексации, что бы поисковик, Google или Яндекс и так далее, зашел на эту карту и получил абсолютно все ссылки. Что бы поисковик не переходил по каждой ссылке внутри сайта индивидуально.
Структура у этого файла следующая:
https://ВАШДОМЕН.ЮА/
2018-07-26
daily
1.0
И таким вот образом описывается каждая ссылка. То есть файл, в котором 84 000 строк, содержит 14 000 ссылок вот в таком описании, как показано выше. И так уж случилось, что по мимо нормальных ссылок, в эту карту попали и не рабочие ссылки, с теми или иными ошибками в адресе ссылки. Задача была следующая - очистить файл от поврежденных ссылок.
Первое что я сделал, это просто просмотрел файл, что бы понимать, насколько много там работы. Все поврежденные ссылки расположены по всему файлу. Было бы легко, если бы все поломанные ссылки были внизу или вверху. А так, нужно выискивать каждую поврежденную ссылку.
Радовало одно - у всех таких ссылок была одна и та же логика повреждения. Если вбить в поиск по файлу эту логику, то он выдавал 20 000 совпадений. Как бы много, и даже при помощи поиска, это бы затянулось на несколько дней.
Я начал думать, как я могу выполнить эту работу другими способами, и естественно, первое что мне пришло в голову, это написать простенькую, очень простенькую программу, которая бы прогоняла через себя файл и удаляла лишнее. И вот тут я столкнулся с другой проблемой. У меня рабочий компьютер, на котором ограничены права, и установить что-то большое, типа Delphi, я бы не смог ни при каких обстоятельствах. Говорить об этом своему начальнику я тоже не хотел, ну потому что мне показалось это не очень уместным - мол, вы мне дали задание, и я его выполню, только если мне поставят на комп Delphi. Согласитесь, во время стажировки, такое звучит ну не очень...
Я начал думать, что я могу сделать, без прав администратора, и мне пришла в голову идея установить на комп Pascal. Не тот, Turbo Pascal с синим экраном, а уже современный, Pascal ABC. И да, мне это без проблем удалось, так как обычный Pascal ABC не требует прав администратора. Есть еще версия Pascal ABC.net, она уже по круче, и даже умеет создавать независимые exe файлы ваших программ.
Но для моих нужд было достаточно любого работающего паскаля. Да, кстати, как оказалась позже, Turbo Pascal на моем компьютере не запускается, хотя я особо не старался его запустить. :) Я потратил минут 30 наверно, что бы отладить программу, пока та не начала работать без ошибок, а самое главное выполнять ту задачу, которая мне нужна.

Первый вариант программы с готовым результатом.
Пока я писал первую версию программы, начальник сказал, что там есть еще один вариант битых ссылок. У второго варианта так же как и у первого, была одинаковая логика поломки, и эта логики была даже еще проще чем у первого варианта, поэтому вычислить эти битые ссылки было еще проще. Второй вариант программы уже умел проверять правильность вводимых данных, на случай, если файл был указан не верно. Но это уже все "украшательства".

Второй вариант программы, с диалогом в отдельном окне.
Ну а теперь коротенько и понятно попытаюсь объяснить, в чем же заключается сама идея программы. Я сразу принял решение, что программа будет перезаписывать полученный результат в отдельный, новый файл, что бы исходный файл всегда оставался не тронут. Напоминаю, что каждая ссылка в файле описывается 6-тью строками, а значит, если ссылка битая, нужно удалить все 6-ть строк описания. Программа запоминает все шесть строк описания. Если в описании ошибок никаких нет, программа записывает эти шесть строк в новый файл. Если в этих шести строках есть ошибка, она их не записывает, и идет дальше, запоминая следующие шесть строк. То есть грубо говоря исходный файл читается по 6-ть строк сразу, и новый файл сохранятся тоже по 6-ть строк сразу.
На все про все я потратил меньше часа времени, вместо того, что бы вручную просматривать файл. :)