C#读取TXT文本,按条件读取数据并插入数据库。

my176527627 2009-08-16 10:47:17
****************************************************************************************************

执行开始: 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文档的内容是这样的,一直延续下去,*号之间有一个执行开始时间,一个执行完成时间,如果没有错误就只有执行时间和完成时间,如果有错误的话就有一些错误源,错误描述等,我想按这个时间读取错误描述后的内容,各位大侠有什么好的解决方法?方法好,加分。
...全文
329 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
grart 2009-08-27
  • 打赏
  • 举报
回复
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++;
}
ximi82878 2009-08-22
  • 打赏
  • 举报
回复
逐行扫描,如果不是需要的就释放,大概就是这个思路吧
guohouchang 2009-08-22
  • 打赏
  • 举报
回复
读文本文件没什么好的办法。要不你就一行一行的读。要不你就存数据库!
msblast4 2009-08-22
  • 打赏
  • 举报
回复
sadasd
管理菜单 生成帖子 置顶 推荐 取消推荐 锁定 解锁 移动 编辑 删除 帖子加分
结 帖 发 帖 回 复
BitCoffee 2009-08-19
  • 打赏
  • 举报
回复
int n = 0;
int m = 0;

用一个循环.
可以通过 IndexOf("错误描述:",n) 得到一个位置,IndexOf("错误帮助文件:",m) 得到一个位置.
用Substring(IndexOf("错误描述:",n),IndexOf("错误帮助文件:",m))可以得到错误描述.
然后n = IndexOf("错误描述:",n) + 1; m = IndexOf("错误帮助文件:",m) + 1;然后继续开始的操作.

也可以用正则去"错误描述:"和"错误帮助文件:"中间的字符.
LutzMark 2009-08-18
  • 打赏
  • 举报
回复
别忘了 replace("************","")
LutzMark 2009-08-18
  • 打赏
  • 举报
回复
" return dt;"写在最后一个}前..

LutzMark 2009-08-18
  • 打赏
  • 举报
回复
流方式、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;
}

}
}
蒋晟 2009-08-17
  • 打赏
  • 举报
回复
不能在对象 'CASHFLOW' 中插入重复键
说的很清楚了,主键有重复值
如果你的主键列有重复值,把主键去掉,换一个Guid或者自增整型的主键
蒋晟 2009-08-17
  • 打赏
  • 举报
回复
那就用正则表达式比较方便
当然文件大的话正则表达式未必高,你可以写一个文件按行扫描,扫描的时候只读取开头为“错误”的行
my176527627 2009-08-17
  • 打赏
  • 举报
回复
没有错误的话就只有执行开始时间和执行完成时间,这个我就不管了
如果有错误就会有错误描述 我在数据里存入两个字段 一个是当前运行时间 另一个就是错误描述这一句话

问题是如果检索到这段话 TXT也会一直增大的
my176527627 2009-08-17
  • 打赏
  • 举报
回复
大哥,你没有看清楚啊 上面是错误描述日志
我是要把这段话检索读取出来并存进数据库里 根据运行时间
my176527627 2009-08-16
  • 打赏
  • 举报
回复
大家帮帮忙啊 详细的介绍一下读取TXT文档的方法

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