こんにちは、私は邪悪な銀河帝国に対する反乱のプログラムライターです。現在、デス・スターへの大胆な攻撃の準備をしています。
X-WingとY-Wingの戦闘機に搭載されているパイロット、ドロイド、システムに関する膨大な情報のデータベースを作成しました。これらの戦闘機は間もなくデススターを襲撃します。情報にすばやくアクセスする必要があるため、ユーザーがテキストの文字列を入力して、取得するデータを指定できるシステムを設計しました。
ユーザーが検索できるフィールドは多数あります。たとえば、ユーザーがR2D2に関するデータを検索したい場合は、クエリ「DROID:R2D2」を入力して、このデータをすばやく見つけることができます。レッドチームのすべてのパイロット、ドロイド、およびシステムに関するデータが必要な場合は、「TEAM:REDTEAM」と入力できます。
ただし、システムはより複雑なクエリを処理するように設計されています。前のクエリからわかるように、データフィールド名とデータ値はコロン:
文字で区切られています。ユーザーは、フィールドごとに複数の値を検索し、一度に複数のフィールドを検索できる必要があります。
これが私の上級ユーザーに典型的なクエリです: "SHIPTYPE:X-WING、Y-WING; LOCATION:docking bay 94; DROIDTYPE:R2"
私はこれを処理した方法に非常に満足しています。この関数を使用しString.Split(';')
て読み取り、ユーザーが選択した3つのデータフィールドの値を取得します。String.Split('、') `を使用String.Split(':') to seperate the data field name from the value, and then I user
して、ユーザーが複数入力したさまざまなフィールド値を取得します。これがどのように機能するかを見ることができます。
ただし、1つの問題があります。レイア王女(彼女がどれほどうるさいのかご存知でしょう)は、ブラスターのキャリブレーション記録に「:」、「;」、「、」を使用することを主張しています。彼女がこのデータを照会しようとすると、彼女の照会は私のプログラムには理解できません。彼女は、この問題が修正されない場合、デススターはすぐに反乱軍の基地を破壊すると言います。
したがって、ユーザー入力を解析するための優れたプラクティスを提案するための支援をお願いします。どうすれば私のプログラムをプリンセスレイアのために機能させることができますか?
更新 私は自分の質問に対する答えについて推測します。Cフレーバーの言語でプログラミングすることを学んだとき、文字列リテラルで通常予約されている文字を指定できる「エスケープシーケンス」について学びました。(たとえば、「A」文字は通常、文字列リテラルを終了しますが、「」を使用して「エスケープ」できます)プログラムで同様のことを行うのは良い考えだと思いますが、どうなるかわかりません。それを達成するための最良の方法である。このデススターの攻撃の準備をする前は、私のプログラミング経験のほとんどは水分気化器のバイナリ言語でしたので、これは私にとって新しいことです。