http://csvhelper.com 通过nuget可用用于读写csv文件。

csvhelper允许您将CSV文件直接读入自定义类中。 如下所示,在上一个问题

var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
.

csvreader将自动图 out如何匹配属性名称 基于标题行(这是 可配置)。它使用编译 表达树代替 反思,所以它非常快。

它也是非常可扩展的和 可配置。

我基本上试图弄清楚如何用标头(未知名称)读取CSV文件,并将记录读入自定义对象。

在这个问题上没有文件,所以如果有人知道如何使用CSVReader将值放入字符串数组或您如何建议处理此字符串?

有帮助吗?

解决方案

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top