Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Ошибка EOF(file)   Найти похожие ветки 

 
Brat-2   (2003-01-01 19:52) [0]

Функция EOF возвращает конец некоторого exe файла, хотя до конца еще далеко. Как быть?


 
TTCustomDelphiMaster ©   (2003-01-01 20:18) [1]

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


 
Brat-2   (2003-01-01 20:23) [2]

...
While not EOF(f) do

begin
ReadLn(f,stroka);
p:=Pos("Text_for_search",stroka);

end;
...


 
Anatoly Podgoretsky ©   (2003-01-01 20:28) [3]

А ты уверен, что у тебя текстовый файл, видимо нет


 
TTCustomDelphiMaster ©   (2003-01-01 21:35) [4]


> конец некоторого exe файла

Так почему вы работаете с этим файлом как с текстовым.


 
Brat-2   (2003-01-01 22:26) [5]

А как быть? Мне просто в нем нужно найти слово длиной 6 символов и заменить на другое слово (тоже 6 символов).


 
Anatoly Podgoretsky ©   (2003-01-01 22:35) [6]

Так не работай как с текстовым файлом, а как с двоичным


 
Billy ©   (2003-01-02 05:54) [7]

Насколько я помню, в паскале eof возвращает true когда находит символ #26 - т. наз. символ EOF. (это при работе с f:textfile)
Здесь лучше вообще описать файл как f:file и пользоваться BlockRead. Сделаф буфер как array [0..511] of char можно пользоваться в ним все той же pos.
С наступившим :)


 
Brat-2   (2003-01-02 10:12) [8]

Получается нужно считывать по 511 байт. А если слово будет находится на стыке?


 
Brat-2   (2003-01-02 10:19) [9]

Приведите, пожайлуста код. Очень срочно нужно. Заранее благодарен.


 
Anatoly Podgoretsky ©   (2003-01-02 10:25) [10]

Зачем 511, считывай польностью весь файл в буфер или хитрый алгоритм, где буфер = 2*слово и считывание каждый раз по пол буфера


 
Brat-2   (2003-01-02 10:29) [11]

Файл может быть несколько Мб. Что весь файл загонять в буфер!? А глючить не будет?
А вот алгоритм n*слово проюзать можно, но что-то я не уверен, что глюков не будет. В тексте ведь есть всякие ТАB-ы и другие "грязные" символы. Не возникнет ли в связи с ними какого-нибудь "перескока"?


 
Anatoly Podgoretsky ©   (2003-01-02 10:32) [12]

А чего страшного, что несколько мегабайт, Windows поддерживает до 2 гб памяти. Ну не нравится весь читай кусками, алгоритм приведен выше, какие перескоки могут быть в буфере, это же не текстовый файл, а двоичный и в нем все символы (байты) равноправны включая EOF


 
Brat-2   (2003-01-02 10:35) [13]

Ok. Попробую. Спасибо за оперативность.


 
Brat-2   (2003-01-02 11:21) [14]

Пишу:
var
f: file;
buf: array [0..200] of char;

...

begin
AssignFile(f,"C:\filename.exe");
Reset(f);
Seek(f,1);
BlockRead(f,buf,200);
...
А оно ошибку пишет. Подскажите, ПЛЗ, как правильно написать?


 
Anatoly Podgoretsky ©   (2003-01-02 11:25) [15]

Нам это набрать в редакторе и запустить компляцию, что бы получть ошибку или как?
Посмотри также в хелпе синтаксис команды Reset для нетипизированных файлов. В принципе тут ошибки в каждой строке, за исключением AssignFile(f,"C:\filename.exe");


 
Brat-2   (2003-01-02 11:53) [16]

Нет, пошу просто привести правильный код. Дельфя у меня 6 с каким-то урезанным хлпом по процедурам ниче нету :((


 
Joisy ©   (2003-01-02 15:06) [17]

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 15:34) [18]

Все ок. В буфер читается. Но вот Стандартная функция POS не находит в нем строки, и STRLen(BUF) показывает всегда меньше, чем читается в буфер. По видимому, когда эти функции доходят до #13 или #0, то процесс прерывается. А как сделать, чтоб все было Ок?



Страницы: 1 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
14-37327
Слава
2002-12-23 21:10
2003.01.13
Мастера! Помогите!


1-37101
mao
2003-01-03 15:57
2003.01.13
БД. DBMemo1.DataSource???


14-37380
Lokk
2002-12-25 14:19
2003.01.13
помогите плизз


3-36950
vitnt
2002-12-18 11:50
2003.01.13
Interbase 5+6


1-37143
Spook
2002-12-29 12:28
2003.01.13
F1 не нажимается