Довольно сильно сократил. Вот изменённый фрагмент.
Как-то переборщили на мой взгляд, зачем было убирать из имени файлов полное обозначение паттерна? Этим осложнили выделение имени паттерна в программах. А если потом запутаетесь от какой группы эти файлы типа 123954.exe и .v? Но дело Ваше.
Итак, в результате имеем папки "N2-31" с файлами "123459.exe" (и парными к ним .v). В приведённом .gp файле надо поправить три строки:
Код:
Было:
...
pat=externstr("dir /a-d /b /s M12-*.exe");\\Получаем в вектор список всех паттернов в текущей папке и всех подпапках
...
ff=vector(#pat,i, s=strsplit(pat[i],"\\");s[#s]);\\Отрезаем путь оставляя только имя файла, нужно лишь для статистики
...
system(strprintf("title %de%d:%s",h\step,logint(step,10),strjoin(strsplit(ff[g],"-")[2..3],"-")));\\Меняем заголовок окна на 21e34:N2-36, отрезая префикс "M12-" и номер паттерна в группе, это по желанию, на работу не влияет
...
Стало (они же на тех же местах, вторая строка заменяется на 4 строки):
...
pat=externstr("dir /a-d /b /s *.exe");\\Получаем в вектор список всех паттернов в текущей папке и всех подпапках
...
ff=vector(#pat,i, s=strsplit(pat[i],"\\");s[#s-1..#s]);\\Отрезаем путь оставляя только последнее имя папки и имя файла
ff2=vector(#ff,i, ff[i][1]);\\Имя папки запомним отдельно, для заголовка окна
for(i=1,#ff, ff[i]=strjoin(ff[i],"-"));\\Объединим папку и файл в полное имя паттерна
step10=logint(step,10);\\Вынес из цикла для ускорения
...
system(strprintf("title %de%d:%s",h\10^step10,step10,ff2[g]));\\Меняем заголовок окна на 21e34:N2-36, это по желанию, на работу не влияет
С указанной структурой папок и файлов я запустил, работает.
Далее, я предложил писать всё в один файл, для этого надо изменить одну строку:
Код:
Было:
print(ff[g],": ",w); write(concat(pat[g],".out"),w);\\Печать на экран и сохранение в файл лога .out рядом с прогой
Стало:
print(ff[g],":",w); write("Process-1.out",ff[g],":",w);\\Печать на экран и сохранение в файл лога Process-1.out, который должен быть свой (или в своей папке) для каждого потока
Имя лога разумеется может быть любым. И в любом месте диска. Но для каждого потока лог должен быть свой.
Как видно после этого и на экране и в логе будет одинаковая информация. Например такая (запустил для пары паттернов от старого комплекта):
Код:
N2-31-123456:672699725776092794004775019752512345: 12, 48, 24, 12, 24, 12, 12, 12, 12, 12, 12, 12, 24, 12, 96, valids=10
N2-31-123564:1110764675181521264825160435274109145: 48, 48, 12, 12, 96, 12, 12, 12, 6, 12, 12, 12, 96, 48, 12, valids=9
Соответственно добыть из такого файла только valids=13 и valids=14 можно легко и непринуждённо:
findstr "valids=13 valids=14" Process-1.out.
Если же захочется добыть valids=11 и valids=12 из нескольких таких файлов (например от двух потоков), то поможет команда:
type path1\Process-1.out path2\Process-2.out 2>nul | findstr "valids=11 valids=12".
Если захочется результат не на экран, а в файл Result123.txt, то добавить в конце строк переназначение вывода
> Rsesult123.txt.
Разумеется деление общих файлов лога по величине valids (и по любым другим критериям) можно оформить в один .cmd скрипт и запускать лишь его.
И findstr и type вполне работают и при запущенном счёте, останавливать его для получения статистики не нужно.