2012-02-13 5 views
0

У меня есть задача разработки функции, которая генерирует идентификационные номера, которые следуют правилам, которые могут быть расширены позже.Строка templating

Например, Система может потребовать, чтобы их идентификационные номера были сгенерированы следующим образом: 18122424. Это будет разбито на: [DepartmentId][YearCreated][Sequential]. Отдел = 18, год = 12, Последовательность = 2424.

Как я могу разработать механизм правил, который позволяет пользователю изменить его? Я придумал, как формат:

  1. МЭИ (#)
  2. год (#)
  3. Seq (#)
  4. Инициалы (#) < - Название инициалов.

Таким образом, правило для этого Id выше: [Dept(2)][Year(2)][Seq(4)]. Если я получу это как строку, как ее разобрать, чтобы получить правила? Regex или обычный поиск строк?

Есть ли более простой или эффективный способ сделать это концептуально?

+0

Какой язык вы используете? – svick

+0

C#, для использования в asp.net mvc –

ответ

1

Если я прав, ваш вопрос заключается в разборе строки правила, то есть в поиске имен полей и длин.

Я хотел бы работать одно поле в то время, и, возможно, использовать для RegExpr [букв (цифр)], как

\[{[A-Za-z]+}\({[0-9]+}\)\] 

(синтаксис MSVC, получить два отмеченных выражения).

Вам также потребуется сохранить словарь возможных имен полей и преобразовать цифры в целое число.

В качестве альтернативы, комбинированные C strchr и scanf могут делать трюк.

1

Это не «механизм правил», это просто шаблон.

Какой бы язык вы ни использовали, есть своего рода шаблон и способ указать все эти форматы. Просто используйте это.

1

Я не знаю, кто его поддержал.

Создание числа - вам сначала нужно решить шаблон. что-то вроде depid-year-seq. Предполагая, что у вас есть только эти 3 "Переменные". Затем вы должны иметь эти переменные, сопоставленные с исходным значением. используйте синтаксический анализатор строк и разделите шаблон «заданный» на -. Он даст вам массив с индексом 0 = depid, 1 = year, 2 = seq. Перебор массива и создать строку, используя соответствующие значения для каждой строки на данном индексе, то - 0 = depid = "18" - 1 = year = "18" + "12" = "1812" - 2 = seq = "1812" + "1212" = "18121212"

Обратный вы должны разобрать свой заданный номер, splillting его в 2- 2-rest .. .. я думаю, вы можете подобрать здесь.