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

Вниз

TReader error: Invalid property value   Найти похожие ветки 

 
Cobalt ©   (2013-06-01 18:07) [0]

procedure BytesToWareRec(Arr: TBytes; var ARec: TLPCustomWareRec);
var
 str: TMemoryStream;
 rd: TReader;
begin
 str := TMemoryStream.Create;
 str.Write(Arr, Length(Arr));
 str.Seek(0, 0);
 rd := TReader.Create(str, Length(Arr));
 try
   ARec.Model              := rd.ReadInteger;
   ARec.PLU                := rd.ReadInteger;
   ARec.WareType           := rd.ReadInteger;
   ARec.CertCenter         := rd.ReadString;
   ARec.MessageText        := rd.ReadString;
 finally
   rd.Free;
   str.Free;
 end;
end;

может, я что  не так делаю?
Опыта работы с TReader"om нет.


 
Медвежонок Пятачок ©   (2013-06-01 22:03) [1]

чтобы читать тридером и ни о чем не паритьтся, сначала надо писать трайтером.


 
Алканавт расправил плечи   (2013-06-02 00:09) [2]

То, что ты написал, это скорее работа для TMemIniFile. А TReader для несколько иных вещей предназначен.


 
Cobalt ©   (2013-06-02 01:34) [3]

Пишу, есс-но, райтером. Полностью код:
http://pastebin.com/9TBeLihK


 
Германн ©   (2013-06-02 02:39) [4]


> Cobalt ©   (02.06.13 01:34) [3]
>
> Пишу, есс-но, райтером.

А не приходило в голову, что "эта граната не той системы"?


 
Cobalt ©   (2013-06-02 09:18) [5]

Просто хотел не писать велосипед, и воспользоваться готовым.
Может, ты знаешь какое-то ограничение, которое не знаю я?


 
Медвежонок Пятачок ©   (2013-06-02 09:29) [6]

Пишу, есс-но, райтером. Полностью код:

А вот это тогда что за хрень:

begin
str := TMemoryStream.Create;
str.Write(Arr, Length(Arr));
str.Seek(0, 0);
rd := TReader.Create(str, Length(Arr));

......


 
Cobalt ©   (2013-06-02 10:31) [7]

Записываю в Memorystream массив,
указатель в начало
создаю ридер по потоку.


 
Юрий Зотов ©   (2013-06-02 11:50) [8]

> Cobalt ©   (02.06.13 10:31) [7]

Запись через MemoryStream.Write и через TWriter не обязательно дадут одно и то же бинарное содержимое потока. А TReader понимает только тот формат, в котором пишет TWriter.

Вывод - если читаешь через TReader, то писать надо через TWriter. И при этом еще не забыть про WriteListBegin и WriteListEnd, раз уж пишется массив.


 
Медвежонок Пятачок ©   (2013-06-02 13:59) [9]

Записываю в Memorystream массив,

Тебе и говорят, чтобы читать ридером, надо писать райтером.


 
Cobalt ©   (2013-06-02 14:04) [10]

Я ссылку дал не просто так, а из-за ограничения форума на длину сообщения


 
Медвежонок Пятачок ©   (2013-06-02 14:09) [11]

И тебе не просто так сказали, что если читаешь ридером, то и писать надо райтером.


 
Anatoly Podgoretsky ©   (2013-06-02 14:20) [12]

> Cobalt  (02.06.2013 14:04:10)  [10]

А ты что “Войну и Мир”
собрался публиковать?


 
sniknik ©   (2013-06-03 10:39) [13]

> str.Read(Arr[0], str.Size)
> str.Write(Arr, Length(Arr));

???


 
Cobalt ©   (2013-06-03 12:26) [14]

Ну вот, хоть один человек помнит, как правильно передавать динамический массив в параметр const Buffer


 
Медвежонок Пятачок ©   (2013-06-03 12:59) [15]

остальные просто не смотрели этот момент за ненадобностью.
потому что даже если динамический массив интегеров правильно записать в стрим через write, то ридером через ридинтегер один фик ничего не прочитаешь.

ридер читая интегер (и не только его) ждет, что интегер (и не только он) был записан райтером.
а райтер, записывая интегер, сначала пишет маркет типа, а затем уже значение самого интегера.
вот и ридер при считывании интегера считывает сначала маркер, а затем уже четыре байта интегера.



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

Форум: "Начинающим";
Текущий архив: 2014.03.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1370690219
oliksin
2013-06-08 15:16
2014.03.23
Как вывести сумму строк из мемо?


2-1370624079
stas
2013-06-07 20:54
2014.03.23
Форматирование текста командой format


2-1369985084
Owl
2013-05-31 11:24
2014.03.23
работа с TStringStream


2-1370416151
Psionic
2013-06-05 11:09
2014.03.23
Hint


15-1380974929
uw
2013-10-05 16:08
2014.03.23
Контроллер и Ethernet





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