Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: stadon on July 30, 2020, 03:13:09 PM

Title: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on July 30, 2020, 03:13:09 PM
Всем доброго времени суток Уважаемые!

Написал скрипт, ну точнее собрал по частям с того что нашел на форуме, так как не особо соображаю в алгоритмах (
Проблема в том что файлы txt в среднем от 80 до 100 метров, и весь этот процесс очень туго идет, хотя тестировал на файлах до 2-3 метров - все летит как ракета )

Подскажите пожалуйста как можно это все безобразие оптимизировать и ускорить ?
Или как вариант чтение txt файлов с определенной папки по очереди (add.txt, add2.txt, ... add100.txt) к примеру.

Получилось вот что:

Code: (clickermann) [Select]
FOR ($a=0, $a<1)    // 1 кусок цикла
   
   WAITMS(10)
   LCLICK(1011,360)
   
END_CYC

LCLICK(344,705)

FOR ($i=0, $i<150) // 2 кусок
   
   INC ($num,1)    // нарастающая переменная, строка +1
   
   IF($num > TFCOUNT ("add.txt"))     // файл со строками
   HALT        // конец скрипта
   END_IF
   
   $b = TFREAD ("add.txt", $num)
   //TFDELETE("add.txt", 1)  - неактуально, очень замедляет процесс
   
   INC($e,1)  // нарастающая переменная, считает количество строк в логе
   
   TOCLIP(strconcat("Привет ",$b))
   
   KEYDOWN (#CTRL)
   KEYDOWN (#V)
   KEYUP (#V)
   KEYUP (#CTRL)
   
   KEYPRESS(#ENTER)
   WAITMS(5)
   
   LOGWRITE ($e)     // лог
   
END_CYC

Спасибо за Ваше внимание, буду очень благодарен за помощь!
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: ya12 on July 30, 2020, 03:56:32 PM
Большие файлы с SSD быстрее читаются или с виртуального диска в оперативной памяти
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on July 30, 2020, 04:08:40 PM
Большие файлы с SSD быстрее читаются или с виртуального диска в оперативной памяти

Если я правильно понял вопрос, то файлы читаются с SSD (на вооружении имеется 2 SSD по 1.5 ТБ), потому что я далек от "Виртуального диска в оперативной памяти", - даже не представляю как это реализовать (
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: ya12 on July 30, 2020, 08:06:44 PM
https://yadi.sk/d/twaOcrnqrgPyGw
SoftPerfect RAM Disk
 
Этой программой можно сделать виртуальный диск в оперативной памяти. Выглядит, как обычный диск с буквой, главное что бы оперативной памяти хватил.

Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on July 30, 2020, 09:17:47 PM
https://yadi.sk/d/twaOcrnqrgPyGw
SoftPerfect RAM Disk
 
Этой программой можно сделать виртуальный диск в оперативной памяти. Выглядит, как обычный диск с буквой, главное что бы оперативной памяти хватил.



Установил, выделил 200 мб, скинул скрипт и файл, но что-то не очень улучшило ситуацию (

Подскажите пожалуйста реализацию с чтением файлов из папки по очереди, если это возможно.
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on July 30, 2020, 10:14:43 PM
В коде скрипта можно сделать пару оптимизаций:
1. Количество строк в файле проверять 1 раз, а не перед каждым чтением строки из файла. Для больших файлов это критично.
2. Вывод в лог сделать в отдельном потоке, с увеличенным интервалом. Посмотреть сколько строк из файла обработал скрипт, можно раз в несколько секунд, а не на каждой итерации цикла. Вывод в лог съедает много времени.

Вот так будет работать раза в 2 быстрее:
Code: (clickermann) [Select]
FOR ($a=0, $a<1)    // 1 кусок цикла
   
   WAITMS(10)
   LCLICK(1011,360)
   
END_CYC

LCLICK(344,705)

$count = TFCOUNT("add.txt") + 1 // количество строк в файле

FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
   
   $b = TFREAD("add.txt", $i)
   
   TOCLIP(STRCONCAT("Привет ", $b))
   
   KEYDOWN(#CTRL)
   KEYPRESS(#V)
   KEYUP(#CTRL)
   
   KEYPRESS(#ENTER)
   WAITMS(5)
   
END_CYC

THREAD(name, 1)
   WAIT(3) // частота вывода в лог
   // LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ($i) // лог
END_THREAD

HALT
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on July 30, 2020, 10:38:30 PM
Подскажите пожалуйста реализацию с чтением файлов из папки по очереди, если это возможно.

Вот как то так. Не проверял, должно работать, только путь к файлам свой указать надо.
Code: (clickermann) [Select]
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = STRCONCAT($arr[$n], ".txt") // путь к файлу (полный или относительный)
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
   END_CYC
   
END_CYC

THREAD(name, 1)
   WAIT(3) // частота вывода в лог
   // LOGCLEAR // чтобы лог не разрастался
   LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог
END_THREAD

HALT
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on July 31, 2020, 10:27:21 AM
А еще лучше будет, если лог обновлять не по времени, а по требованию.

Code: (clickermann) [Select]
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = STRCONCAT($arr[$n], ".txt") // путь к файлу (полный или относительный)
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
   END_CYC
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
//
LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог последней статистики

HALT

THREAD(log, 1)
   WAIT(3) // ожидание обновления лога
   WHILE(ISKEYDOWN(#F4)) // если нажата клавиша F4 - лог будет обновляться
      // LOGCLEAR // чтобы лог не разрастался
      LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог
      WAIT(1) // частота обновления лога
   END_CYC
END_THREAD

Можно еще добавить возможность сохранения прогресса выполнения сценария в файл. Чтобы при необходимости, можно было выключить кликер и при следующем запуске он продолжил свою работу с того места, на котором его прервали. И временную приостановку сценария тоже можно сделать.
Всё это конечно скорости не прибавит, зато даст возможность завершить очень длительный по времени выполнения сценарий.
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on July 31, 2020, 11:05:08 AM
А еще лучше будет, если лог обновлять не по времени, а по требованию.

Code: (clickermann) [Select]
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = STRCONCAT($arr[$n], ".txt") // путь к файлу (полный или относительный)
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
   END_CYC
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
//
LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог последней статистики

HALT

THREAD(log, 1)
   WAIT(3) // ожидание обновления лога
   WHILE(ISKEYDOWN(#F4)) // если нажата клавиша F4 - лог будет обновляться
      // LOGCLEAR // чтобы лог не разрастался
      LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог
      WAIT(1) // частота обновления лога
   END_CYC
END_THREAD

Спасибо большое Вам за помощь!

1 вариант более мне понятен, но работает немного медленнее чем 2 вариант, единственное что счетчик слетает после выхода из 2 куска скрипта после выполнения $i < 150 (и в 1 скрипте и во 2)... Как это можно исправить ? - что бы постоянно считало, мне это нужно что бы не использовать TFDELETE, я потом сам руками открываю и удаляю пройденные строки, так как иногда скрипт может часов 10 работать, а иногда жена говорит поехали в магазин и я все останавливаю через 30 минут )))

3 скрипт заканчивается ошибкой, добавил 2 вложения (скрины)

Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on July 31, 2020, 01:00:16 PM
Чтобы небыло ошибки, надо в строке
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив
оставить только имена существующих файлов, остальные удалить (вместе с разделителями).

И значит нужно вернуть на место нарастающую переменную:
INC ($num,1)    // нарастающая переменная, строка +1
или
INC($e,1)  // нарастающая переменная, считает количество строк в логе
И соответственно, вывести её в лог.

Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on July 31, 2020, 01:08:52 PM
так как иногда скрипт может часов 10 работать, а иногда жена говорит поехали в магазин и я все останавливаю через 30 минут )))

Видимо сохранение все же нужно будет сделать.

Можно еще добавить возможность сохранения прогресса выполнения сценария в файл. Чтобы при необходимости, можно было выключить кликер и при следующем запуске он продолжил свою работу с того места, на котором его прервали. И временную приостановку сценария тоже можно сделать.
Всё это конечно скорости не прибавит, зато даст возможность завершить очень длительный по времени выполнения сценарий.

Только сейчас не смогу, работа мешает.((
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on July 31, 2020, 04:19:40 PM
Чтобы небыло ошибки, надо в строке
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив
оставить только имена существующих файлов, остальные удалить (вместе с разделителями).

И значит нужно вернуть на место нарастающую переменную:
INC ($num,1)    // нарастающая переменная, строка +1
или
INC($e,1)  // нарастающая переменная, считает количество строк в логе
И соответственно, вывести её в лог.



Сидел смотрел на код... Чет ничего не получается реализовать ((

Нашел программку которая режет txt на количество строк, разрезал на файлы по 5 мб, - их быстрее Clickermann переваривает )

Могу Вас попросить, прикрутить нарастающую переменную которая будет считать строки до конца перебора всех файлов, к скрипту с масивами (он быстрее работает)

Code: (clickermann) [Select]
STRSEPARATE("add;add2;add3;add4;add5", ";", $arr) // список имен файлов в массив
 
FOR($n = 0, $n < ARRSIZE($arr))
 
   $file = STRCONCAT($arr[$n], ".txt") // путь к файлу (полный или относительный)
 
   FOR ($a=0, $a<1)    // 1 кусок цикла
 
      WAITMS(10)
      LCLICK(1011,360)
 
   END_CYC
 
   LCLICK(344,705)
 
   $count = TFCOUNT($file) + 1 // количество строк в файле
 
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
 
      $b = TFREAD($file, $i)
 
      TOCLIP(STRCONCAT("Привет ", $b))
 
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
 
      KEYPRESS(#ENTER)
      WAITMS(5)
 
   END_CYC
 
END_CYC
 
THREAD(name, 1)
   WAIT(3) // частота вывода в лог
   // LOGCLEAR // чтобы лог не разрастался
   LOGWRITE (STRCONCAT("Файл: ", $arr[$n], ".txt", " | Строка: ", $i)) // вывод в лог
END_THREAD
 
HALT

Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on July 31, 2020, 06:24:48 PM
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on July 31, 2020, 08:16:30 PM
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)

Спасибо большое добрый человек! :)
Все работает как ракета, потестил оба варианта, просто пушка )
Удачи и добра! 8)
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on August 04, 2020, 12:05:04 PM
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)

Спасибо большое добрый человек! :)
Все работает как ракета, потестил оба варианта, просто пушка )
Удачи и добра! 8)

Что то пошло не так ( :'(
Сегодня выходной ... Немного присмотрелся, увидел что то-то не так, решил закинуть в папку буфера (GETFILELIST($arr, "C:\papka\*.txt")) 2 txt файла на 500 и 2000 строк. Запустил скрипт и понял что он не остановился на "количество обработаных строк 2600+ ", понял что он читает рандомом файлы и строки (

Как сделать что бы он работал по порядку начиная с 1.txt +1... 10.txt и так же шел по строкам в каждом файле ? Или даже просто после прочтения файла удалял его?
Если возможно реализовать удаления файлов после прочтения, считать строки уже тогда будет не актуально.

Спасибо за помощь!
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on August 04, 2020, 02:57:39 PM
Поискал сейчас тоже программу для нарезки файлов по количеству строк. Нашел Text Cleaver. Похоже речь именно о нем. Так вот, он не совсем удобно переименовывает файлы.

Вот в таком порядке их сортирует Clickermann (и это правильно):
add1.txt
add10.txt
add11.txt
...
add19.txt
add2.txt

Проводник Windows сортирует по другой логике.

После нарезки файлов их можно просто все переименовать:
1. Сортировка в Проводнике - в алфавитном порядке, по возрастанию
2. Выделить все файлы - Ctrl + A
3. Правый клик на первом файле, и выбрать "Переименовать"
4. Удалить имя совсем, или написать свое
5. Enter
Так Clickermann будет их обрабатывать в том же порядке, в котором они отображаются в Проводнике.

Строки в файлах скрипт перебирает по порядку - с первой строки и до последней.
Но у нас в цикле условие: FOR ($i = 1, (($i < 150) & ($i < $count)))
Это указывает кликеру читать файлы с первой строки, по очереди, без пропусков, пока не будут прочитаны все строки файла, или пока количество прочитанных строк не превысит 150.
То есть сейчас, в каждом файле скрипт обрабатывает максимум 150 строк, а затем переходит к следующему файлу. Так задумано? Или это ошибка?

Вот переделанный скрипт, с удалением обработанных файлов.
Чтобы не заморачиваться с путями к файлам и не терять скорость на лишних действиях, скрипт помещаем в папку с файлами.

Code: (clickermann) [Select]
// Этот скрипт положить в папку с обрабатываемыми им файлами
LOGCLEAR

GETFILELIST($arr, "*.txt") // список всех *.txt файлов в папке

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      // INC($num) // количество обработанных строк
     
   END_CYC
   
   INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
   TFCLEAR($file, 1) // удаление обработанного файла с диска (мимо корзины)
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on August 04, 2020, 03:26:39 PM
Проблема с сортировкой оказалась всё еще актуальной :-\.
По моему, можно ничего с этим не делать.))
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on August 04, 2020, 04:14:20 PM
Code: (clickermann) [Select]
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   FOR ($a=0, $a<1)    // 1 кусок цикла
     
      WAITMS(10)
      LCLICK(1011,360)
     
   END_CYC
   
   LCLICK(344,705)
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, (($i < 150) & ($i < $count))) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк, по окончании обработки фала
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT

Скрипт просканирует папку на наличие txt-фалов и будет обрабатывать их по порядку.
Количество обработанных строк стакается в переменную $num, в строке 31. Можно эту строку закомментировать и активировать строку 35. Но одна из них должна быть закомментирована, или удалена. Когда работает строка 35, экономия времени больше.
В 1 строке скрипта нужно прописать свой путь к папке с txt-фалами (полный или относительный), отмечено красным.
GETFILELIST($arr, "C:\papka\*.txt") // список всех *.txt файлов в папке "C:\papka\"
Вроде всё)

Спасибо большое добрый человек! :)
Все работает как ракета, потестил оба варианта, просто пушка )
Удачи и добра! 8)

