Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1134562199
BobbyDigital
2005-12-14 15:09
2006.01.08
сериал винта


14-1134560149
syte_ser78
2005-12-14 14:35
2006.01.08
Прога для вебмастеров


1-1133989699
graffik
2005-12-08 00:08
2006.01.08
Управление компонентами в среде Solid Works посредством Delphi


9-1122384578
ZAV
2005-07-26 17:29
2006.01.08
Зеркальное отражение в GLScene


8-1123012068
CHAINIK
2005-08-02 23:47
2006.01.08
Вырезать кусок из МР3





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