Читаем данные из текстовых файлов
От: gok Россия  
Дата: 02.03.05 18:58
Оценка:
Наскучило адаптировать файлы данных с различными форматами и захотелось сделать что то более интеллектуальное.
Есть данные физических измерений, записанные в текстовые файлы. Формат строки каждого входного файла может различаться: это или [x1,x2,x3], или [x1,a1,a2,x2,x3,i1,i2], или еще чего (здесь x-double, a-string, i-integer). Но, ограничивая областью применения, можно получить набор аттрибутов, описывающих все возможные данные, скажем [x1,x2,x3,x4,i1,i2,i3,i4]. Мы знаем чтО каждый аттрибут строки значит и как его обрабатывать и мы знаем где аттрибут входного файла находится в нашем «метаформат»-ном файле (используя приведенные примеры):
[x1,x2,x3] –> [1, 2, 3, 0, 0, 0, 0, 0]
[x1,a1,a2,x2,x3,i1,i2] –> [1, 4, 5, 0, 6, 7, 0, 0]

Теперь вопрос: были ли где-нибудь подобные разработки и какие могут быть «подводные» камни?
gok
Re: Читаем данные из текстовых файлов
От: hrg Россия  
Дата: 04.03.05 21:02
Оценка:
gok -> Читаем данные из текстовых файлов

g> Теперь вопрос: были ли где-нибудь подобные разработки и какие могут

g> быть «подводные» камни?

http://xml.org/

<!-- Yury Kopyl aka hrg | Только взял боец гитару, сразу — видно
гармонист -->
Posted via RSDN NNTP Server 1.9
Re[2]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 04.03.05 21:07
Оценка:
Здравствуйте, hrg, Вы писали:
hrg>http://xml.org/

Недопонял, как тут хмл привязать. Построить описательные шаблоны?
А потом как? Пытаться просунуть файл через каждый шаблон?
Поясните, плиз!
gok
Re[3]: Читаем данные из текстовых файлов
От: hrg Россия  
Дата: 05.03.05 00:15
Оценка:
gok -> Re[2]: Читаем данные из текстовых файлов

g> Здравствуйте, hrg, Вы писали:

hrg>>http://xml.org/

g> Недопонял, как тут хмл привязать. Построить описательные шаблоны?

g> А потом как? Пытаться просунуть файл через каждый шаблон?
g> Поясните, плиз!

Есть данные физических измерений, записанные в текстовые файлы. Формат
строки каждого входного файла может различаться: это или [x1,x2,x3], или
[x1,a1,a2,x2,x3,i1,i2], или еще чего (здесь x-double, a-string, i-integer).
Но, ограничивая областью применения, можно получить набор аттрибутов,
описывающих все возможные данные, скажем [x1,x2,x3,x4,i1,i2,i3,i4]. Мы знаем
чтО каждый аттрибут строки значит и как его обрабатывать и мы знаем где
аттрибут входного файла находится в нашем «метаформат»-ном файле (используя
приведенные примеры):
[x1,x2,x3] –> [1, 2, 3, 0, 0, 0, 0, 0]
[x1,a1,a2,x2,x3,i1,i2] –> [1, 4, 5, 0, 6, 7, 0, 0]


ну и пиши себе:

<result>
<x1>1</x1>
<x2>2</x2>
<x3>3</x3>
</result>


Все, что не нашлось при парсинге — равно нулю

<!-- Yury Kopyl aka hrg | Хоббиты — маздай! Мордовия — фарева! -->
Posted via RSDN NNTP Server 1.9
Re[4]: Читаем данные из текстовых файлов
От: WeSuckYoungBlood  
Дата: 05.03.05 13:13
Оценка:
Здравствуйте, hrg, Вы писали:

hrg>Все, что не нашлось при парсинге — равно нулю

Для этого есть XML Schema
... << RSDN@Home 1.1.3 stable >>
Re[4]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 08.03.05 01:13
Оценка:
Здравствуйте, hrg, Вы писали:
hrg>ну и пиши себе:

hrg>

hrg><result>
hrg> <x1>1</x1>
hrg> <x2>2</x2>
hrg> <x3>3</x3>
hrg></result>


hrg>Все, что не нашлось при парсинге — равно нулю


Чего то не догоняю: как обьяснить хмл что x2 в одних файлах во 2-ой колонке, в других в 4-ой? Или на каждый формат свой шаблон писать? А в схеме описывать все возможные случаи? А как хмл обработает тип данных? Как сказать что х2 это вещественные, а колонка i1 целые числа?
gok
Re[5]: Читаем данные из текстовых файлов
От: hrg Россия  
Дата: 08.03.05 12:35
Оценка:
gok -> Re[4]: Читаем данные из текстовых файлов

hrg>>ну и пиши себе:


hrg>>

hrg>><result>
hrg>> <x1>1</x1>
hrg>> <x2>2</x2>
hrg>> <x3>3</x3>
hrg>></result>


hrg>>Все, что не нашлось при парсинге — равно нулю


g> Чего то не догоняю: как обьяснить хмл что x2 в одних файлах во 2-ой

g> колонке, в других в 4-ой? Или на каждый формат свой шаблон писать? А
g> в схеме описывать все возможные случаи? А как хмл обработает тип
g> данных? Как сказать что х2 это вещественные, а колонка i1 целые числа?

Забудь про колонки — у тебя дерево
Насчет типа — кто тебе мешает использовать атрибуты:

<result>
<x1 type="int">1</x1>
<x2 type="float">2</x2>
<x3 type="sinked">3</x3>
</result>



<!-- Yury Kopyl aka hrg | Гордость мешает доходам! -->
Posted via RSDN NNTP Server 1.9
Re[6]: Читаем данные из текстовых файлов
От: Alex Alexandrov США  
Дата: 08.03.05 16:44
Оценка: +1 :)
Здравствуйте, hrg, Вы писали:

hrg>

hrg><result>
hrg> <x1 type="int">1</x1>
hrg> <x2 type="float">2</x2>
hrg> <x3 type="sinked">3</x3>
hrg></result>


Джентльмены, вы про разные вещи говорите. У вопрошающего, насколько я понял, файлы в текстовом формате уже есть и ему надо их распарсить в некоторые структуры данных времени выполнения. Вы же ему предлагаете сменить формат передачи данных на XML. Спору нет, предложение неплохое, но это напоминает ответ "Купи БМВ" в ответ на вопрос "Как починить трамблер в Москвиче?"...
[ Posted via RSDN@Home 1.1.4 beta 4 (303) listening to Cocteau Twins — Bluebeard ]
It's kind of fun to do the impossible (Walt Disney)
Re[7]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 08.03.05 18:15
Оценка:
Здравствуйте, Alex Alexandrov, Вы писали:

AA>Джентльмены, вы про разные вещи говорите. У вопрошающего, насколько я понял, файлы в текстовом формате уже есть и ему надо их распарсить в некоторые структуры данных времени выполнения. Вы же ему предлагаете сменить формат передачи данных на XML. Спору нет, предложение неплохое, но это напоминает ответ "Купи БМВ" в ответ на вопрос "Как починить трамблер в Москвиче?"...


А, ну вот теперь разложилось. Правда — ваша, Алекс. Нет, hrg, уже поздно менять формат данных, их тут на многие гигабайты.
Пока что создал «тупой» массивчик со всеми возможными аттрибутами, те позиция аттрибута == тип данных. Все это зашито намертво в код (что думаю не очень накладно). Осталась проблема распознания формата данных, но тут без пользователя не обойтись, ему вопрос в диалоге со списком поддерживаемых форматов. Вот такой вот неуклюжий дизайн. Кстати что то похожее сделано в ОДБС обмене данными: каждая таблица (файл формат в нашем случае) «накрыта» своим отдельным классом.
gok
Re: Читаем данные из текстовых файлов
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.03.05 09:27
Оценка:
Здравствуйте, gok, Вы писали:

gok>Наскучило адаптировать файлы данных с различными форматами и захотелось сделать что то более интеллектуальное.

gok>Теперь вопрос: были ли где-нибудь подобные разработки и какие могут быть «подводные» камни?
Ну, можно открыть такой файл драйвером ODBC. Тогда для каждого файла можно создать дескриптор формата, приводящий к тому, что тебе надо. Попробуй — может поможет.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 18.03.05 20:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, можно открыть такой файл драйвером ODBC. Тогда для каждого файла можно создать дескриптор формата, приводящий к тому, что тебе надо. Попробуй — может поможет.


Через файл dsn? Сналету чего то не получилось.
Те идея – получить коллекцию файловых дескрипторов и пытаться «пропихнуть» неизвестный файл через эту коллекцию?
gok
Re[3]: Читаем данные из текстовых файлов
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.03.05 04:16
Оценка:
Здравствуйте, gok, Вы писали:
gok>Через файл dsn? Сналету чего то не получилось.
А что не получилось? Надо использовать Microsoft Text Driver (.txt, .csv)
gok>Те идея – получить коллекцию файловых дескрипторов и пытаться «пропихнуть» неизвестный файл через эту коллекцию?
Я не понял вопроса, но на всякий случай — "да"
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 22.03.05 21:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А что не получилось? Надо использовать Microsoft Text Driver (.txt, .csv)


Я ожидал, что этот FileDSN (text driver .txt, .csv) будет создавать прослойку для общения с файлами, как классы для таблиц в СКЛ (class CTblTable : public CRecordset) с интерфейсом через DoFieldExchange().

Начал определять формат в DefineTextFormat диалоге, нажимаю Guess,
а он какую то чушь выдает: Cannot update. Database or object is read-only. Чуть позже вообще упал по памяти: odbcad32.dll referenced memory…

gok
Re[5]: Читаем данные из текстовых файлов
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.03.05 11:13
Оценка:
Здравствуйте, gok, Вы писали:
gok>Я ожидал, что этот FileDSN (text driver .txt, .csv) будет создавать прослойку для общения с файлами, как классы для таблиц в СКЛ (class CTblTable : public CRecordset) с интерфейсом через DoFieldExchange().
Очень интересно. Вообще-то DSN никаких прослоек не создает. DSN — это такая штука, которая описывает подключение к ODBC-совместимому источнику. А уже потом можно задействовать MFC-классы для работы с ODBC.
gok>Начал определять формат в DefineTextFormat диалоге, нажимаю Guess,
gok>а он какую то чушь выдает: Cannot update. Database or object is read-only. Чуть позже вообще упал по памяти: odbcad32.dll referenced memory…
Гм. Ты откуда это делал? Просто из Control Panel — ODBC Administrator — File data source — add?
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 23.03.05 18:45
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Очень интересно. Вообще-то DSN никаких прослоек не создает. DSN — это такая штука, которая описывает подключение к ODBC-совместимому источнику. А уже потом можно задействовать MFC-классы для работы с ODBC.

Да, да, дсн для этого и служит, я немного забежал уперед.

S>Гм. Ты откуда это делал? Просто из Control Panel — ODBC Administrator — File data source — add?


Да, точно через эту цепочку. Потом Add, выбираем MS TextDriver(*.txt,*csv), задаем имя дсн. Открывается odbc TextSetup диалог, перехожу в директорию с моим текстовым файлом, добавляю мое расширение, ОК(сохраняет файл с параметрами соединения). После создания этого дсн пытаюсь описать формат: Configure/DefineFormat. Тут то бонба и зарыта, не хочет он «угадывать». Ну ладно, описал аттрибуты руками, их всего то 5 и без заголовка. А дальше что? Как же его юзать? «Обертки» для такого дсн не сделать – нету его в мфс списке для CRecordset. Можно вызвать этот файл в соединении (dbase.OpenEx( _T( "DSN=…"), но в этом .dsn файле нету формата!
А что должно получиться? Должно ли быть описание формата в дсн файле? И будет ли дсн файл привязан к текстовому файлу? Или как?
gok
Re[7]: Читаем данные из текстовых файлов
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.03.05 04:55
Оценка:
Здравствуйте, gok, Вы писали:
gok>Да, точно через эту цепочку. Потом Add, выбираем MS TextDriver(*.txt,*csv), задаем имя дсн. Открывается odbc TextSetup диалог, перехожу в директорию с моим текстовым файлом, добавляю мое расширение, ОК(сохраняет файл с параметрами соединения). После создания этого дсн пытаюсь описать формат: Configure/DefineFormat. Тут то бонба и зарыта, не хочет он «угадывать». Ну ладно, описал аттрибуты руками, их всего то 5 и без заголовка. А дальше что? Как же его юзать? «Обертки» для такого дсн не сделать – нету его в мфс списке для CRecordset.
Странно. Возможно, надо было создавать не файловый DSN, а вовсе даже System или User?
gok>Можно вызвать этот файл в соединении (dbase.OpenEx( _T( "DSN=…"), но в этом .dsn файле нету формата!
Конечно нету.
gok>А что должно получиться? Должно ли быть описание формата в дсн файле? И будет ли дсн файл привязан к текстовому файлу? Или как?
Формат хранится отдельно. В твоей папочке должен был возникнуть файл schema.ini. В нем-то и описаны форматы файлов. Попробуй настроить хотя бы один файл, и увидишь, как оно работает. Потом ты сможешь создавать schema.ini сам, непосредственно перед тем, как подключиться к файлу.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Читаем данные из текстовых файлов
От: gok Россия  
Дата: 24.03.05 19:26
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Странно. Возможно, надо было создавать не файловый DSN, а вовсе даже System или User?


Фуу… наконец то сделал через systemDsn schema.ini и «завернул» дсн в мфс (подозреваю были ограничения по доступу). Меняя имя в GetDefaultConnect() можно переключаться на другой файл данных.
Да, этот подход работает!
Но по-моему ничем не хуже обычный fopen()/fclose(). Все равно придется под каждый формат создавать отдельный классик.
Спасибо за терпеливость! Последние мои сообщения были настоящим нытьем.
Да здравствует rsdn.ru!
gok
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.