Хорошие практики для синтаксического анализа вводимых пользователем данных с помощью специальных символов?

Приветствую, я автор программы восстания против злой галактической империи. Прямо сейчас мы готовимся к дерзкой атаке на Звезду Смерти.

Я создал обширную базу данных информации о наших пилотах, дроидов и систем на борту наших истребителей X-Wing и Y-Wing, которые вскоре атакуют Звезду Смерти. Из-за нашей критической потребности в быстром доступе к информации я разработал систему, в которой пользователь может ввести строку текста, чтобы указать, какие данные он хочет получить.

Пользователь может выполнять поиск по множеству полей. Например, если пользователь хочет найти данные о R2D2, он может ввести запрос «DROID: R2D2» и быстро найти эти данные. Если ему нужны данные обо всех пилотах, дроидах и системах Красной команды, он может ввести «КОМАНДА: КРАСНАЯ КОМАНДА».

Однако система предназначена для обработки более сложных запросов. Как видно из предыдущего запроса, имя поля данных и значение данных разделены двоеточием : . «ТИП КОРАБЛЯ: X-WING, Y-WING; РАСПОЛОЖЕНИЕ: стыковочный отсек 94; DROIDTYPE: R2»

Я вполне доволен тем, как я с этим справился. Я использую функцию String.Split (';') для чтения, чтобы получить значения трех полей данных, выбранных пользователем. Я использую String.Split (':'), чтобы отделить имя поля данных от значения, а затем я использую String.Split (',') `для получения различных значений полей, в которые пользователь ввел больше, чем один. Вы можете увидеть, как это работает.

Однако есть одна проблема. Принцесса Лея (вы же знаете, какая она привередливая) настаивает на использовании ":", ";" и "," в записях калибровки бластера. Когда она пытается запросить эти данные, ее запросы непонятны моей программе. Она говорит, что «Звезда Смерти» вскоре уничтожит базу повстанцев, если эта проблема не будет исправлена.

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

Обновление Я подскажу ответ на свой вопрос. Когда я научился программировать на языках со вкусом C, я узнал о «escape-последовательностях», где я могу указать обычно зарезервированный символ в своих строковых литералах. (например, символ "обычно завершает строковый литерал, но я могу" избежать "его с помощью \") Я предполагаю, что было бы неплохо сделать что-то похожее на мою программу, но я не знаю, что бы быть лучшим способом добиться этого. До подготовки к штурму Звезды Смерти большая часть моего опыта программирования была связана с двоичным языком испарителей влаги, так что это для меня в новинку.

8
задан Daniel Allen Langdon 28 February 2011 в 16:25
поделиться