如何读取文本文件的难题…………

DavidNoWay 2008-10-20 01:37:28
{=start=
#产品序列号 =123456789012;
#日期 ="20080101164543";
{=step=
#检验步骤 =hssStatus;
#结果 =FAIL;
#详细参数 =(
(hssStatus1,1.1,FAIL)
(hssStatus2,2.5,PASS)
(TestTime, 0.88, Minutes )
);
}=step;
{=step=
#检验步骤 =ydlSt;
#结果 =PASS;
#详细参数 =(
(wkfold,1.5,PASS)
(TestTime, 0.11, Minutes )
);
}=step;
=start=}



如以上文件的格式,
一个“产品序列号”有不定多个“检验步骤”,一个“检验步骤”有不定多个“详细参数”。
其中TESTTIME一行的内容可以不理它。
想把这样格式的文件内容存进数据库这样的一张表里,字段列如下:
产品序列号 检验步骤 结果 详细参数 详细参数结果
123456789012 hssStatus FAIL hssStatus1 FAIL
123456789012 hssStatus FAIL hssStatus2 PASS
123456789012 ydlSt PASS wkfold PASS

把数据存在多个表也可以,主要是怎么解析出文件的内容?
用C#。
...全文
138 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shangwei97 2008-10-20
  • 打赏
  • 举报
回复

public class mystart
{
public mystart() { }

Hashtable HMainTable = new Hashtable();
protected string strSN = "";
protected string strDate = "";
public string SN
{
set { strSN = value; }
get { return strSN; }
}
public string Date
{
set { strDate = value; }
get { return strDate; }
}
}
public class myStep
{
public myStep() { }
protected string strStep = "";
protected string strResult = "";
protected string strParams = "";
public string CheckStep
{
set { strStep = value; }
get { return strStep; }
}
public string CheckResult
{
set { strResult = value; }
get { return strResult; }
}
public string Params
{
set { strParams = value; }
get { return strParams; }
}
}

private void button1_Click(object sender, EventArgs e)
{
try
{
string strLine = "";
StreamReader read = new StreamReader("c:\\testlog.txt",Encoding.Default);
do
{
mystart s1 = null;
strLine = read.ReadLine();
if (strLine.Contains("{=start="))
{
s1 = new mystart();
}
if (strLine.Contains("#产品序列号"))
{

}
}
while (strLine != null);
}
catch (Exception err)
{
MessageBox.Show(err.Message.ToString());
}
}


大概我就是这个思路吧,等待高手支招
DavidNoWay 2008-10-20
  • 打赏
  • 举报
回复
谢谢7楼的兄弟,看看先哈
DavidNoWay 2008-10-20
  • 打赏
  • 举报
回复
因为是要读既定文本的格式,再用代码把它转成XML也是很麻烦的吧,何不直接读呢。
希望能讨论一个好点的算法。
3楼的思路很好,但是具体操作起来有点模糊,能不能给个代码SAMPLE呢?
我姓区不姓区 2008-10-20
  • 打赏
  • 举报
回复
比较麻烦,期待高手有更好的方法:

string content = File.ReadAllText(@"D:\data.txt");
foreach (Match match in Regex.Matches(content, @"{=start=(?<start>[\s\S]*)=start=}", RegexOptions.Multiline))
{
string productSN = Regex.Match(match.Groups["start"].Value, @"\#产品序列号\s*=\s*(?<sn>[^;]*);").Groups["sn"].Value;
foreach (Match mat in Regex.Matches(match.Groups["start"].Value, @"{=step=(?<step>[\s\S]*?)}=step;"))
{
string step = Regex.Match(mat.Groups["step"].Value, @"\#检验步骤\s*=\s*(?<step>[^;]*);").Groups["step"].Value;
string result = Regex.Match(mat.Groups["step"].Value, @"\#结果\s*=\s*(?<result>[^;]*);").Groups["result"].Value;
foreach (Match ma in Regex.Matches(mat.Groups["step"].Value, @"\#详细参数\s*=\s*\((?<params>[^;]*)\);"))
{
foreach (Match m in Regex.Matches(ma.Groups["params"].Value, @"\((?<detail>[^,]*),[^,]*,(?<result>[^\)]*)\s*\)"))
{
string param = m.Groups["detail"].Value;
string paramResult = m.Groups["result"].Value;
//这里就自己写入数据库了
}
}
}
}

优途科技 2008-10-20
  • 打赏
  • 举报
回复
XML可能更容易操作一些。
mjjzg 2008-10-20
  • 打赏
  • 举报
回复
up
up
up
ppp7p 2008-10-20
  • 打赏
  • 举报
回复
你这个可能要用正则表达式拆分来做。
InterRonaldo 2008-10-20
  • 打赏
  • 举报
回复
楼主的问题现在应该如何读取文本的问题

鉴于这个文本看起来很整齐,格式也很统一整齐,我觉得完全可以下功夫设计一个用来读取这种专门文本格式的类

比如这段文本是有很多标记的 例如 { = # } ( ) ;等等

而这些都可以作为我们识别内容文本的标识符来判断 也就是说我们根据这些符号来确定读取到了什么东西

所以把这些符号表示定义为对象或者枚举,集合等等 而这个类就是读取器 ,我们可以将标识符类变成具体 比如=start=
=step 等等

可以通过读取文本一直读到哪里为止来标识,取出来再进去往里分析,把读到的内容放一个装着描述该对象的list里面

当然建议楼主将文本文件转成xml或者数据库来存储 这样更安全也会比较方便 xml的话(定义一个ddt然后去操作,应该有很多这
样的文章) 以上仅个人意见供楼主参考
DavidNoWay 2008-10-20
  • 打赏
  • 举报
回复
怎么一个定义法呢?能不能说得详细一些呢?
yilanwuyu123 2008-10-20
  • 打赏
  • 举报
回复
定义XML文件来操作吧

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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