Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизОшибка 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c