Что то пошло не так ( :'(
Сегодня выходной ... Немного присмотрелся, увидел что то-то не так, решил закинуть в папку буфера (GETFILELIST($arr, "C:\papka\*.txt")) 2 txt файла на 500 и 2000 строк. Запустил скрипт и понял что он не остановился на "количество обработаных строк 2600+ ", понял что он читает рандомом файлы и строки (

Как сделать что бы он работал по порядку начиная с 1.txt +1... 10.txt и так же шел по строкам в каждом файле ? Или даже просто после прочтения файла удалял его?
Если возможно реализовать удаления файлов после прочтения, считать строки уже тогда будет не актуально.

Спасибо за помощь!

Программка которой я режу txt на количество строк "KeyWordKeeper"
Изначально я задумывал 2 цикла:

1.
Почистил лог.
Code: (clickermann) [Select]
FOR ($a=0, $a<1)    // 1 кусок цикла
 
      WAITMS(10)
      LCLICK(1011,360)
 
   END_CYC
- это для того что бы клацать на кнопку очистки лога, что бы он не рос...

2. Это сам процесс со строками, из текстового файла скопировать строку в буфер и вставить куда нужно.

Отрабатывает $i < 150 выходит с цикла, - жмет кнопку, чистит лог ) только для этого. И так по идеи должно было быть по кругу.


Только что запустил для теста скрипт что Вы написали:
Создал 2 txt файла закинул в один 2000 строк в другой 750.
Скрипт прочитал по 150 строк из каждого файла и удалил их )

я бы мог изменить значение $i < 150 например на 50000 но тогда, лог будет расти и начнет тормозить ( особенно под конец.

Идея простая (наверное :D), нажать ЛКМ (почистить лог), вставить по очереди 150 строк из файла на 100к строк, нажать ЛКМ. И так по кругу до конца строк в файле и так к следующему.

не знаю на сколько это правильно но команду
Code: (clickermann) [Select]
HALT
я всегда убираю
Code: (clickermann) [Select]
//HALT
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: 4.У.В.@.К on August 04, 2020, 08:52:53 PM
Переделал.)
Очистку лога перенес во внутренний цикл.
Вынес в начало скрипта настройки: удаления файлов (переменная $del) и очистки Лога (переменная $clear).

Code: (clickermann) [Select]
// Этот скрипт положить в папку с обрабатываемыми им файлами

// Удаление обработанных файлов:
$del = 0 // 1 - удалять; 0 - не удалять

// Очистка Лога:
$clear = 150 // количество обработанных строк до очистки Лога

//--------------------------------

LOGCLEAR

GETFILELIST($arr, "*.txt") // список всех *.txt файлов в папке

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, $i < $count) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк в файлах
     
      INC($e,1)  // нарастающая переменная, считает количество строк в Логе
     
      IF($e = $clear) // если обработано 150 строк - очищаем Лог
         WAITMS(10)
         LCLICK(1011,360)
         $e = 0 // обнуляем счетчик строк Лога
         LCLICK(344,705)
      END_IF
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк в файлах, по окончании обработки фала
   
   IF($del)
      TFCLEAR($file, 1) // удаление обработанного файла с диска (мимо корзины)
   END_IF
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT
Title: Re: Чтение файла txt больше 100 метров, как ускорить процесс ?
Post by: stadon on August 05, 2020, 09:09:39 PM
Переделал.)
Очистку лога перенес во внутренний цикл.
Вынес в начало скрипта настройки: удаления файлов (переменная $del) и очистки Лога (переменная $clear).

Code: (clickermann) [Select]
// Этот скрипт положить в папку с обрабатываемыми им файлами

// Удаление обработанных файлов:
$del = 0 // 1 - удалять; 0 - не удалять

// Очистка Лога:
$clear = 150 // количество обработанных строк до очистки Лога

//--------------------------------

LOGCLEAR

GETFILELIST($arr, "*.txt") // список всех *.txt файлов в папке

FOR($n = 0, $n < ARRSIZE($arr))
   
   $file = $arr[$n]
   
   $count = TFCOUNT($file) + 1 // количество строк в файле
   
   FOR ($i = 1, $i < $count) // 2 кусок
     
      $b = TFREAD($file, $i)
     
      TOCLIP(STRCONCAT("Привет ", $b))
     
      KEYDOWN(#CTRL)
      KEYPRESS(#V)
      KEYUP(#CTRL)
     
      KEYPRESS(#ENTER)
      WAITMS(5)
     
      INC($num) // количество обработанных строк в файлах
     
      INC($e,1)  // нарастающая переменная, считает количество строк в Логе
     
      IF($e = $clear) // если обработано 150 строк - очищаем Лог
         WAITMS(10)
         LCLICK(1011,360)
         $e = 0 // обнуляем счетчик строк Лога
         LCLICK(344,705)
      END_IF
     
   END_CYC
   
   // INC($num,$i) // количество обработанных строк в файлах, по окончании обработки фала
   
   IF($del)
      TFCLEAR($file, 1) // удаление обработанного файла с диска (мимо корзины)
   END_IF
   
END_CYC

SETTHREAD (log, 0) // когда все файлы обработаны - остановить поток "log"
LOGWRITE ("Всего бработано строк: ", $num) // вывод в лог последней статистики

THREAD(name, 1)
   WAIT(1) // частота вывода в лог
   LOGCLEAR // чтобы лог не разрастался
   LOGWRITE ("В обработке файл: ", $file) // вывод в лог
   LOGWRITE ("Обработано строк: ", $num)
END_THREAD

HALT


Спасибо Вам большое! :)
Тестил пол дня, в разных вариациях )) все отлично работает, как часы, тумблер только переключил на 1 в "$del = 0 // 1 - удалять; 0 - не удалять", потому что при 0 считывает больше строк (3000+) чем есть в файлах (2750)...
Еще раз спасибо, так в Вашей помощью тут можно машину по картинкам собрать  8)