私はこの問題にアプローチするために、ユーザーの入力を解析するために何が使用されているかを確認する必要があると考えています。 DateTime.Parseを使用している場合、解析される文字列があいまいであるときに例外がスローされます。
もちろん、プログラマはフィールド内の入力を解析する独自の方法を作成できます。一般的にプログラマは、情報を解析する際にあいまいなケースを扱うことに熱心ではありません。だから簡単にするためにDateTime.Parseメソッドを使って作業していると仮定しましょう。
パーサーが何かをあいまいと見なすことができるように、次のプログラムを作成しました。プログラムの出力は、この絵で示されています:
コードが実証DateTime.Parse:
あなたがに似た何かを行うことができます文字列に戻ってのDateTimeを変換するために
static void Main(string[] args)
{
string input = "";
while(input != "exit" || input != "Exit")
{
Console.Write("Input: ");
input = Console.ReadLine();
string inputDate = input;
//try to parse it
try
{
DateTime date = DateTime.Parse(inputDate);
Console.WriteLine(date+"\n");
}
catch
{
//Exceptions. String not valid because ambiguity
Console.WriteLine("Ambiguous.\n");
//In here can also perform other logic, of course
}
}
}
:日付が入力されていることのためにあなたが結果をacheiveことができるように
try
{
DateTime date = DateTime.Parse(inputDate);
Console.WriteLine(date+"\n");
string month = date.Month.ToString();
string day = date.Day.ToString();
string year = date.Year.ToString();
string resultingString = month + " " + day + " " + year ;
Console.WriteLine(resultingString);
}
catch(Exception e)
{
//Exceptions. String not valid because ambiguity
Console.WriteLine("Ambiguous");
}
あなたも、この方法では、この情報を使用して独自のパーサを作ることができます3文字の長さ:
static void Main(string[] args)
{
string input = "";
while(input != "exit" || input != "Exit")
{
Console.Write("Input: ");
input = Console.ReadLine();
string inputDate = input;
try
{
DateTime date = DateTime.Parse(inputDate);
Console.WriteLine(date+"\n");
string month = date.Month.ToString();
string day = date.Day.ToString();
string year = date.Year.ToString();
string resultingString = month + " " + day + " " + year;
//string resultingString = month + "/" + day + "/" + year;
Console.WriteLine(resultingString);
}
catch(Exception e)
{
//Exceptions. String not valid because ambiguity
try
{
Console.WriteLine(myParser(inputDate));
}
catch
{
Console.WriteLine("Ambiguous");
}
//Console.WriteLine("Ambiguous.\n");
//In here can also perform other logic, of course
}
}
}
static string myParser(string input)
{
string month,day,year,date;
switch (input.Length)
{
//In the case that it's 1 character in length
case 1:
return "Ambiguous.";
case 2:
return "Ambiguous.";
//did user mean #/#/200#? hopefully not #/#/199#...
case 3:
month = input.Substring(0, 1);
day = input.Substring(1, 1);
year = input.Substring(2, 1);
date = month + " " + day + " " + year;
return date;
//did user mean # # 20##
//or # ## 200#
//or ## # 200#
case 4:
return "Ambiguous";
//user probably means ## # ##
case 5:
return "Ambiguous";
case 6:
return "Ambiguous";
default:
return "Ambiguous";
}
}
同様に、あなたが戻っスラッシュ(/
)に日付を取得分と時間と、そのようなことなく、文字列の形式でフォーマットを区切りにしたい場合は...
case 3:
month = input.Substring(0, 1);
day = input.Substring(1, 1);
year = input.Substring(2, 1);
date = month + " " + day + " " + year;
DateTime dateTimeObj = DateTime.Parse(date);
month = dateTimeObj.Month.ToString();
day = dateTimeObj.Day.ToString();
year = dateTimeObj.Year.ToString();
string resultingString = month + "/" + day + "/" + year;
return resultingString;
ほとんどの場合、テキストボックスの値を設定し、特定の形式を使用して日付を書式設定、その後、現在までに入力を解析していますさ。 C#には、すべてのステップを一度に行うための「魔法の弾丸」はありません。それはどのように行われているかは、プラットフォーム(c#サーバ側、javaScriptクライアント側など)によって異なります。また、日付があいまいな場合(「10/2/2017」など)、「推測」するロジックがあるかもしれません。 –
それは理にかなっている。どのようにしてそれが行われるかにはあまりにも多くの変数があるかもしれません。私はそれがクライアントのサイトで行われていると言うことができ、ソフトウェアはC#/ .netにありますが、私が知っているJavaScriptは見たことがありません。私はそれを探す必要があります。あなたはこれをどう扱うかについて簡単な提案をしていますか?私はどのような方法で私たちがテキストを解析するか、私が見つけることができるすべての事例をコード化する必要があるかどうかを確かめることができませんでした。 (注:私は開発中のソフトウェアでこれを複製しようとしています) –