我有一个包含30列的csv文件。 我们如何检查列是否对列列表有效?
LastName FName Id DOB Gender phonenumber mobilenumber country
列表:( LastName,FName,Id,DOB,Gender,phonenumber,mobilenumber,country)
所以如果列表外的任何列显示错误:无效列表?
答案 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
}