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

Вниз

Можно ли из файлового потока (TFileStream) читать построчно?   Найти похожие ветки 

 
Шурик Ш   (2005-03-11 17:10) [0]

Т.е. перебрать поочереди все строки файла, как это делает Readln?


 
WondeRu ©   (2005-03-11 17:14) [1]

есть такая штука называется TStringList, можно сделать так

TStringList(obj).LoadFromStream(AFileStream);

а потом уже получаешь готовое и без геммороя!

TStringList(obj)[i]


 
Шурик Ш   (2005-03-11 17:15) [2]

А если файл весит 100 мегов??? Он же его весь в память заберет?


 
WondeRu ©   (2005-03-11 17:19) [3]

создай промежуточный TMemoryStream, который будет считывать предположим по 1 Мб, тока необходимо будет учитывать, что будут резаться строки...


 
Плохиш ©   (2005-03-11 17:28) [4]


>Шурик Ш   (11.03.05 17:10)

В вындовс символом конца строки является комбинация символов #13#10.


 
BiN ©   (2005-03-11 17:47) [5]

Шурик Ш   (11.03.05 17:10)

Я бы посоветовал использовать memory-mapped file.


 
Anatoly Podgoretsky ©   (2005-03-11 17:57) [6]

Шурик Ш   (11.03.05 17:10)  
Нет, это оружие низкого уровня, для построчного, используй оружие более высокого уровня TextFile


 
TUser ©   (2005-03-11 19:02) [7]


> А если файл весит 100 мегов??? Он же его весь в память заберет?

Не заберет


 
YurikGL ©   (2005-03-11 20:12) [8]


> > А если файл весит 100 мегов??? Он же его весь в память
> заберет?
>
> Не заберет

А что будет? Просто интересно...


 
DiamondShark ©   (2005-03-11 20:51) [9]


> А что будет? Просто интересно...

Взорвётся.


 
YurikGL ©   (2005-03-11 21:02) [10]


> DiamondShark ©   (11.03.05 20:51) [9]

тьфу ты... я думал в ем какая защита внутри есть...


 
Slym ©   (2005-03-14 06:50) [11]

procedure Writeln(Stream:TStream;const Data:string);
begin
 Stream.WriteBuffer(PChar(Data)^,length(Data));
 Stream.WriteBuffer(#13#10,2);
end;

function ReadLn(Stream:TStream):string;
const cCR = #10; cLF = #10; cEOF = #26;
var Ch:Char;
begin
 result:="";
 while Stream.Read(Ch,1)>0 do
 begin
   if Ch=cLF then break;
   if Ch=cEOF then break;
   if Ch<>cCR then
   begin
     result:=result+Ch;
     continue;
   end;
   if Stream.Read(Ch,1)=0 then break;
   if Ch=cLF then break;
   if Ch=cEOF then break;
   result:=result+cCR+Ch;
 end;
end;


 
Юрий Зотов ©   (2005-03-14 10:40) [12]

> Шурик Ш   (11.03.05 17:15) [2]
> YurikGL ©   (11.03.05 20:12) [8]
 

В Win32 Файлы проецируются на адресное пространство процесса и подгружаются кусками, по мере необходимости. Естественно, при этом работают буферизация и кэширование.

Попробуйте запустить 100-метровый видеоролик на машине с 64-метровой памятью. Работает?

То-то и оно, что работает.

> WondeRu ©   (11.03.05 17:19) [3]

Поэтому загружать файл кусками еще и самому нет необходимости.

> BiN ©   (11.03.05 17:47) [5]

И поэтому нет нужды использовать MMF. MMF нужны для разделения данных между процессами, а здесь это не требуется. Файл и так будет memory-mapped, только не на разделяемую память, а на адресное пространство одного процесса.

> Шурик Ш   (11.03.05 17:10)

Если файл не текстовый, то строки в нем Вы не переберете никак потому что их там просто нет. А если текстовый, что почему бы не использовать ту самую ReadLn?


 
BiN ©   (2005-03-14 10:49) [13]

Юрий Зотов ©   (14.03.05 10:40) [12]

В Win32 Файлы проецируются на адресное пространство процесса.
...
И поэтому нет нужды использовать MMF.


Не понял (с). Ты хочешь сказать, что CreateFile поецирует файлы на адресное пространсво процесса. С какого это перепугу?

MMF нужны для разделения данных между процессами, а здесь это не требуется. Файл и так будет memory-mapped, только не на разделяемую память, а на адресное пространство одного процесса.

Ошибаешься. MMF используется не только в IPC.

С уважением,



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

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

Наверх




Память: 0.5 MB
Время: 0.026 c
1-1110714640
Object
2005-03-13 14:50
2005.03.27
Куда прописать файлы *.dcr;*.dcu;*.hpp;*.obj...


1-1111052504
Gerakl
2005-03-17 12:41
2005.03.27
Delphi2005 (IDE)


8-1102751798
Константинов
2004-12-11 10:56
2005.03.27
Эмуляторы, насколько это сложно?


6-1106656964
Separator
2005-01-25 15:42
2005.03.27
WM_RASDIALEVENT


4-1108013517
miek
2005-02-10 08:31
2005.03.27
HBitmap