Basic Read CSV File Questions

Solution 1:

What I am not understanding since this CSV files 150+ fields, is how do grab the correct data

By index, because there is no header

In your BQFile, decorate the properties with an attribute of [Index(NNN)] where N is the column number (0-based). The IndexAttribute is found in CsvHelper.Configuration.Attributes namespace - I mention this because Entity Framework also has an Index attribute; be sure you use the correct one

pubic class BQFile{
  [Index(46)]
  public string SNumber { get; set;}

  ...
}

Then do:

        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            HasHeaderRecord = false,
        };
        using (var reader = new StreamReader(iFile.FileName))
        using (var csv = new CsvReader(reader, config))
        {
            var records = csv.GetRecords<BQFile>();

            ...

records is an enumeration on top of the file stream (via CSVHelper, which reads records as it goes and creates instances of BQFile). You can only enumerate it once, and then after you're done enumerating it the filestream will be at the end - if you wanted to re-read the file you'd have to Seek the stream or renew the reader. Also, the file is only read (in chunks, progressively) as you enumerate. If you return records somewhere, so you drop out of the using and you thus dispose the reader, you'll get an error when you try to start reading from records (because it's disposed)

To work with records, you either foreach it, processing the objects you get as you go:

foreach(BQFile bqf in records){
  //do stuff with each BQFile here
}

Or if you want to load it all into memory, you can do something like ToList() it so you end up with a bunch of BQFile in a List, and then you can e.g. access them randomly, read them over and over etc..

var bqfs = records.ToList();

ps; I don't know, when you said "it's column 46" if that's counting from 1 or 0.. You might have to adjust your 46.