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

Вниз

Как считать строки, прерывающиеся 0 байтом.   Найти похожие ветки 

 
Endi ©   (2003-10-25 16:52) [0]

У меня есть тестовый файл в котором все строки отделены друг от друга нулевым байтом, так вот вопрос, как в цикле считывать эти строки. Вот что у меня было

function TForm1.ReadStr(FromPos:cardinal):string;
var
Buf:byte;
i:integer;

begin
i:=0;
Result:="";
buf:=1;
while buf<>0 do begin
FileSeek(FHnd,FromPos+i,0);
FileRead(FHnd,buf,1);
if buf<>0 then if buf=10 then Result:=Result+#13#10
else Result:=Result+Chr(buf);
Inc(i);
end;
end;

но это слишком медленно.


 
Digitman ©   (2003-10-25 17:03) [1]

открой вайл как MMF? замени все #0 (кроме последнего) на #10 и прочитай рез-т в строковую переменную


 
Endi ©   (2003-10-25 17:28) [2]

Так не получится, потому что у меня файл не полностью текстовый, сначала там идут другие данные. Написанная функция получает номер позиции с которой надо читатать. Надо, чтоб она читала все вплоть до нулевого байта. Как я понимаю, тут надо задействовать null-terminated sring, но как я чего-то не догоняю. :(


 
Digitman ©   (2003-10-25 17:34) [3]


> Так не получится, потому что у меня файл не полностью текстовый


да по барабану, "полностью" или не "полностью"
структуру ты его знаешь ? знаешь наверно

открывай MMF, ищи смещение начала тех самых "неправильных" строковых данных и делай вышеупомянутую логику



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

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

Наверх




Память: 0.47 MB
Время: 0.054 c
3-41069
Alexus
2003-10-21 19:14
2003.11.13
Подскажите с какой стороны взяться...


3-40833
___Nikolay
2003-10-21 11:21
2003.11.13
Почему-то виснет....................................


1-41489
Михааааааааа
2003-10-28 16:47
2003.11.13
TImage


1-41397
DimChan
2003-10-30 08:04
2003.11.13
DateTimePicker


7-42145
Эдуард
2003-09-03 17:29
2003.11.13
Как корректно (!) не дать приложению закрыться