Что нового

Поиск и замена в большом файле

AlexTurist

Новичок
Сообщения
13
Репутация
1
Здравствуйте. Есть необходимость в большом файле искать определенные значения и заменять их, когда делал это на небольшом файле (около 5мб) все работало вот так

Код:
$Map = "2_test.img"

$sFind =  "ca6145350a5551443a1744504849054353593d0445665a35055ae744351cfb51"
$sReplace = "871101000612010005130100041401000315080002161600011797000018b801"

_Find_and_edit ($Map,$sReplace,$sFind)

Func _Find_and_edit ($path,$HexReplace,$HexFind)
    _Hex_Edit ($path, _Find_adress ($path, $HexFind),"0x"&$HexReplace)
EndFunc

Func _Hex_Edit ($path, $adress,$HexReplace) ;
    $File = FileOpen ( $path, 1 )
    FileSetPos ($File, $adress, 0)
    $BinaryReplace = BinaryToString ($HexReplace)
    FileWrite ($File, $BinaryReplace)
EndFunc

Func _Find_adress ($path, $HexFind)
    $hFile = FileOpen ( $path, 16)
    $sRead = FileRead ($hFile)
    $adress_for_return = (StringInStr ($sRead, $HexFind) -3) / 2
    MsgBox (0,"", $HexFind & " " & $adress_for_return)
    Return $adress_for_return
EndFunc
Но когда попался фаил 3 Гб то выскочила ошибка по нехватки памяти, читал что для решения такой задачи нужно отрезать кусочек искать в нем потом следующий итд, но ни как не пойму как вычислить какой объем можно максимум отрезать и можно ли как то гарантировать что часть переменной не попадет во вторую половину? Может есть какой то более простой способ решения проблемы?
 
Верх