2017-06-30 16 views
-2

迅速かつエレガントな方法で1.csvファイル.csvから配列を簡単に作成し、C#で検索するのは簡単ですか?

name1;5547894;bnt652147 
name2;5546126;bnt956231 
name3;5549871;nhy754497 

方法は、このファイルを読み込み、2次元配列に区切られた値を追加し、1行であってもよいがありますか?

次に、配列内の文字列を簡単かつ迅速に検索できますか?

+0

、https://stackoverflow.com/a/3508572/361842あたり 'Microsoft.VisualBasic.FileIO.TextFieldParser'を使用 – JohnLBevan

答えて

0

アレイのArrayまたは配列のListを使用する方がはるかに簡単ですが、2D配列を実行することができます。配列のListについては

var EqualRows = listInput.Where(r => r.Any(s => s == find)).ToList(); 

あなたの場合:

var find = "5549871"; 
var ContainingRows = listInput.Where(r => r.Any(s => s.Contains(find))).ToList(); 

が完全一致を含む行を検索するには:

var listInput = File.RealAllLines("1.csv").Select(line => line.Split(';')).ToList(); 

は、文字列を含む行を検索するには1つの一致があることを知っていれば、ToList()First()

検索の詳細がわかっている場合は、検索のスピードアップのためにインデックス(Dictionary)を作成することができます。

対応する2D配列作成機能はありません。作成するサイズを知っている必要があります。

var array2d = new string[listInput.Length, 3]; 
for (int row = 0; row < listInput.Length; ++row) { 
    for (int col = 0; col < 3; ++col) 
     array2d[row, col] = listInput[row][col]; 
} 

インデックスの種類を作成しない限り、検索は高速になるわけではありませんが、簡単です。 (引用符を取る&アカウントに文字をエスケープすなわち)の解析真のCSVファイルについて

var findrow = -1; 
for (int row = 0; row < array2d.GetUpperBound(0); ++row) { 
    for (int col = 0; col < array2d.GetUpperBound(1); ++col) { 
     if (array2d[row,col].Contains(find)) { 
      findrow = row; 
      break; 
     } 
    } 
} 
関連する問題