2011-01-07 2 views
0

Мне нужно импортировать файл ascii с пользовательским файловым форматом.Импорт пользовательского формата ascii из файла

Некоторые данные хранятся в блоках с начальным блоком и конечным блоком. Другие данные сохраняются без разделителей блоков.

Одним из примеров является:
$ Лист
S PosX Posy ИтХ Димы
Список Листовые этикетки
$ EndSheet

Другой:
Текст Примечания posx posy размер ориентации ~
Текст

Теперь, какой был бы лучший/самый общий способ импорта этих данных в какую-то структуру?

С уважением
Jakob Justesen

+5

Ваша цель немного неясно - можно определить лучший? Если у вас есть только два формата файлов, и вам нужен только один инструмент для его получения, тогда общий не может быть полезной второй целью. –

+0

Вы не предоставили достаточно информации для значимого ответа. –

+0

Я написал несколько читателей файлов для форматов файлов, которые я не создал (вы пытаетесь импортировать файл, созданный другим приложением, у которого у вас нет исходного кода?). Вы должны знать разделители данных, если поля являются необязательными и т. Д. Без этого знания вы не можете определить анализатор. – Tony

ответ

1

Вы будете должны прочитать строку: если это блок начинает затем передавать в метод, который будет обрабатывать блок чтения. Если это не так, то передайте метод, который будет обрабатывать неблокированное чтение.

Самый «общий» способ сделать это - иметь заводской метод, который возвращает вам необходимый класс Reader. Некоторые псевдо-код может выглядеть следующим образом:

Open [File] 
while not EOF 
    Read [Line] 
    var [Reader] = ReaderFactory.GetReader([Line]) 
    var [Record] = [Reader].Read([File]) 
    Do what you want with record 
wend 
Close [File] 

Как вы представляете разные типы записей, я оставляю в качестве упражнения для вас :)

+0

Спасибо! это похоже на то, что я мог бы использовать. Хорошая идея с ReaderFactory. – JakobJ

Смежные вопросы