Как правильно решить такую задачу
От: J_K  
Дата: 03.11.10 23:54
Оценка:
Здравствуйте,
вопрос скорее практического характера, но требует архитектурного подхода... если что, перенесите в правильный раздел.
Итак, имеем: документ (Excel или text), содержащий некоторую инфу. На выходе надо получить текстовый файл, содержащий информацию, строго отформатированную. Т.е. на каждое значение выделяется строго определенного кол-во байт. Например:
0-5 Number
6-50 Name
51 — 59 Transaction number
и т.д.

Сейчас программа тупо хардкодит. Т.е. выделяет строку определенной длины (длина файла известна заранее, и не меняется), и потом вставляет значение: на позиции от 0 до 5 — Number и т.д. Разумеется, как только требуется добавить формат нового документа, требуется переписывать это дело. Мы с начальником сошлись, что лучшим решением было бы использовать какие-нибудь темплейты. Но я теперь думаю, как должен выглядеть этот темплейт. Один из вариантов, мог бы быть например xml файл, в таком виде:
<Number start="0" length="6">
<Name start="6" length="55">
Можно даже без длины, и так понятно. И прога бы просто парсила его и вставляла куда что надо. Но может есть какие-то решения получше?
Спасибо
Life is very short and there's no time
for fussing and fighting... (C) Paul McCartney & John Lennon
Re: Как правильно решить такую задачу
От: __kot2  
Дата: 04.11.10 09:57
Оценка:
Здравствуйте, J_K, Вы писали:
J_K>Сейчас программа тупо хардкодит. Т.е. выделяет строку определенной длины (длина файла известна заранее, и не меняется), и потом вставляет значение: на позиции от 0 до 5 — Number и т.д. Разумеется, как только требуется добавить формат нового документа, требуется переписывать это дело.
если выделить весь общий функционал всех писалок в общий некий стрим (по типу std::cout), то переписывать не так уж и много надо будет.
но если есть желание городить xml, то берите xml парсер, заведите ключевые слова, научите ваш стрим инициализироваться от этого распарсенного xml по ключевым словам

если же хочется что-то "типа xml, но без xml", сделайте класс например Formatter, чтобы работал примерно так:
formatter.add(number, 5).add(name, 5).add(transaction_num, 10);

где number, name, transactio_num — функторы, которые могут по индексу выдавать строку, или константы, а внутри форматтера уже по ним принимается решение откуда строку брать, тут что больше понравится

потом там
stream.write(formatter, document);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.