Вниз
Скачать: CL | DM;

Как читать данные из потока в такое поле ?   Найти похожие ветки 

← →
Шар   (2007-12-23 06:21) [0]

MyRec = record
 Txt: string[4];
 ...
end;


aStream.Read(MyRec1.Txt[1], 4); - почему-то не работает. Или я что-то не так делаю?


← →
Dimaxx ©   (2007-12-23 09:11) [1]

И не будет. Потому что string[4] записывается в виде <длина>+<данные>. Т.е. у тебя сначала идет байт длины строки, потом данные строки. Проще использовать array[0..3] of Char вместо string[4].


← →
boa_kaa ©   (2007-12-23 11:03) [2]


> Dimaxx ©   (23.12.07 09:11) [1]

ерунды не говори. В String[n] длина уже есть.


> Шар   (23.12.07 06:21) 

у тебя не работает что-то другое. нужен более подробный код: как записывается, где позиция указателя, где читается


← →
korneley ©   (2007-12-23 11:40) [3]

Попробуй перед чтением из потока сделать SetLength(MyRec1.Txt, 4), так сказать, для плезиру :)


← →
Dimaxx ©   (2007-12-23 12:45) [4]


> ерунды не говори. В String[n] длина уже есть.

Ерунды не говори. Никто и не говорил, что ее нет. Длина есть и она пишется в файл. string[4] это тот же shortstring (=string[255]), но с длиной 4.


← →
Григорьев Антон ©   (2007-12-23 12:57) [5]


> aStream.Read(MyRec1.Txt[1], 4); - почему-то не работает.
>  Или я что-то не так делаю?

Да. Надо читать так:
aStream.Read(MyRec1.Txt[0], 4);
И записывать тоже начиная с нулевого символа. У ShortString, в отличие от AnsiString, есть элемент с индексом 0 - там хранится фактическая длина строки (Ord(S[0]) = Length(S)). Поэтому и читать, и записывать такие строки в поток надо вместе с нулевым символом.


← →
korneley ©   (2007-12-23 13:09) [6]


> ...У ShortString, в отличие от AnsiString...

 А где в [0] shortstring?  

> Да. Надо читать так:aStream.Read(MyRec1.Txt[0], 4);

 А может тогда так:aStream.Read(MyRec1.Txt[0], 5);
 Ну писАть, соответственно %)


← →
korneley ©   (2007-12-23 13:14) [7]


> korneley ©   (23.12.07 13:09) [6]
> А где в [0] shortstring?
Упс... нашел :) а длина записи/чтения все равно length(s) + 1 ;)


← →
boa_kaa ©   (2007-12-23 14:17) [8]


> Dimaxx ©   (23.12.07 12:45) [4]
> > ерунды не говори. В String[n] длина уже есть.
> Ерунды не говори.

Это я не со злобой. Просто получилось так грубовато :)

А читать можно и в s[0] и в s[1]. Только определиться надо, как писать сначала.


← →
Dimaxx ©   (2007-12-23 14:53) [9]


> Это я не со злобой. Просто получилось так грубовато :)
>
> А читать можно и в s[0] и в s[1]. Только определиться надо,
>  как писать сначала.

Да я понял... :) Просто сразу подумалось, что ты не прочитав толком сообщение стал писать ответ... :D



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.012 c
9-1165649515
max3d
2006-12-09 10:31
2008.01.20
Движок проблемы с реализацией


2-1198155687
Stepper
2007-12-20 16:01
2008.01.20
Как в Delphi указать путь компиляции проекта? Типа: С:/Executable


15-1197316554
Petr V. Abramov
2007-12-10 22:55
2008.01.20
В.Путин назвал своего преемника


11-1182503317
=BuckLr=
2007-06-22 13:08
2008.01.20
Взять Items[i] как из RichEdit RTF-строку


15-1197354355
@!!ex
2007-12-11 09:25
2008.01.20
BDS->Delphi 7




   Наверх