2017-04-20 2 views
2

Ich habe eine CSV-Datei, die 30 Spalten hat. eine Idee, wie wir überprüfen können, sind die Spalten mit der Liste der Spalten gültig?Wie überprüft man die CSV-Datei Spalten in c existieren #

LastName FName Id DOB  Gender phonenumber mobilenumber country 

List: (Name, FName, Id, DOB, Geschlecht, Telefonnummer, Handynummer, Land)

so, wenn eine Spalte außerhalb der Liste, Fehler zeigen: nicht gültig Liste?

Antwort

0

Try this:

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

Sie können die erste Zeile (Spaltennamen) nehmen, teilen Sie es und überprüfen Sie, ob Ihre Liste die Spalte enthält.

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 funktioniert gut, wenn Sie sehen wollen, wenn es irgendeine Spalte, die Sie nicht erwartet werden (zB gibt es eine Spalte „Z“ genannt, während Sie nur Spalten erwarten benannt sind „A, B und C“) .

Da Ihre Frage mir nicht ganz klar ist, habe ich ein anderes Szenario für Sie hinzugefügt. Wenn Sie gegen einen vorbestimmten Satz von Spalten überprüfen möchten (zB sicherstellen, dass alle 30 Spalten vorhanden jedes Mal ohne Abweichungen sind) Sie diese verwenden können:

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

Diese prüft, ob alle Spalten „A, B und C " sind anwesend. Wenn Sie "A, B, Z" oder "A, B" eingeben, wird false zurückgegeben. Nur der Eingang "A, B, C" gibt true zurück.

0

Zuerst müssen wir tatsächlich Spalten erhalten:

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 

Let erwartet Spalten als Liste dargestellt werden

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

Dann können wir leicht überprüfen, ob alle Spalten

// 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 
} 
vertreten sind
Verwandte Themen