Чтение в кластер бинарных данных
- Select
- developer
- Сообщения: 281
- Зарегистрирован: 12 дек 2017, 23:56
- Версия LabVIEW: 18
- Откуда: Врата надежды.
- Поблагодарили: 2 раза
Чтение в кластер бинарных данных
Всем привет, подскажите пожалуйста каким образом принять содержимое из *.bin в кластер.
Содержимое *.bin состоит из данных аналогичного кластера (5 элементов), который находится в другом
В результате я должен унаследовать все данные в приемнике.
Возможно в таком виде сохраненные данные не отобразятся в исходных значениях приемника, метод не катит.
Буду благодарен за пример такого импорта из кластера одного в такой же кластер другого
Содержимое *.bin состоит из данных аналогичного кластера (5 элементов), который находится в другом
В результате я должен унаследовать все данные в приемнике.
Возможно в таком виде сохраненные данные не отобразятся в исходных значениях приемника, метод не катит.
Буду благодарен за пример такого импорта из кластера одного в такой же кластер другого
Последний раз редактировалось Select 14 авг 2019, 12:31, всего редактировалось 1 раз.
LabView 14,18
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Чтение в кластер бинарных данных
У функции Read from Binary File имеется вход data type, подключите свой кластер туда.Select писал(а):Всем привет, подскажите пожалуйста каким образом принять содержимое из *.bin в кластер.
Содержимое *.bin состоит из данных аналогичного кластера (5 элементов), который находится в другом
В результате я должен унаследовать все данные в приемнике.
Только желательно TypeDef использовать в таких случаях.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Чтение в кластер бинарных данных
Есть нюанс. Если кластер содержит массивы, строки, переменные типа Variant и прочие варианты, подразумевающие изменяемый размер кластера в памяти, то данный метод не подходит.
Необходимо оборачивать кластер в строку (Flatten To String) и в файл записывать сначала длину этой строки, а потом уже само тело. И читать соответственно: вычитывается длина записи, потом считывается строка этого размера, ну и потом обратное преобразование.
А еще лучше не изобретать велосипед и использовать tdms
Необходимо оборачивать кластер в строку (Flatten To String) и в файл записывать сначала длину этой строки, а потом уже само тело. И читать соответственно: вычитывается длина записи, потом считывается строка этого размера, ну и потом обратное преобразование.
А еще лучше не изобретать велосипед и использовать tdms
- Select
- developer
- Сообщения: 281
- Зарегистрирован: 12 дек 2017, 23:56
- Версия LabVIEW: 18
- Откуда: Врата надежды.
- Поблагодарили: 2 раза
Re: Чтение в кластер бинарных данных
IvanLis,
я это изначально сделал, метод не рулит.
Borjomy_1,
я это изначально сделал, метод не рулит.
Borjomy_1,
Такое присутствует. Где бы я мог посмотреть примеры с такими нюансами?Есть нюанс. Если кластер содержит массивы, строки ....
- Вложения
-
- Cluster1.png (4.4 КБ) 2466 просмотров
LabView 14,18
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Чтение в кластер бинарных данных
Все "рулит", Вы просто готовить не можете пока...Select писал(а): IvanLis,
я это изначально сделал, метод не рулит.
Читайте доки и ищите примеры: https://knowledge.ni.com/KnowledgeArtic ... AU&l=ru-RU
у меня все работает, многократно использовал...Borjomy_1 писал(а):Есть нюанс. Если кластер содержит массивы, строки, переменные типа Variant и прочие варианты, подразумевающие изменяемый размер кластера в памяти, то данный метод не подходит.
можно впихнуть, все что угодно
Это при сохранении массива кластеров (кластер имеет вложенный массив и String). Это сохранение именно кластера (имеет вложенный массив и String).
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- Select
- developer
- Сообщения: 281
- Зарегистрирован: 12 дек 2017, 23:56
- Версия LabVIEW: 18
- Откуда: Врата надежды.
- Поблагодарили: 2 раза
Re: Чтение в кластер бинарных данных
Т.е. считывающий , должен иметь такую же структуру как записывающий, по аналогии как это происходит в одном ?IvanLis писал(а):Select писал(а): IvanLis,
Все "рулит", Вы просто готовить не можете пока...
у меня все работает, многократно использовал...
можно впихнуть, все что угодно
LabView 14,18
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Чтение в кластер бинарных данных
IvanLis, Сомнительно. Вы попробуйте несколько записей с разным количеством элементов массива в файл сохранить, а потом считать последнюю. С программной точки зрения функция чтения должна прочитать каждую запись со своей длиной, с учетом размеров всех ее элементов. Может, в 2016 и сделали такое, но я ОЧЕНЬ сильно сомневаюсь. Эта функция работает только с записями фиксированной длины, туда интегрирован встроенный TypeCast, который в строку-то скидывает, а вот обратно сложные типы восстановить не способен.
Последний раз редактировалось Borjomy_1 14 авг 2019, 14:07, всего редактировалось 1 раз.
- Select
- developer
- Сообщения: 281
- Зарегистрирован: 12 дек 2017, 23:56
- Версия LabVIEW: 18
- Откуда: Врата надежды.
- Поблагодарили: 2 раза
Re: Чтение в кластер бинарных данных
Попробую собрать в 18. Предыдущий пост несколько прояснил принцип.Borjomy_1 писал(а):IvanLis, Сомнительно. Вы попробуйте несколько записей с разным количеством элементов массива в файл ........Может, в 2016 и сделали такое, но я ОЧЕНЬ сильно сомневаюсь. Эта функция работает только с записями фиксированной длины.
LabView 14,18
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Чтение в кластер бинарных данных
Вот, что в Help пишут:
Тип данных устанавливает тип данных, которые функция использует для чтения из двоичного файла. Функция интерпретирует данные, начиная с текущей позиции файла, как количество экземпляров типа данных. Если типом является массив, строка или кластер, содержащий массив или строку, функция предполагает, что каждый экземпляр этого типа данных содержит информацию о размере. Если экземпляр не включает информацию о размере, функция неправильно интерпретирует данные. Если LabVIEW определяет, что данные не соответствуют типу, он устанавливает данные по умолчанию для указанного типа и возвращает ошибку.
Тип данных устанавливает тип данных, которые функция использует для чтения из двоичного файла. Функция интерпретирует данные, начиная с текущей позиции файла, как количество экземпляров типа данных. Если типом является массив, строка или кластер, содержащий массив или строку, функция предполагает, что каждый экземпляр этого типа данных содержит информацию о размере. Если экземпляр не включает информацию о размере, функция неправильно интерпретирует данные. Если LabVIEW определяет, что данные не соответствуют типу, он устанавливает данные по умолчанию для указанного типа и возвращает ошибку.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Чтение в кластер бинарных данных
Нет, чтение и запись никак не связаны (я в одном сделал для удобства).Select писал(а):Т.е. считывающий , должен иметь такую же структуру как записывающий, по аналогии как это происходит в одном ?
Но считывающий должен только однозначно знать структуру данных, которую необходимо читать.
По этому я и с самого начала говорил о TypeDef.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- Select
- developer
- Сообщения: 281
- Зарегистрирован: 12 дек 2017, 23:56
- Версия LabVIEW: 18
- Откуда: Врата надежды.
- Поблагодарили: 2 раза
Re: Чтение в кластер бинарных данных
Все это учел, разнес нужные куски по виайкам, ненужные кластера в каждом случае установил в hide, прописал пути файла. Все заработало.IvanLis писал(а): Нет, чтение и запись никак не связаны (я в одном сделал для удобства).
Но считывающий должен только однозначно знать структуру данных, которую необходимо читать.
По этому я и с самого начала говорил о TypeDef.
Всех в который раз благодарю за своевременную поддержку и понимание
LabView 14,18
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Чтение в кластер бинарных данных
Я не говорил, что можно считать какой-то конкретный блок данных или элемент массива.Borjomy_1 писал(а):Сомнительно. Вы попробуйте несколько записей с разным количеством элементов массива в файл сохранить, а потом считать последнюю. С программной точки зрения функция чтения должна прочитать каждую запись со своей длиной, с учетом размеров всех ее элементов. Может, в 2016 и сделали такое, но я ОЧЕНЬ сильно сомневаюсь. Эта функция работает только с записями фиксированной длины, туда интегрирован встроенный TypeCast, который в строку-то скидывает, а вот обратно сложные типы восстановить не способен.
Структура пишется полностью одним махом и так же считывается.
Потом из нее можно уже выбрать необходимые данные.
В ранее выложенных я и делал массивы разного размера, они сохранены "по умолчанию".
Вот более рандомная структура массивов. Подобное проделывал и в 2010, но сейчас минимальная 2012.
Запихивал туда и изображения разной размерности и Enum и Variant, не встречался ни разу с ошибками. Если Вы продемонстрируете повторяемую ошибку, буду признателен.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 0 Ответы
- 506 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 878 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1230 Просмотры
-
Последнее сообщение Boxa
-
- 3 Ответы
- 272 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2455 Просмотры
-
Последнее сообщение rsv