Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.012 c
3-1189675476
vtur
2007-09-13 13:24
2008.01.20
ZeosLib + Interbase


1-1192715378
Still Swamp
2007-10-18 17:49
2008.01.20
Мои Messages


2-1198155822
312kbps
2007-12-20 16:03
2008.01.20
Определить номер текуще строки в ListBox !?


15-1197538459
андр
2007-12-13 12:34
2008.01.20
SQL


2-1197996711
new_user )
2007-12-18 19:51
2008.01.20
недопонимаю...