Преобразование файла

Работа с файлами и базами данных
Ответить
kkkostya
user
user
Сообщения: 73
Зарегистрирован: 04 фев 2012, 12:31
Версия LabVIEW: 2014-2019
Контактная информация:

Преобразование файла

Сообщение kkkostya »

Добрый день!

Вот такая простая задачка.
Есть файл строк вида "{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

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Преобразование файла

Сообщение IvanLis »

kkkostya писал(а):Но мне не нравится необходимость загружать в память весь исходный файл данных, и выходной массив, так как они могут быть и довольно большими.
Можно считывать/записывать файл частями.
Посмотрите Если сохраняемый файл слишком велик.

Строку лучше разбирать не на подстроки, а на числа и далее использовать их. Преобразование в String делать непосредственно перед сохранением.
Str.png
Str.png (13.73 КБ) 4156 просмотров
У меня в системе в качестве разделителя используется запятая, если у Вас точка, то нужно подправить Format String.

2D массив не может хранить колонки или строки разной длины, они в любом случае будут дописаны какими-то значениями до самого длинного.
Если число в данной позиции не определено, то ему можно присвоить NaN.
kkkostya
user
user
Сообщения: 73
Зарегистрирован: 04 фев 2012, 12:31
Версия LabVIEW: 2014-2019
Контактная информация:

Re: Преобразование файла

Сообщение kkkostya »

С одной стороны, я тоже думал о чтении файла по кускам, но на самом деле он все же не слишком велик (меньше 20 Мб). Тоесть преобразование файла занимает 20-30 секунд, что некритично, но нескослько неудобно (мне-то все равно, но некоторые черезчур нервные пользователи могут решить, что программа повисла и начнут нажимать разные кнопочки :D :D ). Видимо придется вывести экран сообщения, типа подождите идет запись на диск.
Относительно пункта " Строку лучше разбирать не на подстроки, а на числа и далее использовать их. Преобразование в String делать непосредственно перед сохранением." так можно делать в простом примере, но в реальном файле формат данных будет более сложным: {номер канала--1байт} <значение---DBL> <time stamp> <внутренний таймер --- 1байт>. Нужно ли тогда преобразовывать все это в числа, а потом обратно в строку? Ведь в исходном файле у нас и так есть эти строки.
То что в 2D массиве все колонки одинаковой длины я понимаю, ну это нестрашно, при инициализации он и так заполняется пустыми строками.Конечный файл в дальнейшем будет открыватся ORIGINом, который пустые строки просто игнорирует.
Спасибо за проявленный интерес и советы, Костя.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Преобразование файла

Сообщение IvanLis »

kkkostya писал(а):черезчур нервные пользователи могут решить, что программа повисла и начнут нажимать разные кнопочки
тут можно сделать типа индикатора обработки (от 0 до 100 %)
kkkostya писал(а):в реальном файле формат данных будет более сложным
тогда наверное смысла нет
kkkostya писал(а):при инициализации он и так заполняется пустыми строками
я сразу не заметил, а Вы инициализируете 2D массив размерностью равной 1D - это пессимистичный вариант, по логике у Вас должен быть массив в 4 раза короче
kkkostya
user
user
Сообщения: 73
Зарегистрирован: 04 фев 2012, 12:31
Версия LabVIEW: 2014-2019
Контактная информация:

Re: Преобразование файла

Сообщение kkkostya »

"я сразу не заметил, а Вы инициализируете 2D массив размерностью равной 1D - это пессимистичный вариант, по логике у Вас должен быть массив в 4 раза короче"

Я сам всю свою пустую голову на этом сломал :crazy:. Но так как в общем случае возможено состояние с данными только одного канала, тои получилось "учетверение" массива :shok:. ПО хорошему, нужно было бы сперва провести подсчет сколько раз встречаются значения с каждого канала и выбрать максимум, но время опереции...
В общем если нет каких-то РРРРЕВОЛЮЦИОННЫХ идей придется оставить все как есть.
С уважением, Костя
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Преобразование файла

Сообщение IvanLis »

kkkostya писал(а):ПО хорошему, нужно было бы сперва провести подсчет сколько раз встречаются значения с каждого канала и выбрать максимум, но время опереции...
я бы попробовал следующим образом
1. Инициализировал четыре массива (колонка) длинною 0
2. потом дописывал в конец новое значение, делать это можно не считая элементов
3. а по окончании объединил бы и получил один 2D массив
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: Преобразование файла

Сообщение IORIK »

Здравствуйте kkkostya, меня тоже заинтересовала ваша задача.
ваш пример посмотреть не могу, поэтому пришлось сочинить что-то аналогичное. Возможно, мой вариант будет вам чем-то полезен.
fig1.jpg
Separate_String Data.vi
(50.16 КБ) 131 скачивание
Затем все можно объединить в 2D массив и на запись
kkkostya
user
user
Сообщения: 73
Зарегистрирован: 04 фев 2012, 12:31
Версия LabVIEW: 2014-2019
Контактная информация:

Re: Преобразование файла

Сообщение kkkostya »

Ну чем-то конечно полезен. Однако, вроде бы предпочтительней применять не Bild Array а Insert into.
С уважением Костя.
kkkostya
user
user
Сообщения: 73
Зарегистрирован: 04 фев 2012, 12:31
Версия LabVIEW: 2014-2019
Контактная информация:

Re: Преобразование файла

Сообщение kkkostya »

IvanLis писал(а):
я бы попробовал следующим образом
1. Инициализировал четыре массива (колонка) длинною 0
2. потом дописывал в конец новое значение, делать это можно не считая элементов
3. а по окончании объединил бы и получил один 2D массив
Ну вот сделал новый вариант, смотрите. Жду возможных тапков и гнилых помидоров. :wink:
Всем Огромное СПАСИБА, а IvanLisу особенное, Костя.
Вложения
Запись2.vi
(41.44 КБ) 127 скачиваний
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Преобразование файла

Сообщение IvanLis »

kkkostya писал(а):Ну вот сделал новый вариант, смотрите. Жду возможных тапков и гнилых помидоров.
Все верное, но Вы пропустили:
2. потом дописывал в конец новое значение, делать это можно не считая элементов
Если значение позиции не задавать, то запись будет осуществляться в конец массива, что Вам и надо.
Так что избавляйтесь от подсчета позиции нового элемента в массиве.
kkkostya
user
user
Сообщения: 73
Зарегистрирован: 04 фев 2012, 12:31
Версия LabVIEW: 2014-2019
Контактная информация:

Re: Преобразование файла

Сообщение kkkostya »

Все избавился.

Теперь спать, спать, спать.

P.S. Еще раз всем всевозможные вкусности и благодарности. :drink:
Костя.
Вложения
Запись3.vi
(38.76 КБ) 133 скачивания
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Сохранение данных»