Как оптимальным образом прочитать текстовый файл?
Как оптимальным образом прочитать текстовый файл?
Добрый день!
Предыстория: необходимо склеить несколько файлов (размером под 100мб, кол-во строк несколько миллионов ) в один, где каждому столбцу будет соответствовать файл. Во время чтения данных также необходимо производить обработку данных, в результате которой объем данных из файлов увеличивается еще сильнее (процедура ресемплирования)
Вопрос: как оптимальным образом реализовать считывание данных, чтобы весь процесс обработки занимал как можно меньшее время и использовал достаточно ограниченные ресурсы памяти?
пы.сы. текстовый файл - вынужденная мера, в дальнейшем будут использоваться бинарные
Спасибо.
Предыстория: необходимо склеить несколько файлов (размером под 100мб, кол-во строк несколько миллионов ) в один, где каждому столбцу будет соответствовать файл. Во время чтения данных также необходимо производить обработку данных, в результате которой объем данных из файлов увеличивается еще сильнее (процедура ресемплирования)
Вопрос: как оптимальным образом реализовать считывание данных, чтобы весь процесс обработки занимал как можно меньшее время и использовал достаточно ограниченные ресурсы памяти?
пы.сы. текстовый файл - вынужденная мера, в дальнейшем будут использоваться бинарные
Спасибо.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как оптимальным образом прочитать текстовый файл?
Привет! Это зависит от вида обработки данных.
Такой вариант:
открываешь все файлы и в цикле считываешь из каждого допустим 10 строк (Read Text File имеет такую опцию, где задаёшь количество строк для чтения), высчитываешь среднее арифметическое (или что там тебе нужно) склеиваешь в одну строку и записываешь её в другой файл.
Такой вариант:
открываешь все файлы и в цикле считываешь из каждого допустим 10 строк (Read Text File имеет такую опцию, где задаёшь количество строк для чтения), высчитываешь среднее арифметическое (или что там тебе нужно) склеиваешь в одну строку и записываешь её в другой файл.
Re: Как оптимальным образом прочитать текстовый файл?
Ну то, что читать по кускам это понятно)))) Обработка заключается в приведении данных к единому времени (для этого и используется ресемплирование и интерполяция)
Да, считывание всех файлов в одном цикле не могу реализовать, т.к. первая строка первого файла не соответствует первой строке второго файла и тд. Таким образом мне необходимо начала найти в файлах общую точку, а затем уже их склеивать. В параллельных циклах я это реализовал. только вот долго это все работает
Да, считывание всех файлов в одном цикле не могу реализовать, т.к. первая строка первого файла не соответствует первой строке второго файла и тд. Таким образом мне необходимо начала найти в файлах общую точку, а затем уже их склеивать. В параллельных циклах я это реализовал. только вот долго это все работает
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как оптимальным образом прочитать текстовый файл?
Так ты делаешь моё актуальное задание :-) Только у меня файлы два текстовых и один бинарный помноженное на три источника (итого 9 файлов) с разными частотами. Нужно делать то же самое - привести все файлы к общему времени и общей заданной частоте с помощью интерполяции.
Да, сначала ищешь общую точку времени и запоминаешь её. Потом создаёшь свой интервал (растр) времени, к которому ты будешь интерполировать. Ну и далее из каждого файла считываешь куски (размеры кусков зависят от частоты) и интерполируешь.
Да, сначала ищешь общую точку времени и запоминаешь её. Потом создаёшь свой интервал (растр) времени, к которому ты будешь интерполировать. Ну и далее из каждого файла считываешь куски (размеры кусков зависят от частоты) и интерполируешь.
Re: Как оптимальным образом прочитать текстовый файл?
не, у меня попроще))) Частота 4 Гц, но период опроса на датчиках немного плавает (микросекунды). Нет общего синхросигнала, поэтому приходится сводить все данные к единой шкале (интерполяция при таких частотах вполне себе допустима). Я беру одну шкалу времени, а остальные разбиваю, чтобы стало 10 отсчетов на 1мс (при том, что точность сведения равна 1мс), ну и далее уже склеиваю.
Можно поподробнее о поиске начального времени? Сейчас я читаю файл (упорядочивание по имени позволяет выбрать самый поздний - а значит и опорный - файл и найти начальную точку для всех файлов), ищу самое маленькое время конца записи и по нему обрезаю остальные, а далее идет сведение. чтение на данный момент идет не кусками, что очень меня огорчает))
Можно поподробнее о поиске начального времени? Сейчас я читаю файл (упорядочивание по имени позволяет выбрать самый поздний - а значит и опорный - файл и найти начальную точку для всех файлов), ищу самое маленькое время конца записи и по нему обрезаю остальные, а далее идет сведение. чтение на данный момент идет не кусками, что очень меня огорчает))
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как оптимальным образом прочитать текстовый файл?
Примерно так: считываешь из всех файлов первую строку (начальное время) и последнюю строку (конечное время). Из первого находишь максимум из последнего минимум. Это твой общий промежуток времени (остальное "обрезается"). Его разбиваешь на временной растр с заданной частотой. И к этому растру интерполируешь все файлы, по кусочкам.
Re: Как оптимальным образом прочитать текстовый файл?
а тут возникает неожиданный для самого себя вопрос: как по-быстрому считать последнюю запись?)))
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как оптимальным образом прочитать текстовый файл?
Угу, интересный вопрос. Просто переставляешь File Position на какое то количество байт (больше длины одной строки) с конца и пытаешься считать одну строку и преобразовать данные. Если ошибки не выскакивает, то вот и она, последняя строка.
Re: Как оптимальным образом прочитать текстовый файл?
гыгыгы, я думал что это достаточно извращенный метод, ан нет))) завтра буду пробовать, спасибо
-
Jakob Brontfeyn
- expert
- Сообщения: 1729
- Зарегистрирован: 28 фев 2008, 11:01
- Награды: 6
- Благодарил (а): 1 раз
- Контактная информация:
Re: Как оптимальным образом прочитать текстовый файл?
в общем решил я свою задачу для случая с двумя файлами, все работает нормально. Но когда взялся за масштабирование, чтобы с различным числом файлов работать, наткнулся на проблему:
я данные, считанные из файла, передаю в очередь (для каждого файла своя очередь) и обрабатываю их в параллельном цикле. В итоге ссылка на первую очередь почему-то получается битая.
Есть мнение, что такое получается из-за одновременного обращения на запись и чтение элемента очереди. Так ли это и если так, то как такого можно избежать?
я данные, считанные из файла, передаю в очередь (для каждого файла своя очередь) и обрабатываю их в параллельном цикле. В итоге ссылка на первую очередь почему-то получается битая.
Есть мнение, что такое получается из-за одновременного обращения на запись и чтение элемента очереди. Так ли это и если так, то как такого можно избежать?
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Как оптимальным образом прочитать текстовый файл?
А наименование "очереди" не повторяется случайно?Lancelot писал(а):Есть мнение, что такое получается из-за одновременного обращения на запись и чтение элемента очереди. Так ли это и если так, то как такого можно избежать?
Или может Вы уничтожаете ее раньше времени?
Должна же какая-то ошибка выдаваться... на что ругается?
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Re: Как оптимальным образом прочитать текстовый файл?
этого точно не происходит. Имя очереди формируется автоматически: file i
уничтожение происходит гораздо позже. Причем при проверке на двух файлах первый элемент - not refnum, зато второй file 2 как и положено (в первом случае извлекаю 0 элемент массива, во втором - первый)
уничтожение происходит гораздо позже. Причем при проверке на двух файлах первый элемент - not refnum, зато второй file 2 как и положено (в первом случае извлекаю 0 элемент массива, во втором - первый)
Re: Как оптимальным образом прочитать текстовый файл?
Дело было не в бабине... осторожнее используйте Array AND, он возвращает истину не только когда все значения равны 1, но и когда массив значений пустой. На этом то я и накололся) Очереди закрывались, а я не понимал почему
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 15 Ответы
- 949 Просмотры
-
Последнее сообщение Юрий
-
- 4 Ответы
- 957 Просмотры
-
Последнее сообщение jane_wild
-
- 12 Ответы
- 594 Просмотры
-
Последнее сообщение Sergey Puzanov