2017-04-20 16 views
2

私は30の列を持つcsvファイルを持っています。 どのようにして列をチェックできるかは、列のリストでどのように考えられますか?csvファイルの列をチェックする方法はCである#

LastName FName Id DOB  Gender phonenumber mobilenumber country 

リスト:(姓、します。FName、ID、DOB、性別、PHONENUMBER、MOBILENUMBER、国)

もしそうなら、それはエラー表示し、リスト外の任意の列:有効でないリストは?

答えて

0

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

var reader = new StreamReader("sourcePath"); 
string[] allLines = reader.ReadToEnd() 
         .Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
var colList = new List<string>(allLines[0].Split(',')); 
var isExist=colList.Exists(s => s == "Your Column Name") 
3

あなたは、最初の行(列名)を取り、それを分割し、あなたのリストには列が含まれているかどうかを確認することができます。

string[] accceptedColumns = {"a", "b", "c" }; 
string[] lines = File.ReadAllLines(path); 
foreach (var columnName in lines[0].Split(',')) 
{ 
    if (!accceptedColumns.Contains(columnName)) 
    { 
     //Invalid column 
    } 
} 
1

EpicKip's answerあなたは(あなたが唯一の「A、BおよびC」という名前の列を期待している一方で、例えば「Z」という名前の列がある)あなたが期待されていない任意の列がありますかどうかを確認したい場合は良い作品。

あなたの質問が私には完全にはっきりしていないので、別のシナリオを追加しました。あなたは、列の所定のセットに対してチェックしたい場合は、これを使用することができます(例えば、すべての30個の列が逸脱せずにその都度存在していることを確認してください):

static void Main(string[] args) 
{ 
    var columnInput1 = new List<string>() { "LastName", "FName", "Id", "DOB", "Gender", "phonenumber", "mobilenumber", "country" }; 
    bool result1 = CheckIfAllColumnsArePresent(columnInput1); 
    Console.WriteLine(result1); 

    var columnInput2 = new List<string>() { "LastName", "FName", "Id", "DOB", "Gender", "mobilenumber", "country" }; 
    bool result2 = CheckIfAllColumnsArePresent(columnInput2); 
    Console.WriteLine(result2); 
} 

private static bool CheckIfAllColumnsArePresent(List<string> columnInput) 
{ 
    var columnsNeeded = new List<string>() { "LastName", "FName", "Id", "DOB", "Gender", "phonenumber", "mobilenumber", "country" }; 

    foreach (var column in columnInput) 
    { 
     if (columnsNeeded.Contains(column)) 
      columnsNeeded.Remove(column); 
    } 

    return columnsNeeded.Count == 0 ? true : false; 
} 

これがチェックすることすべての列「A、BおよびC " 存在しています。 「A、B、Z」または「A、B」を入力すると、falseが返されます。入力 "A、B、C"のみがtrueを返します。

0

まず、我々は実際の列を取得する必要があります。期待列がすべての列が

// StringComparer.OrdinalIgnoreCase - let be nice and allow 
// phonenumber, Phonenumber, PhoneNumber 
if (expectedColumns.Except(columns, StringComparer.OrdinalIgnoreCase).Any()) { 
    // Some expected columns are not found; incorrect csv 
} 
else { 
    // All expected columns are found 
} 
を表現しているならば、我々は簡単に確認することができ、リスト

List<string> expectedColumns = new List<string>() { 
    "LastName", "FName", "Id", "DOB", "Gender", "phonenumber", "mobilenumber", "country"}; 

のように表すことが

string fileName = @"C:\MyFile.csv"; 

    var columns = File 
    .ReadLines(fileName) 
    .SkipWhile(line => !string.IsNullOrWhiteSpace(line)) 
    .FirstOrDefault() 
    .Split(new char[] { '\t', ',', ';' }, StringSplitOptions.RemoveEmptyEntries); 
// .Select(item => item.Trim()); // you may want to trim column names 

レッツ

関連する問題