Ок. Подробно.
Есть 1000 файлов. В них в каждой строке в виде трёх чисел от 000 до 256 записаны RGB-цвета точек квадрата 500х500 точек.
Для примера:
...
232140191
017116155
183231127
050202236
241014239
203199212
120148147
143023164
117046254
006054064
098088123
100181231
111237136
198178063
040037074
200077175
005057036
...
Всего получается 250 000 строк.
Задача. Нужно найти точки с определёнными критериями и проверить точки, которые их окружают.
Допустим в координатах
x125 y358
есть чёрная точка и нужно проверить сколько ещё таких же точек есть вокруг неё. Т.е. нужно проверить квадрат 3х3 с углами в точках x124 y357 и x126 y358.
Для этого нужно найти в файле строки соответствующие этим точкам и проверить их. Важное обстоятельство в том, что при парсинге, если обнаружена искомая точка, то проверять нужно в том числе и 4 точки до которых дело ещё не дошло, и мы о них ничего не знаем.
Сначала я читал файлы с помощью
Loop, Read,
а проверял соседние точки с помощью
FileReadLine
Очень медленно.
Стал читать файл целиком с помощью
FileRead,
и проверял соседние точки с помощью
FileReadLine
Очень медленно. Я грешил на FileReadLine, и сделал иначе.
Читаю сейчас сразу файл в переменную и все строки загоняю в отдельные переменные
...
FileRead, text_file, %A_LoopFileFullPath%
Loop , Parse, text_file, `n
{
stroka%A_index% := A_LoopField
}
...
А потом уже проверяю нужные строки на соответствие условиям, используя готовые значения в пронумерованных переменных.
Долго. 4-6 секунд на файл. 1000 файлов - более 80 минут. После проверки оказалось, что основную массу времени занимает именно парсинг - 4.5 секунд.
Ничего более подходящего для этой процедуры в справке не нашёл.
Можно ли как-то ускорить сам парсинг? Может есть какие-то глобальные настройки или что-то другое?