Главная страница
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.49 MB
Время: 0.022 c
1-1133925432
AlexanderS
2005-12-07 06:17
2006.01.08
Динамическое сжатие данных в памяти


4-1130670520
Максим
2005-10-30 14:08
2006.01.08
Слежение за процессами


2-1135170658
з. танька
2005-12-21 16:10
2006.01.08
Мешается экспоненциальная запись


1-1134022139
Dima_DD
2005-12-08 09:08
2006.01.08
Ролик мышки на DBGrid


14-1134508044
Kerk
2005-12-14 00:07
2006.01.08
Cyber Underground Community VS Terrorism