Author Topic: Ускорение работы с файлом.  (Read 22847 times)

0 Members and 1 Guest are viewing this topic.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Ускорение работы с файлом.
« Reply #15 on: February 01, 2014, 10:38:45 AM »
Вставил код с поиском Finf file.exe.
У меня сейчас 8500 строк в файле, поиск происходит за разное время (от 26 до 50 мсек), задержку в ожидании ответа от программы Finf file.exe убрал вообще (строка 166).
С файлом длиной 1000 строк, время было примерно такое же, видимо максимум в этом ожидании это скорость работы с диском, т.е. чтение, а сам поиск реализован на ассемблере и длится ничтожно малое время.
Большое Вам спасибо, с такой скоростью поиска можно и 100 000 строк думаю без проблем переваривать.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ускорение работы с файлом.
« Reply #16 on: February 01, 2014, 07:56:57 PM »
Про ассемблер это была шутка. К дальнейшему коду отношения не имеет.
Что-то очень мало времени у тебя занимает. Оно хоть работает? Может ошибся где? Проверял?
« Last Edit: March 04, 2014, 07:34:25 AM by Vint »


ЦИТРИН

  • Супермодератор
  • Оплот сообщества
  • *
  • Posts: 484
  • Марафон опавших листьев, коктейль из дыма и мыслей
    • View Profile
Re: Ускорение работы с файлом.
« Reply #17 on: February 01, 2014, 09:34:56 PM »
Вставил код с поиском Finf file.exe.

Большое Вам спасибо, с такой скоростью поиска можно и 100 000 строк думаю без проблем переваривать.
Подожди )
 У меня похожая задача в твиттере.
 Решил конечно, но задержка великовата.
 Напиши пожалуйста  сюда
 1) Что за программа? Где брал программу ?
 2) Выложи  свой  скрипт.
Бабочки полёт будит тихую поляну в солнечном свету...

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Ускорение работы с файлом.
« Reply #18 on: February 01, 2014, 10:03:44 PM »
Про ассемблер это была штука. К дальнейшему коду отношения не имеет.
Что-то очень мало времени у тебя занимает. Оно хоть работает? Может ошибся где? Проверял?
Я только комп купил, новый. Жесткий диск флешёвый 120 ГБ, там Кликерман установлен, видимо из-за этого так быстро.
Ну и проц i7, 3.5 Ггц.
Вот кусок кода где идёт поиск:
Quote
UNDEFINE($url)

$url = ""
$ank = $_ankw
INIWRITE("name.ini","file","name_small.txt")
INIWRITE("name.ini","ank",$ank)
INIWRITE("name.ini","return","-1")
$start = $_ms
EXECUTE("Find file.exe")
WHILE(INT(INIREAD("name.ini", "return")) = -1)   // ????????
   //WAITMS(30)
   //LOGWRITE ("Æä¸ì")
END_CYC
$start = $_ms - $start
IF(INT(INIREAD("name.ini", "return")) = 1)
   LOGWRITE ("Èìÿ åñòü â áàçå")
   
       $_kank =  $_kank + 15
       $_bzank = $_bzank + 1
      GOTO (st)
END_IF


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Ускорение работы с файлом.
« Reply #19 on: February 01, 2014, 10:05:13 PM »
Вставил код с поиском Finf file.exe.

Большое Вам спасибо, с такой скоростью поиска можно и 100 000 строк думаю без проблем переваривать.
Подожди )
 У меня похожая задача в твиттере.
 Решил конечно, но задержка великовата.
 Напиши пожалуйста  сюда
 1) Что за программа? Где брал программу ?
 2) Выложи  свой  скрипт.

Скрипт обращения к программе для поиска строки в предыдущем сообщении.
Программа поиска Finf file.exe, она наверное ещё в досе была, я припоминаю такую вроде.

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Ускорение работы с файлом.
« Reply #20 on: February 02, 2014, 07:25:39 AM »
ээээ кто нибудь может в двух словах объяснить суть темы.
что медленно работает?
что нужно улучшить?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Ускорение работы с файлом.
« Reply #21 on: February 02, 2014, 09:39:10 AM »
ээээ кто нибудь может в двух словах объяснить суть темы.
что медленно работает?
что нужно улучшить?

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

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Ускорение работы с файлом.
« Reply #22 on: February 02, 2014, 07:37:00 PM »
Именно так =)

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Ускорение работы с файлом.
« Reply #23 on: February 03, 2014, 08:07:55 AM »
какая то специфическая задача...
даже если сделать такую функцию, то что она будет возвращать?

и вы там массивы упоминали. вы как все делали. вначале считывали в массив "базу данных", потом проверяли-дополняли массив и в конце сохраняли построчно массив обратно в БД?
можно разбивать большой список на маленькие. например по алфавиту. ну вы конечно нашли решение с помощью сторонней  программы, тоже вариант.

