C# TextFieldParser,不分析最后一行

C# TextFieldParser,不分析最后一行,c#,asp.net,sql,csv,C#,Asp.net,Sql,Csv,我正在sql数据库中导入.csv文件。我正在使用TextFieldParser 我的代码是 TextFieldParser parser = new TextFieldParser(file); //single file //TextFieldParser parser = new TextFieldParser(CSVFolderPath + "\\" + file); parser.TextFieldType = FieldType.Delimited; parser.SetDel

我正在sql数据库中导入.csv文件。我正在使用TextFieldParser

我的代码是

TextFieldParser parser = new TextFieldParser(file); 
//single file 
//TextFieldParser parser = new TextFieldParser(CSVFolderPath + "\\" + file); 
parser.TextFieldType = FieldType.Delimited; 
parser.SetDelimiters(","); 
int k = 0; 
while (!parser.EndOfData) 
{ 
    //Processing row 
    string[] fields = parser.ReadFields(); 
    if (k != 0) 
    { 
        for (int i = 0; i < fields.Length; i++) 
        { 
            stationcode = fields[0].ToString().Substring(4, 5); 
            //if (fields[1].ToString().Substring(14, 8) == date) 
            //{ 
            if (i == 0) 
            { 

                dr = workTable.NewRow(); 
                dr[i] = fields[i].Substring(0, fields[i].Length - 4);  

            } 
            else if (i == 3) 
            { 
                dr[i] = Convert.ToDateTime(fields[i].ToString()); 
            } 
            else if (i == 4) 
            { 
                dr[i] = Convert.ToDateTime(fields[i].ToString()); 
            } 
            else if (i == 5) 
            { 
                dr[i] = Convert.ToInt32(fields[i].ToString()); 
            } 
            else 
                dr[i] = fields[i].ToString(); 
            if (i == 5) 
            { 
                workTable.Rows.Add(dr); 
            } 
            //} 

        } 
    } 
    k = k + 1; 
} 
parser.Close();     
TextFieldParser parser=新的TextFieldParser(文件);
//单个文件
//TextFieldParser parser=新的TextFieldParser(CSVFolderPath+“\\”+文件);
parser.TextFieldType=FieldType.Delimited;
parser.SetDelimiters(“,”);
int k=0;
而(!parser.EndOfData)
{ 
//处理行
string[]fields=parser.ReadFields();
如果(k!=0)
{ 
for(int i=0;i
这里的工作表是DataTable

代码解析文件很好

但在我的csv文件中,最后一行用于摘要。某些字段的总数

我不想在datatable中插入这一行


如果内存空间不是问题,我怎么做。首先加载CSV行列表,然后解析每一行并保存最后一行。否则,您需要某种方法来标识摘要行。(例如日期之类的空数据),这可以向解析器发出忽略该行的信号


处理要导入的数据的最佳方法是尝试并确定导入文件将只包含要导入的数据。(无标题、无摘要等)不幸的是,许多公司尝试导入报告而不是实际的导出文件。

如果最后一行以某个特定字符串开头(“摘要”,对于示例),则可以使用TextFieldParser类的CommentTokens属性

见:


并且:

如果识别摘要行需要许多不同的情况&内存空间是一个问题,则始终可以使用
TextFieldParser.PeekChars(Int32)
方法:

在不移动光标的情况下读取指定数量的字符

在备注部分:

numberOfChars值必须小于行中的字符总数。如果不是,PeekChars返回的字符串将被截断为行的长度

因此:

TextFieldParser parser = new TextFieldParser(file); 
//single file 
//TextFieldParser parser = new TextFieldParser(CSVFolderPath + "\\" + file); 
parser.TextFieldType = FieldType.Delimited; 
parser.SetDelimiters(","); 
int k = 0; 
while (!parser.EndOfData) 
{ 
    //Processing row 
    string[] fields = parser.ReadFields();

    //Peek if this is the last line, then break
    if (parser.PeekChars(Int32.MaxValue) is "") break;

    if (k != 0) 
    { 
...

docs.microsoft

谢谢,我放了一个信号,忽略了要分析的最后一行。