MEASUREMENTID=2501
;HIERARCHYID=218
;LOCATIONID=577
DATE=06/03/2006 14:26:22
[4]=Time:2048,0.001953,0.001953,0,0,0,0,0.000000,0,0,0
;AMPLITUDE=0.905308,0.935634,0.962393,0.992720,1.014127,1.044455,1.056942,
。。
。。*
AMPLITUDE=文本格式如上,我想要读取MEASUREMENTID=、HIERARCHYID=、LOCATIONID=、DATE=、AMPLITUDE=后的文本,并且要判断第5行关键字是Time,因为还有很多不是time的数据在同一个文件里我的思路是逐行读取,然后split("="),判断string[0]是否是上述的几个字符串,然后取值,但是AMPLITUDE后面还有多行数据也要读到,即读到*处,但实现还有些问题,问问大家有什么好的方法
;HIERARCHYID=218
;LOCATIONID=577
DATE=06/03/2006 14:26:22
[4]=Time:2048,0.001953,0.001953,0,0,0,0,0.000000,0,0,0
;AMPLITUDE=0.905308,0.935634,0.962393,0.992720,1.014127,1.044455,1.056942,
。。
。。*
AMPLITUDE=文本格式如上,我想要读取MEASUREMENTID=、HIERARCHYID=、LOCATIONID=、DATE=、AMPLITUDE=后的文本,并且要判断第5行关键字是Time,因为还有很多不是time的数据在同一个文件里我的思路是逐行读取,然后split("="),判断string[0]是否是上述的几个字符串,然后取值,但是AMPLITUDE后面还有多行数据也要读到,即读到*处,但实现还有些问题,问问大家有什么好的方法
while(true)
{
string s = ReadLine();
int index = s.IndexOf('*');
if(-1 == index)
{
content += s;
}
else
{
content += s.SubString(0, index);
break;
}
}
;LOCATIONID=577
DATE=06/03/2006 14:26:22
中间就没有分号可以split
MEASUREMENTID=2499
;HIERARCHYID=218
;LOCATIONID=577
DATE=06/03/2006 14:26:06
[4]=Mag:0.739624MEASUREMENTID=2501
;HIERARCHYID=218
;LOCATIONID=577
DATE=06/03/2006 14:26:22
[4]=Time:2048,0.001953,0.001953,0,0,0,0,0.000000,0,0,0
;AMPLITUDE=0.905308,0.935634,0.962393,0.992720,1.014127,1.044455,1.056942,0.905308,0.935634,0.962393,0.992720,1.014127,1.044455,
0.905308,0.935634,0.962393,0.992720,1.014127,1.044455,
0.905308,0.935634,0.962393,0.992720,1.014127,1.044455,
AMPLITUDE=
。
。
。
。谢谢各位楼上,完整的如上,我需要滤掉前面5行的,只当有Time关键字的时候才取相应的文本,同时AMPLITUDE值要取两个AMPLITUDE之间的一长串值,有2048个点值
而且文本里面包含这样子的很多,分别取出来
{
int iIndex=strText.IndexOf("[4]="); if(iIndex!=-1)
{
//找到[4]开头的,检查下一个关键字是否为Time
if(strText.SubString(iIndex+4,4).ToUpper()="Time".ToUpper())
{
//Do your things
}
else
continue;
}
else
break; //找不到,退出
}
while (strText.IndexOf("[4]=Time")!=-1)
我想逐行读,再判断time在那一行中,如果在再取下面的,最后保存到一个链表中
string measureid=null;
string hierarchyid=null;
string locationid=null;
string date=null;
string timeAmplitude=null;
bool flag=false; while(sr.Peek()!=-1)
{
//nn.Add(sr.ReadLine());
tmp=sr.ReadLine().Trim();//第1行
string[] desc=tmp.Split(Convert.ToChar("="));
if(desc[0].Equals("MEASUREMENTID"))
{
measureid=desc[1];
tmp=sr.ReadLine().Trim();//第2行
desc=tmp.Split(Convert.ToChar("="));
if(desc[0].Equals(";HIERARCHYID"))
{
hierarchyid = desc[1]; tmp=sr.ReadLine().Trim();//第3行
desc=tmp.Split(Convert.ToChar("=")); if(desc[0].Equals(";LOCATIONID"))
{
locationid = desc[1]; tmp=sr.ReadLine().Trim();//第4行
desc=tmp.Split(Convert.ToChar("=")); if(desc[0].Equals("DATE"))
{
date = desc[1]; tmp=sr.ReadLine().Trim();//第5行
desc=tmp.Split(Convert.ToChar("=")); if(desc[0].Equals("time"))
{ }
}
} }
}
tmp=sr.ReadLine().Trim();//第5行
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(tmp, "Time");
if(mc.Count!=0){//如果存在Time字符 tmp=sr.ReadLine().Trim();//第6行 desc=tmp.Split(Convert.ToChar("="));
timeAmplitude=desc[1];
}
else
continue;
不知道还有没有简易的方法,比如正则表达什么的,用indexof函数得到特定字符的位置再取之后的几位这种方法我也试过,但是=后面的字符试不定长的,怎么能够确定取之后几位呢?倒是每行尾有个回车符,那就要判断取得=与回车符之间的字符,估计还是很困难,一楼朋友说的字典匹配不知道什么意思,如何使用呢?二楼为什么还要方到表里呢?谢谢大家了,贴子再挂一天,明天散分呵
其实万变不离其宗,只要根据等号,取出等号左右两部分。
左边永远是一个对象,好说。
右边根据格式一共有几种类型,进行判断,毕竟是可以找出每种格式特征的,针对其特征进行正确解析就行了。
然后把分号replace掉,再判断好了
StreamReader reader = new StreamReader("../../.txt",System.Text.Encoding.Default);
while((sLine=reader.ReadLine())!=null)
{
string[] lineclass = sLine.Split('=')
string sLeft = lineclass[0].Trim(); //等号左边的值;
if(sLeft.Substring(0,4)=="Time")
{
//把值截出来不就是拉
}
string sRight = lineclass[1]; //等号右边的值;
}