Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.013 c
14-37283
Дремучий
2002-12-25 18:32
2003.01.13
Добавлена парочка прибамбасов....


3-36953
Filat
2002-12-18 13:00
2003.01.13
База данных и Timer?


1-37192
ed30
2002-12-30 18:41
2003.01.13
Потоки


1-37199
Abajun
2002-12-30 15:29
2003.01.13
отключение сообщений


14-37293
Ich Hasse
2002-12-22 19:29
2003.01.13
SQL прммеры




   Наверх