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

Вниз

eof tfilestream   Найти похожие ветки 

 
e+e|e   (2012-01-13 15:32) [0]

читаю текстовый файл tfilestreamом, где
у него аналог:
while not eof (f) do???


 
Ega23 ©   (2012-01-13 15:41) [1]

while position < size do


 
e+e|e   (2012-01-13 16:26) [2]

и что??? виснет же!!!

while Stream.position < Stream.size do
   begin
     Stream.Read(s, Length(s));

   end;


 
RWolf ©   (2012-01-13 16:30) [3]

строка s до выполнения этого цикла, конечно же пустая?


 
Cobalt ©   (2012-01-13 16:34) [4]

Прекрасный образец для орешника :-)


 
Ega23 ©   (2012-01-13 16:34) [5]


> и что??? виснет же!!!


Примите Виагру. Соковня.


 
Dimka Maslov ©   (2012-01-13 16:39) [6]

Кто мешает прочесть текстовый файл ТСтрингЛистом и взять св-во Текст?


 
Сергей М. ©   (2012-01-13 16:41) [7]


> Dimka Maslov ©   (13.01.12 16:39) [6]


Некошерно)


 
e+e|e   (2012-01-13 16:44) [8]


> Dimka Maslov ©   (13.01.12 16:39) [6]
>
> Кто мешает прочесть текстовый файл ТСтрингЛистом и взять
> св-во Текст?


мы легкий путей не ищем!!!


> RWolf ©   (13.01.12 16:30) [3]
>
> строка s до выполнения этого цикла, конечно же пустая?
>


а какая должна быть??? мы ж в нее считываем строку из файла!!!
s:= "";


 
RWolf ©   (2012-01-13 16:47) [9]


> мы ж в нее считываем строку из файла!!!

не строку из файла, а заданное количество байт из потока.
вопрос: сколько байт мы читаем, если > s:= ""; ?


 
DVM ©   (2012-01-13 16:48) [10]


> e+e|e   (13.01.12 16:26) [2]
> и что??? виснет же!!!
>
> while Stream.position < Stream.size do
>    begin
>      Stream.Read(s, Length(s));
>
>    end;
>
>

Как то так


var
 Reader: TReader;

Reader := TReader.Create(Stream, 1024);;
try
 while Stream.position < Stream.size do
    s := Reader.ReadString;
finally
 Reader.Free;
end;


 
Cobalt ©   (2012-01-13 17:52) [11]

Если это текстовый файл, то читай TStringlist
или через Assign/Reset/ReadLn while not EOF
А если читаешь не TStringlist - значит или у тебя там не чистый текст, или ты читатель журнала "Хакер".


 
Dimka Maslov ©   (2012-01-13 19:57) [12]


> а какая должна быть??? мы ж в нее считываем строку из файла!!!


Йа плакалъ...


 
Германн ©   (2012-01-14 05:59) [13]


> e+e|e   (13.01.12 16:44) [8]
>
>
> > Dimka Maslov ©   (13.01.12 16:39) [6]
> >
> > Кто мешает прочесть текстовый файл ТСтрингЛистом и взять
> > св-во Текст?
>
>
> мы легкий путей не ищем!!!
>
>
> > RWolf ©   (13.01.12 16:30) [3]
> >
> > строка s до выполнения этого цикла, конечно же пустая?
>
> >
>
>
> а какая должна быть??? мы ж в нее считываем строку из файла!
> !!
> s:= "";
>

А на учебники и хелп просто плюём! Так?


 
Dimka Maslov ©   (2012-01-14 11:37) [14]


> А на учебники и хелп просто плюём! Так?


У нас эпидемия.


 
megavoid ©   (2012-01-14 11:37) [15]

спросонья проглядел s:=""; Stream.Read(s, Length(s)); - это, конечно, сильно :)

Если файл большой (очень даже бывают этак гигов 30-50), то stringlist идёт лесом, остаётся assign/reset или tfilestream/treader


 
DVM ©   (2012-01-14 14:55) [16]

c TReader только надо иметь в виду, что первыми 4 байтами он считает длину строки, а потом уже столько байт в строку, сколько он считал в первый раз.
Т.е. если это просто текстовый файл, то нужно менять логику TReader или использовать что-то другое.


 
megavoid ©   (2012-01-14 16:48) [17]

мне вот именно с большими (и ещё больше, до 100-200 гб бывают у меня файлы) интересно кто как делает, можно ещё через CreateFileMapping с фреймом, и внутри фрейма #10 считать (и из винды, и из *никс бывают файлы) и разбивать на строки, но по скорости этот метод сравним с assign/readln, то есть в любом случае упираемся в скорость чтения с винта :(


 
Anatoly Podgoretsky ©   (2012-01-14 17:03) [18]

А если из Мака, то вообще нет #10 , но FileMapping в данном случае самый быстрый способ, но 200 гб при средней менее 50 мб, только на чтение потребуется более часа, а у автора бесконечность.


 
megavoid ©   (2012-01-14 17:30) [19]

среднюю чтения я поднимаю, вытаскивая читаемый файл на отдельный физический винт, получается около 70 мб/с
хочу сделать нечто наподобие нтфса, хранить в сжатом виде (до 60% убирается), читать сжатое, в памяти разжимать в строки и уже там считать переводы строк, надо только сперва потестить, будет ли смысл в приросте скорости, и будет ли он вообще


 
megavoid ©   (2012-01-14 18:36) [20]

а да, > e+e|e   (13.01.12 15:32) читаю текстовый файл tfilestreamом, где у него аналог while not eof (f) do??? [0]
Unit откуда-то с просторов инета:
unit textfilestream;
interface
uses Classes;
type
 TTextFileStream = class(TFileStream)
 private
   buf: AnsiString;
   bp, bs:  Integer;
 public
   eof: Boolean;
   function ReadChar: AnsiChar;
   function ReadLn: String;
 end;
implementation
function TTextFileStream.ReadChar: AnsiChar;
begin
 if (bs = 0) or (bp = bs) then
 begin
   bs := 65536;
   SetLength(buf, bs);
   bs := Read(buf[1], bs);
   if bs < Length(buf) then SetLength(buf, bs);
   if (bs = 0) then eof := True;
   bp := 0;
 end;
 Inc(bp);
 if bp <= bs then Result := buf[bp] else result := #0;
end;
function TTextFileStream.ReadLn: string;
var
 c: AnsiChar;
begin
 Result := "";
 while not eof do
 begin
   c := ReadChar;
   if c = #13 then Break;
   if c <> #10 then result := result + c;
 end;
end;
end.


потом можно делать так:
T := TTextFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyNone);
try
 while not T.eof do String := T.ReadLn;
finally
 T.Free;
end;

вот и eof



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

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

Наверх




Память: 0.52 MB
Время: 0.005 c
15-1325536203
Юрий
2012-01-03 00:30
2012.05.13
С днем рождения ! 3 января 2012 вторник


2-1326450595
Nucer
2012-01-13 14:29
2012.05.13
PosEx и RawByteString


15-1325830703
kudatsky
2012-01-06 10:18
2012.05.13
SWF-файлы в Delphi


2-1325889921
Gu
2012-01-07 02:45
2012.05.13
beep


15-1325282449
Германн
2011-12-31 02:00
2012.05.13
Чем приклеить металл к мрамору?