Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.05.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
2-1326300960
Gu
2012-01-11 20:56
2012.05.13
константы


15-1325693022
alexdn
2012-01-04 20:03
2012.05.13
Скрипт


15-1325622606
Юрий
2012-01-04 00:30
2012.05.13
С днем рождения ! 4 января 2012 среда


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


15-1325791518
Сусл_
2012-01-05 23:25
2012.05.13
Android





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский