Чтение больших массивов числовых данных из текстового файла

Автор calc4fem, 7 августа 2014, 18:47

0 Пользователи и 1 гость просматривают эту тему.

calc4fem

Вопрос следующий:
В basic имеются стандартные для любого языка программирования функции чтения текстового файла.
Задача состоит в том, что приложение (для Calc) работает с массивом данных в таком файле. И требуется постоянно получать некоторые данные выборочно, что можно сделать каждый раз повторяя одни и те же операции по поиску и считыванию. Это будет наверняка очень долго.
Когда данные считываются с листа электронных таблиц - можно считывать их массивом целиком. А можно ли то же самое делать с текстовым файлом?
В данном случае есть возможность порядок выдачи текстовых данных менять произвольно.


rami

Алекс—Юстасу 8-): Война давно закончилась. Мы победили. Тексты можно не шифровать.
О каких текстовых файлах идёт речь? CSV? Или odt, txt или другие? Если можно примерчик с пояснениями что нужно получить.

Yakov

Посмотрите эту тему:
http://forumooo.ru/index.php/topic,4179.0.html
там как раз обсуждалась работа с большими объёмами данных из текстового файла

calc4fem

Спасибо за инфу. Можно или CSV или TXT
то есть если я считаю все это дело в память, в массив массивов - то оперировать будет быстрее чем OpenFile и чего то там Search ?
попробую поразбираться.

rami

Цитата: calc4fem от  8 августа 2014, 01:28Можно или CSV или TXT
Бабушка надвое сказала ??? файлы CSV открываются в Calc, а TXT в Writer. То что предложил Hasim работает только в Writer, в Calc у ThisComponent нет метода getText. К тому же это только первый шаг и что делать дальше не понятно, пока вы не предложите хоть какой-нибудь пример.
Цитата: calc4fem от  8 августа 2014, 01:28то есть если я считаю все это дело в память, в массив массивов - то оперировать будет быстрее чем OpenFile и чего то там Search ?
Инструменты "Поиск" и "Фильтр" в десятки, а то и в тысячи раз быстрее, чем любые манипуляции с массивами (речь идёт о больших массивах, а не о десяти ячейках)

Hasim

Цитата: rami от  8 августа 2014, 07:29Бабушка надвое сказала. файлы CSV открываются в Calc, а TXT в Writer. То что предложил Hasim работает только в Writer
Ерунда.
Файлы CSV - это обычные текстовые файлы, только отформатированы специальным образом.
Когда LibreOffice видит расширение CSV, то просто запускает Calc для чтения этого файла и конвертор для преобразования в электронную таблицу.
Замените у такого файла расширение CSV на расширение ODT, и этот файл откроется в Writer.

rami

Цитата: Hasim от  8 августа 2014, 08:33Ерунда
CSV— текстовый формат, предназначенный для представления табличных данных, поэтому лучше открывать в Calc и пользоваться мощными инструментами для обработки таблиц, которых нет в Writer. А вообще это беспредметный разговор, пока мы не узнаем о каких данных идёт речь, но в любом случае "Поиск" и "Фильтр" лучше и быстрее чем любые манипуляции с массивами

calc4fem

#7
Чтобы не быть голословным и туманным я могу конкретизировать вопрос
есть некий вывод в виде текстового файла http://svn.code.sourceforge.net/p/frame3dd/code/trunk/examples/exA.out
или то же в CSV http://svn.code.sourceforge.net/p/frame3dd/code/trunk/examples/exA_out.CSV
порядок вывода данных можно в принципе поменять - это простая программа на ANSI C, не думаю что там это сложно даже не зная языка.
Задача состоит в том чтобы выбирать определенные данные из этого файла. То есть в общем случае я не знаю позицию того что мне надо
и нужно делать some search по файлу каждый раз.
Вообще как я понял - задача типичная. Просто пытаюсь понять как ее целесообразней решить в данном контексте.
Может экспортировать макросом весь файл в Calc и работать с данными уже в нем. Или считывать содержимое в буфер просто.

rami

Цитата: calc4fem от  8 августа 2014, 19:16Задача состоит в том чтобы выбирать определенные данные из этого файла.
Какие данные нужно выбирать? И что с ними делать дальше?

calc4fem

например найти пользовательской функцией значение
под надписью
L O A D   C A S E   1   O F   2  ...

N O D E   D I S P L A C E M E N T S

для колонки Y-dsp и узла (node) 10

Функция возвратить -0.315889

И так много раз, еще много раз. Я знаю как это сделать в прицнипе, но не уверен насчет производительности того
что я имею в виду
Нужен рациональный путь как делать такие вещи (я понял так что это довольно общая задача обмена данными).

Hasim

Заменить у exA_out.CSV расширение на exA_out.ODS и открыть в Calc.

calc4fem

открывается как экспортер текстового файла и верно только в том случае если я в разделе Other (separator) указываю запятую
а как это дело можно оформить в Бэйсике? В смысле импорт тестового файла с заданными параметрами с созданием нового листа?

rami

Цитата: calc4fem от  8 августа 2014, 23:19а как это дело можно оформить в Бэйсике? В смысле импорт тестового файла с заданными параметрами с созданием нового листа?
Это не сложно сделать, я напишу макрос, а как выбирать нужный файл? Из определённой папки? А имя файла будет одно и тоже или разное?
Я ни как не пойму, что нужно делать с данными? Собрать в таблицу? Для диаграммы? Или для расчётов? Ведь не просто так нашёл и всё.

calc4fem

да я понимаю что это не сложно в принципе. вопрос как это делать оптимально для скорости, если учесть что таких операций с текстовым файлом будет довольно много. я думаю что в таком случае будет проще изменить вывод, чтобы он давал числа построчно с записью начальных параметров в начале файла. Тогда я смогу (зная структуру файла и считав общие параметры вывода - сколько узлов, сколько чего) вычислить номер строки нужного значения в файле и подобрать его прямиком оттуда. мне кажется что так будет быстро очень - всего то надо считать один блок в начале и определнное число на Nой позиции

Hasim

Цитата: calc4fem от  9 августа 2014, 01:10в таком случае будет проще изменить вывод, чтобы он давал числа построчно с записью начальных параметров в начале файла
То есть, есть возможность просто переписать источник данных для CSV (TXT)?
Тогда зачем все эти трудности?