Преобразование файла
-
- user
- Сообщения: 73
- Зарегистрирован: 04 фев 2012, 12:31
- Версия LabVIEW: 2014-2019
- Контактная информация:
Преобразование файла
Добрый день!
Вот такая простая задачка.
Есть файл строк вида "{1} 1000.234" , где 1--номер канала, который может принимать значения 1,2,3,4. Нужно сформировать другой файл из четырех колонок (в первой колонке значения измерений первого канала, во второй второго и т.д.), Важно, что количество отсчетов с каждого канала свое, даже возможна ситуация когда данные какого-то канала отсутствуют ( например 1,2,1,1,1,4,2,2,1,1,1,1...). Ну более наглядно все видно в приложенном VI.
Там первый цикл формирует исходный файл, а второй преобразует одномерный массив строк в двумерный, который потом и сохраняется с помощью соотв. файловых функций LV. Я только не стал делать разное количество отсчетов по разным каналам, поскольку преобразующая часть работает одинаково при любом их количестве.
Но мне не нравится необходимость загружать в память весь исходный файл данных, и выходной массив, так как они могут быть и довольно большими. Прошу совета, как улучшить данную програмку, особенно приветствуются предложения по радикальному упрощению и сокращению (может есть что-то готовое или близкое в недрах Function Pallete)
с уважением, Костя.
Вот такая простая задачка.
Есть файл строк вида "{1} 1000.234" , где 1--номер канала, который может принимать значения 1,2,3,4. Нужно сформировать другой файл из четырех колонок (в первой колонке значения измерений первого канала, во второй второго и т.д.), Важно, что количество отсчетов с каждого канала свое, даже возможна ситуация когда данные какого-то канала отсутствуют ( например 1,2,1,1,1,4,2,2,1,1,1,1...). Ну более наглядно все видно в приложенном VI.
Там первый цикл формирует исходный файл, а второй преобразует одномерный массив строк в двумерный, который потом и сохраняется с помощью соотв. файловых функций LV. Я только не стал делать разное количество отсчетов по разным каналам, поскольку преобразующая часть работает одинаково при любом их количестве.
Но мне не нравится необходимость загружать в память весь исходный файл данных, и выходной массив, так как они могут быть и довольно большими. Прошу совета, как улучшить данную програмку, особенно приветствуются предложения по радикальному упрощению и сокращению (может есть что-то готовое или близкое в недрах Function Pallete)
с уважением, Костя.
- Вложения
-
- Запись.vi
- (38.11 КБ) 132 скачивания
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Преобразование файла
Можно считывать/записывать файл частями.kkkostya писал(а):Но мне не нравится необходимость загружать в память весь исходный файл данных, и выходной массив, так как они могут быть и довольно большими.
Посмотрите Если сохраняемый файл слишком велик.
Строку лучше разбирать не на подстроки, а на числа и далее использовать их. Преобразование в String делать непосредственно перед сохранением. У меня в системе в качестве разделителя используется запятая, если у Вас точка, то нужно подправить Format String.
2D массив не может хранить колонки или строки разной длины, они в любом случае будут дописаны какими-то значениями до самого длинного.
Если число в данной позиции не определено, то ему можно присвоить NaN.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- user
- Сообщения: 73
- Зарегистрирован: 04 фев 2012, 12:31
- Версия LabVIEW: 2014-2019
- Контактная информация:
Re: Преобразование файла
С одной стороны, я тоже думал о чтении файла по кускам, но на самом деле он все же не слишком велик (меньше 20 Мб). Тоесть преобразование файла занимает 20-30 секунд, что некритично, но нескослько неудобно (мне-то все равно, но некоторые черезчур нервные пользователи могут решить, что программа повисла и начнут нажимать разные кнопочки ). Видимо придется вывести экран сообщения, типа подождите идет запись на диск.
Относительно пункта " Строку лучше разбирать не на подстроки, а на числа и далее использовать их. Преобразование в String делать непосредственно перед сохранением." так можно делать в простом примере, но в реальном файле формат данных будет более сложным: {номер канала--1байт} <значение---DBL> <time stamp> <внутренний таймер --- 1байт>. Нужно ли тогда преобразовывать все это в числа, а потом обратно в строку? Ведь в исходном файле у нас и так есть эти строки.
То что в 2D массиве все колонки одинаковой длины я понимаю, ну это нестрашно, при инициализации он и так заполняется пустыми строками.Конечный файл в дальнейшем будет открыватся ORIGINом, который пустые строки просто игнорирует.
Спасибо за проявленный интерес и советы, Костя.
Относительно пункта " Строку лучше разбирать не на подстроки, а на числа и далее использовать их. Преобразование в String делать непосредственно перед сохранением." так можно делать в простом примере, но в реальном файле формат данных будет более сложным: {номер канала--1байт} <значение---DBL> <time stamp> <внутренний таймер --- 1байт>. Нужно ли тогда преобразовывать все это в числа, а потом обратно в строку? Ведь в исходном файле у нас и так есть эти строки.
То что в 2D массиве все колонки одинаковой длины я понимаю, ну это нестрашно, при инициализации он и так заполняется пустыми строками.Конечный файл в дальнейшем будет открыватся ORIGINом, который пустые строки просто игнорирует.
Спасибо за проявленный интерес и советы, Костя.
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Преобразование файла
тут можно сделать типа индикатора обработки (от 0 до 100 %)kkkostya писал(а):черезчур нервные пользователи могут решить, что программа повисла и начнут нажимать разные кнопочки
тогда наверное смысла нетkkkostya писал(а):в реальном файле формат данных будет более сложным
я сразу не заметил, а Вы инициализируете 2D массив размерностью равной 1D - это пессимистичный вариант, по логике у Вас должен быть массив в 4 раза корочеkkkostya писал(а):при инициализации он и так заполняется пустыми строками
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- user
- Сообщения: 73
- Зарегистрирован: 04 фев 2012, 12:31
- Версия LabVIEW: 2014-2019
- Контактная информация:
Re: Преобразование файла
"я сразу не заметил, а Вы инициализируете 2D массив размерностью равной 1D - это пессимистичный вариант, по логике у Вас должен быть массив в 4 раза короче"
Я сам всю свою пустую голову на этом сломал . Но так как в общем случае возможено состояние с данными только одного канала, тои получилось "учетверение" массива . ПО хорошему, нужно было бы сперва провести подсчет сколько раз встречаются значения с каждого канала и выбрать максимум, но время опереции...
В общем если нет каких-то РРРРЕВОЛЮЦИОННЫХ идей придется оставить все как есть.
С уважением, Костя
Я сам всю свою пустую голову на этом сломал . Но так как в общем случае возможено состояние с данными только одного канала, тои получилось "учетверение" массива . ПО хорошему, нужно было бы сперва провести подсчет сколько раз встречаются значения с каждого канала и выбрать максимум, но время опереции...
В общем если нет каких-то РРРРЕВОЛЮЦИОННЫХ идей придется оставить все как есть.
С уважением, Костя
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Преобразование файла
я бы попробовал следующим образомkkkostya писал(а):ПО хорошему, нужно было бы сперва провести подсчет сколько раз встречаются значения с каждого канала и выбрать максимум, но время опереции...
1. Инициализировал четыре массива (колонка) длинною 0
2. потом дописывал в конец новое значение, делать это можно не считая элементов
3. а по окончании объединил бы и получил один 2D массив
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Re: Преобразование файла
Здравствуйте kkkostya, меня тоже заинтересовала ваша задача.
ваш пример посмотреть не могу, поэтому пришлось сочинить что-то аналогичное. Возможно, мой вариант будет вам чем-то полезен. Затем все можно объединить в 2D массив и на запись
ваш пример посмотреть не могу, поэтому пришлось сочинить что-то аналогичное. Возможно, мой вариант будет вам чем-то полезен. Затем все можно объединить в 2D массив и на запись
-
- user
- Сообщения: 73
- Зарегистрирован: 04 фев 2012, 12:31
- Версия LabVIEW: 2014-2019
- Контактная информация:
Re: Преобразование файла
Ну чем-то конечно полезен. Однако, вроде бы предпочтительней применять не Bild Array а Insert into.
С уважением Костя.
С уважением Костя.
-
- user
- Сообщения: 73
- Зарегистрирован: 04 фев 2012, 12:31
- Версия LabVIEW: 2014-2019
- Контактная информация:
Re: Преобразование файла
Ну вот сделал новый вариант, смотрите. Жду возможных тапков и гнилых помидоров.IvanLis писал(а):
я бы попробовал следующим образом
1. Инициализировал четыре массива (колонка) длинною 0
2. потом дописывал в конец новое значение, делать это можно не считая элементов
3. а по окончании объединил бы и получил один 2D массив
Всем Огромное СПАСИБА, а IvanLisу особенное, Костя.
- Вложения
-
- Запись2.vi
- (41.44 КБ) 127 скачиваний
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Преобразование файла
Все верное, но Вы пропустили:kkkostya писал(а):Ну вот сделал новый вариант, смотрите. Жду возможных тапков и гнилых помидоров.
Если значение позиции не задавать, то запись будет осуществляться в конец массива, что Вам и надо.2. потом дописывал в конец новое значение, делать это можно не считая элементов
Так что избавляйтесь от подсчета позиции нового элемента в массиве.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- user
- Сообщения: 73
- Зарегистрирован: 04 фев 2012, 12:31
- Версия LabVIEW: 2014-2019
- Контактная информация:
Re: Преобразование файла
Все избавился.
Теперь спать, спать, спать.
P.S. Еще раз всем всевозможные вкусности и благодарности.
Костя.
Теперь спать, спать, спать.
P.S. Еще раз всем всевозможные вкусности и благодарности.
Костя.
- Вложения
-
- Запись3.vi
- (38.76 КБ) 133 скачивания
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение