Шаблон для разбора текста с разделителями? - PullRequest
1 голос
/ 21 января 2012

Я работаю над парсером, который разбирает текст с разделителями.Пример

позиция 1-10: поле позиция 11-20: поле b позиция 21-30: поле c и т. Д.

Какие шаблоны проектирования я могу использовать для реализации?Я считаю, что я должен использовать шаблон посетителя

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Visitor шаблон ?! Просто прочитайте файл построчно и используйте substring():

String line = //...
String a = line.substring(0, 10);
String b = line.substring(10, 20);
String c = line.substring(20, 30);

Я что-то упустил? Вы можете уточнить свой вопрос?

2 голосов
/ 21 января 2012

Хотя нет необходимости использовать шаблон в ситуациях, когда формат вводимого текста всегда одинаков, в ситуации, когда формат должен измениться.Например, если вы считаете, что ваше приложение может поддерживать дополнительные форматы файлов в будущем, вам пригодится шаблон стратегии .

class LineData {
    public String a;
    public String b;
    public String c;
}
interface FileParser {
    List<LineData> parse(String fileName);
}
class FileParserFixed : FileParser {
    public int widthOfA;
    public int widthOfB;
    public int widthOfC;
    public List<LineData> parse(string fileName) {
    }
}
class FileParserDelimited : FileParser {
    public char delimiter;
    public List<LineData> parse(string fileName) {
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...