Что нового

[Данные, строки] Вылет при повторной вычитке из файла

Gzzk

Новичок
Сообщения
104
Репутация
1
Здравствуйте.
Данный код должен выполнять довольно простую задачу - если встречает в строке из файла слова "рейт","$" или "нужно" он вырезает id в файл buf.txt
[ник-zad657767]:нужно подождать 26 часов 24 минуты 25 секунд -> 657767.
И потом если подстрока из buf.txt встречается в forcezad.txt - копирует строку из forcezad.txt в newforcezad.txt
Но почему-то проходит только одна итерация второго цикла,при повторной вычитке из файла FileReadLine возвращает @error.
Как эту проблему решить можно,файл-то целый и дальше есть строки?
Файлы для примера: http://yadi.sk/d/SQmdaS7P8cicw
Код:
$hmylog = FileOpen(@ScriptDir & '\mylog.txt', 0)
$hBuf = FileOpen(@ScriptDir & '\buf.txt', 2)
While 1
    $sLine = FileReadLine($hmylog)
	If @error = -1 Then ExitLoop
	if StringInStr($sLine,"$") OR StringInStr($sLine,"рейт") OR StringInStr($sLine,"нужно") Then
		$res_array=StringRegExp($sLine, 'zad([0-9A-z]{1,})]', 3)
		FileWriteLine($hBuf, $res_array[0] & @CRLF)
	EndIf
WEnd
$hBuf = FileOpen(@ScriptDir & '\buf.txt', 0)
$hForcezad = FileOpen(@ScriptDir & '\forcezad.txt', 0)
$hnewforcezad = FileOpen(@ScriptDir & '\newforcezad.txt', 2)
While 1
    $sLine = FileReadLine($hBuf)
	If @error = -1 Then ExitLoop
		While 1
			$sLinezad = FileReadLine($hForcezad)
			If @error = -1 Then ExitLoop ;вот тут ложится
			if StringInStr($sLineZad,$sLine) Then
			FileWriteLine($hnewforcezad, $sLinezad & @CRLF)
			EndIf
		WEnd
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
Gzzk
выход происходит в
Код:
$sLine = FileReadLine($hBuf)
    If @error = -1 Then ExitLoop

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

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
Gzzk [?]
проходит только одна итерация второго цикла
Дело в том, что когда вы открыли файл $hForcezad, указатель установился в начало файла. После того, как вы весь файл прочитали, указатель так и остался в конце файла. Поэтому вам нужно после каждого прохода либо переоткрывать $hForcezad (не рекомендуется), либо смещать указатель в начало (рекомендуется)
Код:
FileSetPos($hForcezad, 0, 0)
 
Верх