Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизДанные из 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c