Frage

http://csvhelper.com über NUGET ist zum Lesen und Schreiben von CSV-Dateien verwendet. Mit

csvhelper können Sie Ihre CSV-Datei direkt in Ihre benutzerdefinierte Klasse lesen.

Wie folgt wurde in einem früheren Frage generasacodicetagpre.

csvReader wird automatisch angezeigt OUT, wie Sie die Eigenschaftsnamen anpassen basierend auf der Kopfzeile (dies ist konfigurierbar). Es verwendet kompiliert. Expression Bäume statt Reflexion, also ist es sehr schnell.

es ist auch sehr dehnbar und konfigurierbar.

Ich versuche grundsätzlich, herauszufinden, wie Sie in einer CSV-Datei mit Header (unbekannte Namen) lesen und die Datensätze in ein benutzerdefiniertes Objekt lesen.

Es gibt überhaupt keine dokumentierende Dokumentation, so dass sich jemand wusste, ob jemand wusste, wie CSVReader verwendet wird, um die Werte in ein Array von Saiten zu setzen, oder wie würden Sie empfehlen, damit dies der Fall ist?

War es hilfreich?

Lösung

This is my first version, I will update as I amend things and make it more complete but this gives me all the data in string arrays.

   [HttpPost]
        public ActionResult UploadFile(HttpPostedFileBase file)
        {

            ICsvParser csvParser = new CsvParser(new StreamReader(file.InputStream));
            CsvReader csvReader = new CsvReader(csvParser);
            string[] headers = {};
            List<string[]> rows = new List<string[]>();
            string[] row;
            while (csvReader.Read())
            {
                // Gets Headers if they exist
                if (csvReader.HasHeaderRecord && !headers.Any())
                {
                    headers = csvReader.FieldHeaders;
                }
                row = new string[headers.Count()];
                for (int j = 0; j < headers.Count(); j++)
                {
                    row[j] = csvReader.GetField(j);
                }
                rows.Add(row);
            }
            ImportViewModel model = new ImportViewModel(rows);
            return View(model);
        }

Andere Tipps

There is a CsvFieldAttribute that you can put on your property where you can either put the name of csv field, or the index of the csv field. Name will only work if there is a header row in the csv file.

public class MyCustomClass
{
    [CsvField( FieldIndex = 1 )]
    public string Property1 { get; set; }

    [CsvField( FieldIndex = 0 )]
    public string Property2 { get; set; }

    [CsvField( FieldIndex = 2 )]
    public string Property3 { get; set; }
}

If all you want to do is read a record into a string array in the order that it's in in the file, you can just use CsvParser instead of CsvReader. Calling CsvParser.Read() returns a string[]. CsvReader uses CsvParser to read the raw data.

I know this is not related to CVSHelpers but you may like to consider the FileHelpers project

It allows you to decorate fields on an object with attributes so that it represents a row in the csv file and then use a FileHelperEngine to read the file in - resulting in an array of objects each one representing a row

see this quick start on reading delimited files

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top