在我的网站上,我正在阅读CSV文件并进行解析。现在CSV没有列名。它只是逗号分隔值的原始列表。
我拿这个文件并使用ODBCDataReader类来读取行。
问题在于,当我检索第一个值时,它会跳过CSV的第一行。这可能是因为它将第一行视为列标题。但在我的情况下,没有列标题。所以每次跳过我的第一行。
如何检索CSV的第一行?
以下是我的CSV的屏幕截图:
以下是我用来解析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";
}
答案 0 :(得分:3)
您想查看the page of the Text-Driver over at connectionstrings.org。
基本上,您在同一目录中创建schema.ini
,该目录包含不同的选项。其中一个是ColNameHeader
选项,它采用布尔值。
网站示例:
[customers.txt]
Format=TabDelimited
ColNameHeader=True
MaxScanRows=0
CharacterSet=ANSI
答案 1 :(得分:2)
请检查:Schema.ini File (Text File Driver)
您可能需要设置ColNameHeader = false
答案 2 :(得分:0)
引用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!
}
}
答案 3 :(得分:0)
快速而肮脏的解决方案:
string strLine = reader.GetName(0); string strLine1 = reader.GetName(1); string strLine2 = reader.GetName(2); string strLine3 = reader.GetName(3);
reader.GetName(int i); //获取指定列的名称。