LINUX.ORG.RU

История изменений

Исправление hobbit, (текущая версия) :

Общего для всех тегов там по сути дела одно — конструкция tag;type1;type2;...typeN:value — и она, разумеется, сплитится один раз в самом верху. Дальше начинается кто в лес, кто по дрова (иногда с повторяющимися элементами, вроде TYPE=, иногда без них).

Я в общем, догадываюсь, к чему ты клонишь. Подогнать vCard под некую стандартную грамматику, разобрать неким обобщённым парсером, а потом уже из полученного дерева дёргать поля. Угадал?

Не то, чтобы это не метод. Вполне себе метод. И да, то, что написано в RFC, в этот метод уложится, и скорее всего, не особо сложно. Только вот беда, реальная жизнь в RFC укладываться не хочет. И если у меня парсер, написанный по канонам, наткнётся на тот хтонический ужас, который мне время от времени присылают с расширением .VCF, он его, скорее всего, отбросит полностью. В лучшем случае выдаст осмысленное сообщение об ошибке. А дальше-то что, у меня программа не для «программистов vCard-файлов», а для более-менее обычных пользователей. Приложения «Контакты» и прошивки пишут не они, не им и расхлёбывать.

А вот мой низкоуровневый «байтосношательский» метод вытащит всё, что знает, про то, что не знает — выдаст предупреждения. Я считаю, это надёжнее. Хотя некоторый рефакторинг коду действительно не помешает.

Ну и кроме форматов, основанных на vCard, моя программа понимает ещё некоторое количество более-менее экзотики (но да, это не в vcarddata.cpp, это в других классах) и всё это приводит в одну структуру.

Исправление hobbit, :

Общего для всех тегов там по сути дела одно — конструкция tag:type1;type2;...typeN:value — и она, разумеется, сплитится один раз в самом верху. Дальше начинается кто в лес, кто по дрова (иногда с повторяющимися элементами, вроде TYPE=, иногда без них).

Я в общем, догадываюсь, к чему ты клонишь. Подогнать vCard под некую стандартную грамматику, разобрать неким обобщённым парсером, а потом уже из полученного дерева дёргать поля. Угадал?

Не то, чтобы это не метод. Вполне себе метод. И да, то, что написано в RFC, в этот метод уложится, и скорее всего, не особо сложно. Только вот беда, реальная жизнь в RFC укладываться не хочет. И если у меня парсер, написанный по канонам, наткнётся на тот хтонический ужас, который мне время от времени присылают с расширением .VCF, он его, скорее всего, отбросит полностью. В лучшем случае выдаст осмысленное сообщение об ошибке. А дальше-то что, у меня программа не для «программистов vCard-файлов», а для более-менее обычных пользователей. Приложения «Контакты» и прошивки пишут не они, не им и расхлёбывать.

А вот мой низкоуровневый «байтосношательский» метод вытащит всё, что знает, про то, что не знает — выдаст предупреждения. Я считаю, это надёжнее. Хотя некоторый рефакторинг коду действительно не помешает.

Ну и кроме форматов, основанных на vCard, моя программа понимает ещё некоторое количество более-менее экзотики (но да, это не в vcarddata.cpp, это в других классах) и всё это приводит в одну структуру.

Исходная версия hobbit, :

Общего для всех тегов там по сути дела одно — конструкция tag:type1:type2:...typeN;value — и она, разумеется, сплитится один раз в самом верху. Дальше начинается кто в лес, кто по дрова (иногда с повторяющимися элементами, вроде TYPE=, иногда без них).

Я в общем, догадываюсь, к чему ты клонишь. Подогнать vCard под некую стандартную грамматику, разобрать неким обобщённым парсером, а потом уже из полученного дерева дёргать поля. Угадал?

Не то, чтобы это не метод. Вполне себе метод. И да, то, что написано в RFC, в этот метод уложится, и скорее всего, не особо сложно. Только вот беда, реальная жизнь в RFC укладываться не хочет. И если у меня парсер, написанный по канонам, наткнётся на тот хтонический ужас, который мне время от времени присылают с расширением .VCF, он его, скорее всего, отбросит полностью. В лучшем случае выдаст осмысленное сообщение об ошибке. А дальше-то что, у меня программа не для «программистов vCard-файлов», а для более-менее обычных пользователей. Приложения «Контакты» и прошивки пишут не они, не им и расхлёбывать.

А вот мой низкоуровневый «байтосношательский» метод вытащит всё, что знает, про то, что не знает — выдаст предупреждения. Я считаю, это надёжнее. Хотя некоторый рефакторинг коду действительно не помешает.

Ну и кроме форматов, основанных на vCard, моя программа понимает ещё некоторое количество более-менее экзотики (но да, это не в vcarddata.cpp, это в других классах) и всё это приводит в одну структуру.