C#读取TXT文本,按条件读取数据并插入数据库。
****************************************************************************************************
执行开始: 2007-7-12 17:00:59
执行完成: 2007-7-12 17:01:09
****************************************************************************************************
执行开始: 2007-7-12 17:03:02
在目的的行号为 1975 处出错。到目前为止,在该任务中遇到错误数: 1。
错误源: Microsoft OLE DB Provider for SQL Server
错误描述: 语句已终止。
错误帮助文件:
错误帮助内容 ID: 0
错误源: Microsoft OLE DB Provider for SQL Server
错误描述: 违反了 PRIMARY KEY 约束 'PK_CASHFLOW'。不能在对象 'CASHFLOW' 中插入重复键。
错误帮助文件:
错误帮助内容 ID: 0
执行完成: 2007-7-12 17:03:02
****************************************************************************************************
如上所示,TXT文档的内容是这样的,一直延续下去,*号之间有一个执行开始时间,一个执行完成时间,如果没有错误就只有执行时间和完成时间,如果有错误的话就有一些错误源,错误描述等,我想按这个时间读取错误描述后的内容,各位大侠有什么好的解决方法?方法好,加分。
[解决办法]
那就用正则表达式比较方便
当然文件大的话正则表达式未必高,你可以写一个文件按行扫描,扫描的时候只读取开头为“错误”的行
[解决办法]
流方式、ODBC、OLEDB都可以操作txt
如果你不想用正则过滤,就用OLEDB.
举个例子
public static DataTable TxtToDataTable(string path)
{
DataTable dt = new DataTable();
string constr = string.Empty;
FileInfo fi = new FileInfo(path);
if (fi.Extension.ToLower().CompareTo(".txt") == 0)
{
constr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=TEXT;Data Source=" + fi.DirectoryName;
string SQLString = " Select * From " + fi.Name;
using (OleDbConnection conn = new OleDbConnection(constr))
{
conn.Open();
OleDbDataAdapter AdapterText = new OleDbDataAdapter(SQLString, conn);
AdapterText.Fill(dt);
return dt;
}
}
}
string FileRd=File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\TEST.txt" ,System.Text.Encoding.Default);
string[] Fsplit = FileRd.Split("执行开始:,执行完成:".Split(','), StringSplitOptions.RemoveEmptyEntries);
int ArrayLength=(Fsplit.Length-1)/2;
string [] Str1=new string[ArrayLength];
string [] Str2=new string[ArrayLength];
string [] Str3=new string[ArrayLength];
int i=1;
while(i<ArrayLength+1)
{
int Ent = Fsplit[i].IndexOf("\r\n");
int Sat = Fsplit[i * 2].IndexOf("\r\n");
Str1[i - 1] = Fsplit[i*2-1].Substring(0, Ent).Trim();
Str2[i - 1] = Fsplit[i*2-1].Substring(Ent).Trim();
Str3[i - 1] = Fsplit[i * 2].Substring(0, Sat).Trim();
i++;
}