Привет, я - автор программы восстания против злой галактической империи. Прямо сейчас мы готовимся к дерзкому нападению на Звезду Смерти.
Я создал обширную базу данных о наших пилотах, дроидах и системах на борту наших истребителей X-Wing и Y-Wing, которые вскоре атакуют Звезду Смерти. Ввиду наших критических потребностей в быстром доступе к информации я разработал систему, в которой пользователь может ввести строку текста, чтобы указать, какие данные он хочет получить.
Существует множество полей, по которым пользователь может искать. Например, если пользователь хочет найти данные о R2D2, он может ввести запрос «DROID: R2D2» и быстро найти эти данные. Если ему нужны данные обо всех пилотах, дроидах и системах для Red Team, он может ввести «КОМАНДА: КРАСНАЯ КОМАНДА».
Однако система предназначена для обработки более сложных запросов. Как видно из предыдущего запроса, имя поля данных и значение данных разделяются двоеточием :
. Пользователи должны иметь возможность поиска по нескольким значениям для каждого поля и поиска по нескольким полям одновременно.
Вот запрос, типичный для моих более продвинутых пользователей:
"SHIPTYPE: X-WING, Y-WING; РАСПОЛОЖЕНИЕ: стыковочный отсек 94; DROIDTYPE: R2"
Я вполне доволен тем, как я справился с этим.
Я использую функцию String.Split(';')
для чтения, чтобы получить значения трех полей данных, выбранных пользователем. Я использую String.Split(':') to seperate the data field name from the value, and then I user
String.Split (',') `, чтобы получить различные значения поля, где пользователь ввел более одного. Вы можете увидеть, как это работает.
Однако есть одна проблема. Принцесса Лея (вы знаете, какая она суетливая) настаивает на использовании «:», «;» и «,» в своих записях калибровки бластера. Когда она пытается запросить эти данные, ее запросы не понятны моей программе. Она говорит, что Звезда Смерти скоро уничтожит базу повстанцев, если эту проблему не исправить.
Поэтому, я прошу вас помочь в предложении хороших методов анализа пользовательских входных данных. Как мне заставить мою программу работать на принцессу Лею?
Обновление Я буду размышлять об ответе на свой вопрос. Когда я научился программировать на языках с C-языком, я узнал о «escape-последовательностях», где я могу указать обычно зарезервированный символ в своих строковых литералах. (например, «символ обычно завершает строковый литерал, но я могу« избежать »его, используя \») Я предполагаю, что было бы неплохо сделать что-то похожее с моей программой, но я не знаю, что бы быть лучшим способом достижения этого. До подготовки к этому нападению на «Звезду Смерти» большая часть моего опыта программирования была связана с бинарным языком испарителей влаги, поэтому для меня это ново.