Получение верхней строки из CSV, когда она не является строкой заголовка - PullRequest
0 голосов
/ 21 января 2011

На моем веб-сайте я читаю файл CSV и анализирую его. Теперь у CSV нет имен столбцов. Это просто необработанный список значений, разделенных запятыми.

Я беру этот файл и использую класс ODBCDataReader для чтения строк.

Проблема в том, что когда я получаю первое значение, он пропускает первую строку CSV. Вероятно, это связано с тем, что первая строка рассматривается как заголовок столбца. Но в моем случае нет заголовков столбцов. Поэтому каждый раз, когда пропускают мой первый ряд.

Как я могу получить первый ряд моего CSV?

Вот скриншот моего CSV:

alt text

Вот код, который я использую для анализа CSV.

public string CsvParser()    
{    
    int _nNrRowsProccessed = 0;
    string connectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + ConfigurationManager.AppSettings["CSVFolder"] + ";";     
    OdbcConnection conn = new OdbcConnection(connectionString);     
    try
    {
        conn.Open();

        string strFileName = ConfigurationManager.AppSettings["CSVFile"];
        string strSQL = "Select * from " + strFileName;

        OdbcCommand cmd = new OdbcCommand();
        cmd.Connection = conn;
        cmd.CommandText = strSQL;
        cmd.CommandType = CommandType.Text;

        OdbcDataReader reader = cmd.ExecuteReader();
        string strLine = null;

        // MasterCalendar_DB.OpenMySQLConnection();

        while (reader.Read())
        {
            // insert data into mastercalendar
            strLine = reader[0].ToString();
            string strLine1 = reader[1].ToString();
            string strLine2 = reader[2].ToString();
            string strLine3 = reader[3].ToString();
            string[] arLine = strLine.Split(';');

           // string strAgencyPropertyID = arLine[0];
           // DateTime dt = DateTime.Parse(arLine[1]);
           // Int64 nDate = (Int64)Util.ConvertToUnixTimestamp(dt);
           // String strAvailability = (arLine[2]);

            _nNrRowsProccessed++;
           // MasterCalendar_DB.Insert(strAgencyPropertyID, nDate, strAvailability);
        }     
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        conn.Close();
       // MasterCalendar_DB.CloseMySQLConnection();
    }
    return "Success";
}

Ответы [ 4 ]

3 голосов
/ 21 января 2011

Вы хотите взглянуть на страницу драйвера текста на сайте connectionstrings.org .

По сути, вы создаете schema.ini в том же каталоге, который содержитварьируется варианты.Одним из них является параметр ColNameHeader, который принимает логическое значение.

Пример с сайта:

[customers.txt]
Format=TabDelimited
ColNameHeader=True
MaxScanRows=0
CharacterSet=ANSI
2 голосов
/ 21 января 2011

Проверьте это: Файл Schema.ini (Драйвер текстового файла)

Возможно, вам потребуется установить ColNameHeader = false

0 голосов
/ 21 января 2011

Быстрое и грязное решение:

string strLine  = reader.GetName(0);
string strLine1 = reader.GetName(1);
string strLine2 = reader.GetName(2);
string strLine3 = reader.GetName(3);

reader.GetName (int i); // Получает имя указанного столбца.

0 голосов
/ 21 января 2011

Ссылка Microsoft.VisualBasic и вы можете использовать TextFieldParser , который почти наверняка имеет меньше зависимостей, чем предложенный вами метод.

using (var parser =
    new TextFieldParser(@"c:\data.csv")
        {
            TextFieldType = FieldType.Delimited,
            Delimiters = new[] { "," }
        })
{
    while (!parser.EndOfData)
    {
        string[] fields;
        fields = parser.ReadFields();
        //go go go!
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...