Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка 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]

Во первых покажи код.


Наверх

Титульная страница Поиск, карта сайта Написать письмо