Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
Шар   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.047 c
2-1197828478
Motzart
2007-12-16 21:07
2008.01.20
Календарь


2-1197983348
Alex_C
2007-12-18 16:09
2008.01.20
Можно ли узнать, кто использует DLL


15-1197531643
Alkid
2007-12-13 10:40
2008.01.20
Менеджмент достал.


2-1198256206
Riply
2007-12-21 19:56
2008.01.20
Безопасная загрузка библиотеки.


11-1182538380
Infarkt
2007-06-22 22:53
2008.01.20
onMouseWheel на ScrollBox





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