ну а в целом работа над оптимизацией быстродействия ведется постоянно.
« Last Edit: February 03, 2014, 08:20:50 AM by Johnny »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Ускорение работы с файлом.
« Reply #24 on: February 03, 2014, 10:17:23 AM »
какая то специфическая задача...
даже если сделать такую функцию, то что она будет возвращать?

Номер строки или строк конечно. Кстати возможен ли такой поиск для массивов?

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Ускорение работы с файлом.
« Reply #25 on: March 04, 2014, 07:08:24 AM »
Вставил код с поиском Finf file.exe.
У меня сейчас 8500 строк в файле, поиск происходит за разное время (от 26 до 50 мсек), задержку в ожидании ответа от программы Finf file.exe убрал вообще (строка 166).
Сейчас более 17000 строк, время поиска не увеличилось, хвала симбиозу Clickermann + ассемблер !!!

justitdo

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Ускорение работы с файлом.
« Reply #26 on: September 12, 2014, 05:51:09 PM »
Вставил код с поиском Finf file.exe.
У меня сейчас 8500 строк в файле, поиск происходит за разное время (от 26 до 50 мсек), задержку в ожидании ответа от программы Finf file.exe убрал вообще (строка 166).
Сейчас более 17000 строк, время поиска не увеличилось, хвала симбиозу Clickermann + ассемблер !!!
Объясните, пожалуйста, что это за программа и как сделать, чтобы она осуществляла поиск строки по текстовику в моем скрипте
Code: [Select]
WAIT(1)
 
LCLICK(1184,64)  // клик по адресной строке для выделения (установить свою координату!)
WAITMS(50)
KEYDOWN (#CTRL) // Ctrl+C
WAITMS (50)
KEYDOWN (#C)
WAITMS (50)
KEYUP (#C)
KEYUP (#CTRL)
WAITMS (50)
$strclip = FROMCLIP()
 
$action = 0
$count = TFCOUNT ("input.txt")
WHILE(0 < $count)
   $comp = TFRead("input.txt", $count)
   INC($count,-1)
   IF($comp = $strclip)
      $count = 0
      $action = 1
   END_IF
END_CYC
 
IF($action = 1)
   // сдесь действие если строка совпала
ELSE
   TFWRITE("input.txt", $strclip) // запись строки в файл
   WAITMS (50)
   // сдесь действие если строка не совпала
END_IF


Сейчас в текстовике около 20 тысяч строк, стал жестко тормозить, на поиск уходит секунд 5-7, очень хочется ускорить.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Ускорение работы с файлом.
« Reply #27 on: September 12, 2014, 06:32:02 PM »
Циклы полюбому работают слишком медленно. А что если слить все строки в одну большую?!
Тогда можно функцией STRPOS проверить есть ли подстрока в строке и если вернет больше нуля значит есть а если 0 то дописать в конец нашу строку и тд.

Для начало вот таким скриптом объединяем строки в файле "input.txt"

Code: (clickermann) [Select]
WHILE($num < TFCOUNT ("input.txt"))
INC($num,1)
$str = TFREAD("input.txt", $num)
$str2 = STRCONCAT($str, " ", $str2)
END_CYC
TFWRITE("output.txt", $str2)
HALT

Получаем "output.txt", его опять переименовываем в "input.txt"

Используем в скрипте проверки.
Code: (clickermann) [Select]
WAIT(1)
 
LCLICK(1184,64)  // клик по адресной строке для выделения
WAITMS(50)
KEYDOWN (#CTRL) // Ctrl+C
WAITMS (50)
KEYDOWN (#C)
WAITMS (50)
KEYUP (#C)
KEYUP (#CTRL)
WAITMS (50)
$strclip = FROMCLIP()
WAITMS(50)
$comp = TFREAD("input.txt", 1)
WAITMS(50)
$action = STRPOS($comp, $strclip)
IF($action > 0)
   // сдесь действие если строка совпала
ELSE
   TFWRITE("input.txt", STRCONCAT($strclip," ")) // запись строки в файл
   WAITMS (50)
   // сдесь действие если строка не совпала
END_IF

Правда не знаю как это будет работать с очень большими строками.
« Last Edit: September 12, 2014, 06:34:13 PM by Oraven »

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: Ускорение работы с файлом.
« Reply #28 on: September 12, 2014, 06:58:24 PM »
Кстати, в тестовой версии 4.11 заложены вкусные плюшки,  для работы с текстовыми файлами в том числе.
http://crapware.aidf.org/forum/index.php?topic=356.msg6738#msg6738
Вот вам и удобный случай протестировать.  :)

justitdo

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Ускорение работы с файлом.
« Reply #29 on: September 12, 2014, 07:23:08 PM »
Андрей, спасибо, сейчас же протестирую. Atas Ну это я смогу протестировать только при поддержке местных гуру, потому что сам в этих кодах ничего не волоку)))