![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка EOF(file)
Brat-2 © (2003-01-01 19:52:00)Функция EOF возвращает конец некоторого exe файла, хотя до конца еще далеко. Как быть?
Brat-2 (2003-01-02 15:34:00) [1]Все ок. В буфер читается. Но вот Стандартная функция POS не находит в нем строки, и STRLen(BUF) показывает всегда меньше, чем читается в буфер. По видимому, когда эти функции доходят до #13 или #0, то процесс прерывается. А как сделать, чтоб все было Ок?
Joisy (2003-01-02 15:06:00) [2]1. Postav breakpoint v kode i posmotri (F7/F8) na kakoy finksii oshibka
2.
var BytesRead: Integer
begin
...
Reset(f,1);
BlockRead(f, buf, sizeof(buf), BytesRead);
///
///
end;
3. buf luchshe brat 256/ 1024 /2048 i.t.d.
Brat-2 (2003-01-02 11:53:00) [3]Нет, пошу просто привести правильный код. Дельфя у меня 6 с каким-то урезанным хлпом по процедурам ниче нету :((
Anatoly Podgoretsky (2003-01-02 11:25:00) [4]Нам это набрать в редакторе и запустить компляцию, что бы получть ошибку или как?
Посмотри также в хелпе синтаксис команды Reset для нетипизированных файлов. В принципе тут ошибки в каждой строке, за исключением AssignFile(f,"C:\filename.exe");
Brat-2 (2003-01-02 11:21:00) [5]Пишу:
var
f: file;
buf: array [0..200] of char;
...
begin
AssignFile(f,"C:\filename.exe");
Reset(f);
Seek(f,1);
BlockRead(f,buf,200);
...
А оно ошибку пишет. Подскажите, ПЛЗ, как правильно написать?
Brat-2 (2003-01-02 10:35:00) [6]Ok. Попробую. Спасибо за оперативность.
Anatoly Podgoretsky (2003-01-02 10:32:00) [7]А чего страшного, что несколько мегабайт, Windows поддерживает до 2 гб памяти. Ну не нравится весь читай кусками, алгоритм приведен выше, какие перескоки могут быть в буфере, это же не текстовый файл, а двоичный и в нем все символы (байты) равноправны включая EOF
Brat-2 (2003-01-02 10:29:00) [8]Файл может быть несколько Мб. Что весь файл загонять в буфер!? А глючить не будет?
А вот алгоритм n*слово проюзать можно, но что-то я не уверен, что глюков не будет. В тексте ведь есть всякие ТАB-ы и другие "грязные" символы. Не возникнет ли в связи с ними какого-нибудь "перескока"?
Anatoly Podgoretsky (2003-01-02 10:25:00) [9]Зачем 511, считывай польностью весь файл в буфер или хитрый алгоритм, где буфер = 2*слово и считывание каждый раз по пол буфера
Brat-2 (2003-01-02 10:19:00) [10]Приведите, пожайлуста код. Очень срочно нужно. Заранее благодарен.
Brat-2 (2003-01-02 10:12:00) [11]Получается нужно считывать по 511 байт. А если слово будет находится на стыке?
Billy (2003-01-02 05:54:00) [12]Насколько я помню, в паскале eof возвращает true когда находит символ #26 - т. наз. символ EOF. (это при работе с f:textfile)
Здесь лучше вообще описать файл как f:file и пользоваться BlockRead. Сделаф буфер как array [0..511] of char можно пользоваться в ним все той же pos.
С наступившим :)
Anatoly Podgoretsky (2003-01-01 22:35:00) [13]Так не работай как с текстовым файлом, а как с двоичным
Brat-2 (2003-01-01 22:26:00) [14]А как быть? Мне просто в нем нужно найти слово длиной 6 символов и заменить на другое слово (тоже 6 символов).
TTCustomDelphiMaster (2003-01-01 21:35:00) [15]
> конец некоторого exe файла
Так почему вы работаете с этим файлом как с текстовым.
Anatoly Podgoretsky (2003-01-01 20:28:00) [16]А ты уверен, что у тебя текстовый файл, видимо нет
Brat-2 (2003-01-01 20:23:00) [17]...
While not EOF(f) do
begin
ReadLn(f,stroka);
p:=Pos("Text_for_search",stroka);
end;
...
TTCustomDelphiMaster (2003-01-01 20:18:00) [18]Во первых покажи код.