| 
| 
 | Вопрос # 5 896/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Моя программа принимает байты, приходящие на последовательный порт (количество байт неизвестно),
 складывает их как-то и куда-то, а потом, например, при нажатии пользователем кнопки выводит их
 (при нажатии кнопки гарантировано отсутствие приема).
 Вопрос: как и куда правильно и быстро сложить байты и потом их вывести
 (может одномерный динамический массив, но я с ним не знаком и не знаю как установить размер,
 записать данные, считать, очистить).
 Подскажите кому не трудно.
 
|  |   Вопрос задал: anbaresi (статус: Посетитель)Вопрос отправлен: 19 января 2012, 16:15
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 20 января 2012, 13:48; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 19 января 2012, 16:18 [#1]:TMemoryStream, однозначно! Он предназначен именно для этого.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | anbaresi (статус: Посетитель), 20 января 2012, 09:47 [#2]:А можно небольшой пример? |  
|   | min@y™ (статус: Доктор наук), 20 января 2012, 09:51 [#3]: Цитата (anbaresi): А можно небольшой пример?  Пример чего?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | anbaresi (статус: Посетитель), 20 января 2012, 10:01 [#4]:как правильно воспользоваться TMemoryStream в моем случае |  
|   | min@y™ (статус: Доктор наук), 20 января 2012, 10:17 [#5]: Цитата (anbaresi): как правильно воспользоваться TMemoryStream в моем случае  Ну, наверное, как-то так:
 
 // допустим, ты принимаешь данные из порта в буфер, по 64 байта
var
  Buffer: array[0..63] of Byte;
  Stream: TMemoryStream;
begin
  Stream:= TMemoryStream.Create();
  try
 
  repeat
    // <--- тут приём очередной пачки байт
 
    // далее - запись в стрим:
    Stream.WriteBuffer(Buffer, SizeOf(Buffer));
  until (условие_выхода_из_цикла_приёма);
 
  { после цикла можно:
     - читать данные Stream.Read(), Stream.ReadBuffer();
     - сохранить данные в файл Stream.SaveToFile();
     - передать данные в другой Stream
     - и т.п. }
  finally
    Stream.Free();
  end;
end;Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Толяныч (статус: 4-ый класс), 20 января 2012, 12:54 [#6]:Я  так  простодушно интересуюсь : а чем  плох банальный array  of  byte ?
 |  
|   | min@y™ (статус: Доктор наук), 20 января 2012, 13:02 [#7]: Цитата (Толяныч): Я так простодушно интересуюсь : а чем плох банальный array of byte ?  А кто сказал, что он плох?
 Я написал просто пример и всё.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | anbaresi (статус: Посетитель), 20 января 2012, 13:36 [#8]:Условие выхода из цикла отсутствует (только лампочка на железке, подключенной к сом порту компьютера - лампочка погасла можно нажимать кнопку в программе и смотреть что же насыпала железка). Количество байт насыпанных неизвестно, их может быть гораздо больше 64-х. Т.е. нужно грамотно организовать накопление и вывод накопленного, ну и желательно знать кол-во накопленного на момент нажатия кнопки.
 (механизм работы железка+компьютер прошу не критиковать, надо найти решение в текущей ситуации)
 |  
|   | min@y™ (статус: Доктор наук), 20 января 2012, 13:48 [#9]:Да я ж сказал, что это просто пример. Как ты там будешь читать данные из порта - не важно. Ты ж просил пример работы с TMemoryStream, я его написал. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |