![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 30.11.2006
Сообщений: 128
|
![]()
Помогите плиз. Как можно просканировать файл с целью нахождения определённых символов(шестнадцатиричных)? После анализа нужно или записать этот символ в другой файл либо искать дальше. Файлы не типизированные.
Пробовал типа так: var buf: array[0..16] of byte; col:integer; b,i:byte; begin //Что-то там делаем...; blockread(infile,array,sizeof(array ),col); {Если вот так то работает: blockwrite(outfile,array,col) То есть просто копируется файл... } //А если так: For i:=0 to col do begin if array[i]=$1B then Blockread(infile,b,1) else block write(outfile,array[i],sizeof(array[i])); //Примерно так - пишу на память может где ошибся, но идея думаю ясна Так вот после этого эта зараза каждый раз после 16 символа вставляет левый символ, причём более никак не изменяя файла. Кто-нибудь ХЕЛП! Задача-то вроде тривиальная. Можно с использованием потоков, я правда с ними не работал, но разберусь как-нибудь....
nosce te ipsumj...
|
![]() |
![]() |
![]() |
#2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
писал я помню патчер файлов и процессов! вообщем суть довольно таки простая Но на практике как обычно
![]() делаеш не через for to do... а через while do читаещ пусть буфер размером в buffer:array[0..1023] of Byte; потом требуется сделать чтот подобное типа function buf2hex(var buf): string; var i:integer; begin result := ''; for i:= 0 to sizeof(buf)-1 do begin result:=result+inttohex(buf[i],1); end; end; чтот подобное... потом просто i := ansipos(buf2hex(твой буфер),'искомый хекс'); // если не ошибаюсь с параметрами надо уменьшить i на 1 т.к. позиция слова 1 а байта 0 ! т.е. dec(i); i = позиция твоего хекс значения на позиции файла, т.е. с позиции с которой ты читал свой буфер + этот самый i ! теперь по этой позиции т.е. допустим файл это f := tfilestream; то f.seek(i,1); вроде или f.position := f.position + i; а теперь меняй на что угодно f.write('новое значение',длина); а потом в цикле while do пока i > 0 ! т.е. пока будут значения в буфере потом заканчиваеш цикл while do как только i = 0 ! переходиш с той позиции на которой читал буфер + размер прочитаного и повторяеш это все до тех пор пока файл не закончится конечн не сильно популярно описал просто в спешке |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 30.11.2006
Сообщений: 128
|
![]()
Наконец до форума добрался.. сессия.
Можно поподробнее, в этих функциях разные типы данных используются. Я сколько колдавал - ничего хорошего не получилось. Что за функции: 1. inttohex - догадываюсь, но конкретней можно? 2. ansipos - в справке написано, что она вернёт не позицию вхождения, а 0 или 1.
nosce te ipsumj...
|
![]() |
![]() |
![]() |
#4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
незнаю что там в справке написано но ansipos возвращает мне позицию текста в другом тексте, inttohex - что здесь не понятно ?! оно и так видно ))) из integer в строку string где будет строка ввиду хекс ))) я таким образом патчил что файлы что процессы в памяти
![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Файлы | NeiL | Win Api | 3 | 24.07.2008 17:02 |
Файлы. | BR@BUS | Помощь студентам | 5 | 09.04.2008 19:35 |
Файлы | madmot | Операционные системы общие вопросы | 3 | 06.02.2008 12:10 |
INI файлы | aesoem | Общие вопросы Delphi | 3 | 24.12.2007 21:22 |
два вредных вопроса:про асю и прикриплёные файлы файлы | steck | Свободное общение | 3 | 17.06.2007 14:53 |