当前位置: 首页 > 编程语言 > C#

拆分逗号分隔值(CSV)分享

时间:2023-04-11 00:59:39 C#

拆分逗号分隔值(CSV)如何在csharp中拆分CSV文件?以及如何显示这个?我一直在为我正在处理的C#项目使用Microsoft.VisualBasic.FileIO命名空间中的TextFieldParser类。它将处理诸如嵌入式逗号或引用字段之类的复杂性。它返回一个字符串[]并可用于解析除CSV文件之外的任何类型的结构化文本文件。它在哪里显示?关于拆分,最好的方法是使用一个好的库来实现这种效果。这个库非常好,我可以全心全意地推荐它。使用天真的方法的问题是它通常会失败,有很多甚至不考虑性能的考虑因素:导入Micorosoft.VisualBasic作为参考(我知道,这还不错)并使用Microsoft.VisualBasic.FileIO.TextFieldParser-它可以很好地处理CSV文件,并且可以在任何.Net语言中使用。一次一行地读取文件,然后...foreach(Stringlineinline.Split(newchar[]{','}))写线(线);这是我偶尔使用的CSV解析器。用法:(dgvMyView是一种数据网格类型。)CSVReader阅读器=newCSVReader("C:MyFile.txt");reader.DisplayResults(dgvMyView);类:使用System.IO;使用System.Text.RegularExpressions;使用System.Windows.Forms;publicclassCSVReader{privateconststringESCAPE_SPLIT_REGEX="({1}[^{1}]*{1})*(?{0})({1}[^{1}]*{1})*";私有字符串[]字段名;私人名单记录;私有intReadIndex;publicCSVReader(stringFile){Records=newList();字符串[]记录=空;StreamReaderReader=newStreamReader(文件);整数索引=0;布尔空白记录=真;FieldNames=GetEscapedSVs(Reader.ReadLine());while(!Reader.EndOfStream){Record=GetEscapedSVs(Reader.ReadLine());空白记录=真;for(Index=0;Index我得到查询的结果。就像我使用io.file读取文件。并且所有的文本都存储在一个字符串中。之后,我用分隔符分隔。代码如下所示.使用系统;使用System.Collections.Generic;使用系统文本;命名空间CSV{类程序{staticvoidMain(string[]args){stringcsv="user1,user2,user3,user4,user5";string[]split=csv.Split(newchar[]{',',''});foreach(stringsinsplit){if(s.Trim()!="")Console.WriteLine(s);}Console.ReadLine();}}}以下函数从CSV文件中获取一行并将其拆分为一个列表。参数:stringline=linetosplitonstringtextQualifier=what(ifany)textqualifier(ie""or"""or"'")chardelim=fielddelimiter(ie','or';'or'|'或't')intcolCount=预期字段数(0表示不检查)用法示例:Listfields=SplitLine(line,""",',',5);//或Listfields=SplitLine(line,"'",'|',10);//或Listfields=SplitLine(line,"",'t',0);功能:以上就是C#学习教程:拆分逗号分隔值(CSV)如果分享的所有内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——privateListSplitLine(stringline,stringtextQualifier,chardelim,intcolCount){列表字段=newList();字符串origLine=线;chartextQual='"';boolhasTextQual=false;if(!String.IsNullOrEmpty(textQualifier)){hasTextQual=true;textQual=textQualifier[0];}if(hasTextQual){while(!String.IsNullOrEmpty(line)){if(line[0]==textQual)//字段是文本限定所以寻找下一个非限定分隔符{intfieldLen=1;while(true){if(line.Length==2)//必须是最终字段(零长度){字段长度=2;休息;}elseif(fieldLen+1>=line.Length)//必须是最终字段{fieldLen+=1;休息;}elseif(line[fieldLen]==textQual&&line[fieldLen+1]==textQual)//转义文本限定符{fieldLen+=2;}elseif(line[fieldLen]==textQual&&line[fieldLen+1]==delim)//必须是字段的结尾{fieldLen+=1;休息;}else//不是定界符{fieldLen+=1;}}stringescapedQual=textQual.ToString()+textQual.ToString();fields.Add(line.Substring(1,fieldLen-2).Replace(escapedQual,textQual.ToString()));//替换转义限定符if(line.Length>=fieldLen+1){line=line.Substring(fieldLen+1);if(line=="")//空白最后字段{fields.Add("");}}else{line="";}}else//字段不是文本限定{intfieldLen=line.IndexOf(delim);if(fieldLen!=-1)//检查下一个分隔符位置{fields.Add(line.Substring(0,fieldLen));line=line.Substring(fieldLen+1);如果(行==“”)//最终字段必须为空{fields.Add("");}}else//必须是最后一个字段{fields.Add(line);线=“”;}}}}else//如果没有文本限定符,则使用现有的拆分函数{fields.AddRange(line.Split(delim));}if(colCount>0&&colCount!=fields.Count)//计数与预期不匹配,因此抛出异常{thrownewException("Fieldcountwas:"+fields.Count.ToString()+",expected:"+colCount.ToString()+".Line:"+origLine);}返回字段;}本文收集自网络,不代表立场。侵权请点击维权联系管理员删除如需转载请注明出处: