宝哥软件园

读取从数据库导出的csv文件

编辑:宝哥软件园 来源:互联网 时间:2021-08-05

类型:图片浏览大小:1010KB语言:英语评分:7.5标签:立即下载因为很多不同的数据库,比如oracle、access、mssql、mysql、db2等。都挺杂的。所以我一直想做一个通用的数据查询工具,支持所有数据库,操作界面统一为mssql 2005界面,这样可以少装很多客户端工具,不需要在不同的数据库客户端工具之间切换。首先放一个初始截图,和mssql的操作界面一样。左边是表和列信息显示区,右上角是sql语句输入区,右下角是结果显示区,支持表和字段自动提示、CSV、Excel导入导出ps:图中连接的数据库是IBM db 29.5

在执行数据导入和导出功能时,必须支持最基本的csv文件格式。当时觉得csv不简单。它只不过是一个逗号分隔的文本文件,带有回车和换行符。我快速写出了原来的csv,读取公共静态字符串[] [] read _ CSV(字符串文本){ var text _ array=new liststring[]();string[]line=text。拆分(' r ',' n ');foreach(行中的var行){if(!字符串。IsNullOrEmpty(line)){string[]字段=line。拆分(',');文本数组。添加(字段);} }返回text_array。ToArray();}公共文本){ line }。IsNullOrEmpty(line)));文本数组。加(字);}文本_数组。ToArray();一开始一切都很好,没有问题。后来用多了,问题开始出现。发现有些csv字段包含逗号。之后,逗号被视为另一个字段,当然会报告错误。原来,csv文件太被鄙视了。呵呵,其实csv也有一些需要注意的规范。1.如果csv文件字段中有特殊字符,整个字段应该用双引号括起来。有三种特殊字符,逗号[,]回车[rn]和字段开头的双引号[']。例如,字段a、b、c(b、c的文本中包含逗号),d应该变成a、‘b、c’,带回车符的d也应该如此。并且字段包含双引号,那么字段中的双引号应该写两次。例如,字段A,B,c'aa,d应该变成A,' B,C'' AA '。有了这两个规格,再修改读取方式就完成了,修改后的csv并不复杂。读取公共静态字符串[] [] Read _ CSV(字符串文本){ if()var text _ array=new Liststring[]();var line=new Liststring();var field=new StringBuilder();//在双引号中bool in_quata是否=false//字段是否以bool field_start=true开始;for(int I=0;我发短信。长度;I){ char ch=text[I];If (in_quata){//如果它已经在if (ch==' ')的双引号范围内{//如果它是两个引号,它将被视为普通的If引号(itext。length-1text [I 1]==' ') {field。追加(' ' ')I;}else//否则退出_quata=false中的引号范围;}else //双引号范围内的任何字符(双引号除外)都被视为普通字符{field。追加(ch);}} else {switch (ch) {case ',' ://新字段开始行。添加(字段。ToString());字段。移除(0,字段。长度);field _ start=true打破;case ' ' ://如果_quata中的(field_start)为true,则进行引号处理;埃尔塞菲尔德。追加(ch);打破;大小写' r': //新记录行的开始if(字段。length0 | | field _ start) {line。添加(字段。tostring());字段。移除(0,字段。长度);}文本_数组。添加(行。ToArray());排队。clear();field _ start=true//在窗口环境中,rn通常成对出现,所以跳过if (I text。length-1文本[I 1]==' n ')I;打破;default:field _ start=false字段。追加(ch);打破;} } }//文件结尾if(field . length 0 | | field _ start)line . add(field . tostring());if(行。计数0)text_array。添加(行。ToArray());返回text_array。ToArray();}修改后基本没有问题。

更多资讯
游戏推荐
更多+