2017-10-11 1 views
0

私のpreviously asked questionでは、テキストファイルから特定の行をテキストボックスに表示しようとしていました。プログラムは、項目が存在しなくてもテキストファイルのデータを表示します。C#

私は解決策pinkfloydx33(これは私が執着しているものです)を提案し、両方の解決策が働いていましたが、文字列がファイル。

たとえば、次のいずれかを入力すると:1,01,001,2,02,002、それはコードと表示データを実行し続けます。どのように私はこれを修正することができます誰か教えてください?私は入力を制限することでこの問題を回避しようとしました(たとえば、4桁の数字を入力する必要があります)。しかし、私の問題は元のキーの長さが違うためです。

サンプルデータ

項目キー、追加された日付、製品名、ブランド、TYPE

0001,10/08/2017,5s、アップル、電話

0002,10/2017/08、S5、サムスン、電話

コードスニペット

string plist = @"sample_data.txt"; 

var line = File.ReadLines(plist).FirstOrDefault(l => l.Contains(txt_ik.Text)); 
if (line != null) 
{ 
    string[] parts = line.Split(','); 
    txt_data1.Text = parts[2]; 
    txt_data2.Text = parts[3]; 
    txt_data3.Text = parts[4]; 
    MessageBox.Show("It exists!"); 
} 
else 
{ 
    MessageBox.Show("Does not exist!"); 
} 

サンプル画像

EDIT

曖昧さのため申し訳ありません!ユーザーはプロダクトキーを入力する必要があります。あなたが提出し、そのアイテムがファイルに存在すると、それはテキストボックスにデータを表示することになっています。そうでない場合は、アイテムが存在しないと言うメッセージが飛び出します。

+0

意図した動作が何であるかはっきりしない – DiskJunky

+0

これは、「ITEM KEY」フィールドの値が4桁を超えることができることを意味しますか?だから12345789のIDを持つことができますか? – DonBoitnott

+0

@DonBoitnottはいアイテムキーは1234567890とすることができます。特定の長さはありません – nik

答えて

1

Contains返信true検索テキストが行のどこに存在する場合。 あなたは、この行を変更した場合:

var line = File.ReadLines(plist).FirstOrDefault(l => l.StartsWith(String.Format("{0},", txt_ik.Text))); 

var line = File.ReadLines(plist).FirstOrDefault(l => l.Contains(txt_ik.Text)); 

を使用すると、アイテム・キーは検索項目に等しいことを確認します。

String.Format("{0},", txt_ik.Text)と併せて、検索テキストにコンマを追加しています。
次に、最初の項目が検索テキストと等しいことを確認します。

+0

あなたは人生の節約になります!この知識を伝えてくれてありがとう! – nik

+0

非常に柔軟性がないようです。彼らが "02"を入力すると、あなたは厳密に "02"にマッチしています。 "00002"や "00000000002"にも一致させたくないですか?あなたは入力されたものを逐語的に一致させるだけに戻ります。 – DonBoitnott

+0

@DonBoitnottあなたは私にOPを求めていますか? – MatSnow

0

別のLinqが必要です。これは、はるかに信頼性がある一方で、あなたは少なくともtry-catchでそれをラップするのが賢明だろうので、それは、また、より危険だが、適切なチェックが最善だろうと

var item = sa.FirstOrDefault(x => Convert.ToInt32(x.Split(',')[0]).Equals(Convert.ToInt32(txt_ik.Text))); 
if (item != null) 
{ 
} 

注:これを試してみてください。

関連する問題