как получить строку с "регулярным выражением" и набором элементов - PullRequest
1 голос
/ 28 января 2011

У меня есть набор элементов, которые я хочу поместить в строку, но я не знаю порядок или правильный формат, и я позволяю «пользователю» определить эту конфигурацию, затем я хочу проанализировать это выражение ивернуть строку с заданным набором объектов.

примеров ...

с учетом набора элементов [a1, a2, a3, a4] и некоторых выражений

"Printing items: (item)[0] (, item)[2,n-1] and (item)[n]" 

производит

"Printing items: a1, a2, a3 and a4"

Другой пример:

"Another way: we have (item)[0] and {n-1} others (</br> item)[2,n-1] </br> and (item)[n]"

результаты -

Another way: we have a1 and 3 others 
a2
a3
and a4.

Я использовал пользовательскую запись, но, возможно, есть что-то, что может мне помочь, или, возможно, стандартная запись уже сделаназа это.Есть идеи?Какой лучший способ приблизиться к решению.

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 января 2011

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

Я могу представить три возможных решения в зависимости от того, насколько гибко вы хотите предложить и сколько усилий вы хотите приложить.

1) Самое простое и наименее гибкое решение - использовать string.Format (). Это позволит пользователям решать, какие элементы отображать и в каком порядке, но требует от пользователя ссылки на каждое значение по индексу вместо имени и не может обрабатывать произвольные наборы данных. Также вам необходимо обработать исключение FormatException, если пользователь пытается сослаться на несуществующее значение.

2) Еще одна возможность - создать данные в стабильном формате xml и позволить пользователю предоставить xslt. Это работает лучше всего для небольшого числа больших выходных данных, поскольку xslt может быть немного запутанным для большого количества простых выходных данных. Кажется, что пространство имен System.Xml.Xsl предоставляет механизм Xslt, но я никогда не пытался его использовать.

3) Вы можете использовать шаблонный движок .NET. Есть еще один вопрос, касающийся шаблонизаторов в .NET, но я никогда не использовал ни одного из них.

Можете ли вы порекомендовать шаблонный движок .net?

1 голос
/ 28 января 2011

Типичный разбор строк.

Я бы сказал, удалите ссылку на элемент, если у вас нет нескольких списков.Затем добавьте escape-символ.

Печать элементов: # item # 0 #, # item # 2,% n-1%, "," # и # item #% n% #

Другой способ: у нас есть # item # 0 # и% n-1% others # item # 2,% n-1%, "" # и # item #% n% #

Это было бы намного прощедля анализа.

Все, что находится между%, является вычислением, # обозначает ссылку.Если ссылка на список, второй и третий # заключают индекс.Запятая указывает на диапазон.Вторая запятая указывает на символ разделения.

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

Найдите ваш escape-символ, если это ссылка на массив, посмотрите, есть ли еще этот escapeсимвол, если вы найдете запятую перед третьим escape-символом, у вас есть диапазон, вторая запятая и разделитель элементов.

Тогда вы можете просто токенизировать строку вместо интерпретации скобок.

0 голосов
/ 28 января 2011

Возможно, мне не хватает того, что здесь спрашивают, но я бы сделал следующее:

    Console.writeLine(messageToBePrinted);   
for(int i = 0;i<array.size;i++)  
{
  if(i == array.size -1){
    Console.writeLine(endFormat);  
 }
  else{
  Console.writeLine(normalFormat);  
 }
  Console.writeLine(array[i]);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...