程序要实现的功能是将文本文件中重复的数据剔出,结果保留成另一个文本文件。
偶是用数据源作的,部分代码:
string ConnectionString;
string SQLString;
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(srcFilePath) + ";Extended Properties=\"Text;HDR=no;FMT=Delimited\"";
SQLString = "Insert Into [" + Path.GetFileNameWithoutExtension(dstFilePath) + "] Select mobile From " + Path.GetFileName(srcFilePath) + " Group By mobile ";
System.Data.OleDb.OleDbConnection ConnectionText = new System.Data.OleDb.OleDbConnection();
ConnectionText.ConnectionString = ConnectionString;
ConnectionText.Open();
System.Data.OleDb.OleDbDataAdapter AdapterText = new System.Data.OleDb.OleDbDataAdapter(SQLString, ConnectionText);
AdapterText.Fill(DataSetText, "TextFile");
myDataTable = DataSetText.Tables[0];调试的时候提示出错“无法找到表0”,但是目的文件已经完成写入,数据也正确,难道哪里还有错误?
偶是用数据源作的,部分代码:
string ConnectionString;
string SQLString;
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(srcFilePath) + ";Extended Properties=\"Text;HDR=no;FMT=Delimited\"";
SQLString = "Insert Into [" + Path.GetFileNameWithoutExtension(dstFilePath) + "] Select mobile From " + Path.GetFileName(srcFilePath) + " Group By mobile ";
System.Data.OleDb.OleDbConnection ConnectionText = new System.Data.OleDb.OleDbConnection();
ConnectionText.ConnectionString = ConnectionString;
ConnectionText.Open();
System.Data.OleDb.OleDbDataAdapter AdapterText = new System.Data.OleDb.OleDbDataAdapter(SQLString, ConnectionText);
AdapterText.Fill(DataSetText, "TextFile");
myDataTable = DataSetText.Tables[0];调试的时候提示出错“无法找到表0”,但是目的文件已经完成写入,数据也正确,难道哪里还有错误?
myDataTable = DataSetText.Tables["TextFile"];就OK了但是有个新问题,这样生成的数据会多出双引号,如原来是123,新的文本里会变成“123”。这个双引号该怎么去掉啊
str = str.Trim('"');//只删除开头和结尾的",推荐
或者
str = str.Replace("\"", "");//删除所有的",看情况
替换的话要对每一条数据都替换,偶经常要处理一些10+M的文本,这样的话会很慢的说。继续问:
下面哪个生成新数据文本的方法效率高一些:
1.如上面代码那样通过insert查询数据并生成新的文本。
2.select出数据结果以后,用StreamWriter一条条写到文本里面去。
不过我认为更有效率的办法是自己按行读文件,并借一个hashtable来判断是否重复,然后自己写文件oledb处理文本数据库效率不是很高