Так як цей блог мій, і я встановлюю в ньому правила, вирішив урізноманітнити розробку гри іншими історіями, пов'язаними з програмуванням. :) Назва у таких історія, якщо їх буде звичайно кілька, буде відрізнятись, і вам буде відразу зрозуміло, чи ви хочете це читати чи ні. :)
Це той випадок, коли лінь - двигун прогресу. Мені на роботі дали завдання: файл у якому 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 рядків відразу.
На все про все я витратив менше години часу, замість того, щоб вручну переглядати файл. :)
*усі скріншоти занадто старі і перекладатися не будуть.