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

Вниз

Данные из TFileStream в TString, как реализовать ?   Найти похожие ветки 

 
malenkii_myk   (2005-12-17 23:04) [0]

Подскажите, как из файла, открытого как TFileStream, записать некоторые данные в переменную с типом String...


 
Anatoly Podgoretsky ©   (2005-12-17 23:10) [1]

S[1]


 
jack128 ©   (2005-12-18 00:02) [2]

Anatoly Podgoretsky ©   (17.12.05 23:10) [1]
Крат - сест тал ? ;)

FileSream.Seek(0, 0);
SetLength(s, FileStream.Size);
if s <> "" then
 FileStream.ReadBuffer(s[1], Length(s));


 
Германн ©   (2005-12-18 02:18) [3]


> jack128 ©   (18.12.05 00:02) [2]

Очень интересная конструкция:

> if s <> "" then
>  FileStream.ReadBuffer(s[1], Length(s));

Может лучше try except?

Или на "худой" конец if Length(s) > 0 then а ещё лучше if Length(s) = FileStream.Size then? Так все же нагляднее при чтении исходника другими людьми, имхо.


 
Lamer@fools.ua ©   (2005-12-18 10:50) [4]

>>Германн ©   (18.12.05 02:18) [3]

>Может лучше try except?
Не лучше.

>if Length(s) > 0 then
Я бы выбрал этот вариант, но ещё лучше - см. ниже.

>а ещё лучше if Length(s) = FileStream.Size then?
Это как раз хуже. Незачем вычислять размер FileStream по десять раз на дню.

С точки зрения понятности кода и его оптимизированности for speed я бы написал как-то так:

var
 // ...
 FileStreamSize: Integer;
 // ...
begin
 // ...
 FileStream.Seek(0, soFromBeginning);
 FileStreamSize := FileStream.Size;  // кстати, св-во Size типа Int64; по большому счёту надо бы проверять, чтоб не "зашкаливало" за Integer
 if FileStreamSize > 0 then
 begin
   SetLength(S, FileStreamSize);
   FileStream.ReadBuffer(Pointer(S)^, FileStreamSize);
 end
 else
   S := "";
 // ...
end;


Ну а чисто по ООП"ешному — это вообще воспользоваться TStringStream.


 
Lamer@fools.ua ©   (2005-12-18 10:51) [5]

P.S. А вообще сейчас окажется, что автор имел в виду TStrings, а не String :o)


 
Набережных С. ©   (2005-12-18 12:51) [6]


> Lamer@fools.ua ©   (18.12.05 10:50) [4]


> >if Length(s) > 0 then
> Я бы выбрал этот вариант, но...

Вариант s <> "" более оптимальный, чем этот. Наглядность, имхо, не хуже. Впрочем, локальную переменную для длины я бы тоже скорее всего завел.

> >а ещё лучше if Length(s) = FileStream.Size then?
> Это как раз хуже. Незачем вычислять размер FileStream по
> десять раз на дню.

Это не просто хуже, это вообще бессмысленно. Либо будет равенство, либо исключение на SetLength. И если длина нулевая, то далее range error, если включена проверка.


 
Lamer@fools.ua ©   (2005-12-18 13:43) [7]

>>Набережных С. ©   (18.12.05 12:51) [6]

>Вариант s <> "" более оптимальный, чем этот.
Согласен. Вместо вызова функции компилятор вставляет просто сравнение с nil.

>Наглядность, имхо, не хуже.
Ну это уже зависит от того, у кого какое "имхо" :-)


 
Набережных С. ©   (2005-12-18 14:40) [8]


> Lamer@fools.ua ©   (18.12.05 13:43) [7]


> Ну это уже зависит от того, у кого какое "имхо" :-)

:))) Примерно это я и имел в виду:))


 
Германн ©   (2005-12-19 03:04) [9]

2 Lamer@fools.ua ©
2 Набережных С. ©
Ребята, а вы собственно об чём?
Или я пропустил какую-то серию какого-то сериала?


 
Набережных С. ©   (2005-12-19 08:08) [10]


> Германн ©   (19.12.05 03:04) [9]
> 2 Lamer@fools.ua ©
> 2 Набережных С. ©
> Ребята, а вы собственно об чём?
> Или я пропустил какую-то серию какого-то сериала?

Вполне возможно, и не одну. Только не спрашивайте меня - какого, я телевизор совсем не смотрю. Но Вы, главное, не расстраивайтесь и не волнуйтесь, все это фигня по сравнению с мировой революцией.



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

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

Наверх




Память: 0.47 MB
Время: 0.008 c
14-1134279032
begin...end
2005-12-11 08:30
2006.01.08
С Днём рождения! 11 декабря


2-1135240151
Вт
2005-12-22 11:29
2006.01.08
Виртуальный диск в памяти


3-1131016024
Bolek
2005-11-03 14:07
2006.01.08
Динамический запрос


1-1133492829
Петр
2005-12-02 06:07
2006.01.08
Как подгрузить dll, написанную в Delphi в проект CBuilder?


14-1134450960
begin...end
2005-12-13 08:16
2006.01.08
С Днём рождения! 13 декабря





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский