如何检查c#中存在的csv文件列

时间:2017-04-20 09:12:21

标签: c#

我有一个包含30列的csv文件。 我们如何检查列是否对列列表有效?

  LastName  FName   Id  DOB     Gender phonenumber mobilenumber country 

列表:( LastName,FName,Id,DOB,Gender,phonenumber,mobilenumber,country)

所以如果列表外的任何列显示错误:无效列表?

4 个答案:

答案 0 :(得分: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 :(得分:1)

EpicKip's answer如果您想查看是否有任何您不期望的列(例如,有一个名为&#34的列; Z",而您只是期待列命名为" A,B和C")。

由于您的问题并不完全清楚,我为您添加了另一个方案。如果您想检查一组预定的列(例如,确保每次都没有偏差,则确保所有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;
}

这将检查所有列&#34; A,B和C&#34;存在。如果输入&#34; A,B,Z&#34;或&#34; A,B&#34;它将返回false。只有输入&#34; A,B,C&#34;将返回true

答案 2 :(得分: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 :(得分:0)

首先,我们必须获得实际的列:

  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

让预期的列表示为列表

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

然后我们可以轻松检查是否所有列都已表示

 // 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
 }