当前位置: 代码迷 >> C语言 >> [新手求助]怎么查找一个文本中的特定变量的值?
  详细解决方案

[新手求助]怎么查找一个文本中的特定变量的值?

热度:403   发布时间:2007-08-16 14:50:42.0
[新手求助]怎么查找一个文本中的特定变量的值?

我是用一个软件运行后得到一个文本
文本是由如下这样一些内容组成(下面的只是其中一段,其余的是类似的重复的文本,只是我需要获取的值不一样)
现在就是要提取出 P T2 SD的值,并将他们分别赋给某个数组
本人C语言基础比较差,弄了好几天了,也没弄好,请大家帮帮忙,给个思路/提示也行... 谢谢了




示例文本内容:


Dataset :
D:/Bruker/TOPSPIN/data/STOCSY/nmr/Human Urine/6/pdata/2
AREA fit :
I[t]= P*exp(-t/T2)

128 points for Integral 1, Integral Region from 0.000 to 0.000 ppm
Results Comp. 1

P = 1.277e+000
T2 = 13.567s
SD = 6.446e-002

tau ppm integral intensity

674.000m 4.000 3.3837e+008 eliminated
921.000m 4.000 3.3533e+008 eliminated
1.168s 4.000 3.3166e+008 eliminated
1.415s 4.000 3.3144e+008 eliminated
1.662s 4.000 3.2925e+008 eliminated
1.909s 4.000 3.2954e+008 eliminated
2.156s 4.000 3.3067e+008 eliminated
2.403s 4.000 3.2544e+008 eliminated
2.649s 4.000 3.2677e+008 eliminated
2.896s 4.000 3.2613e+008 eliminated
3.143s 4.000 3.2473e+008 eliminated
3.390s 4.000 3.1975e+008 eliminated
3.637s 4.000 3.1791e+008 eliminated
3.884s 4.000 3.1967e+008 eliminated
4.131s 4.000 3.099e+008 eliminated
4.378s 4.000 3.0408e+008 eliminated
4.625s 4.000 3.0332e+008 eliminated
4.872s 4.000 3.0542e+008 eliminated
5.118s 4.000 3.0375e+008 eliminated

搜索更多相关的解决方案: 文本  变量  TOPSPIN  Urine  

----------------解决方案--------------------------------------------------------

思路:
逐行读入文本数据,分析是否含有字段“P =”,若有,则提取后面的数据。

[此贴子已经被作者于2007-8-16 15:00:33编辑过]


----------------解决方案--------------------------------------------------------
能否详细点 用到的函数

我C真的很菜...

----------------解决方案--------------------------------------------------------

FILE *fp;
if(fp=fopen("文本所在路径","打开方式")!=NULL)
{
exit(1);
}
else
{
相应操作;
}

几个可能会用到的函数:
char* gets(char* buf,int n,FILE* fp) //从文件指针所在位置读入n个字符到数组buf[]中;
double atof(char*) //将字符串转换成双精度数值;
int strncmp(char* s,char* t,n) //比较字符串s和t的前n个字符
以上函数都在<string.h>头文件中


----------------解决方案--------------------------------------------------------
以下是引用noah_shi在2007-8-16 14:59:50的发言:

思路:
逐行读入文本数据,分析是否含有字段“P =”,若有,则提取后面的数据。



如何"提取后面的数据"??
修改指针的位置么? 具体怎么操作啊


----------------解决方案--------------------------------------------------------
回复:(zhuhang)[新手求助]怎么查找一个文本中的特定...

自己顶一下,继续求助~


----------------解决方案--------------------------------------------------------
哦,对内容进行行拆分,用回车换行标志\r\n
保存到char str[MAXLINE][100];里去(或者用滚动数组也可)
然后循环提取sscanf(str[n],"%s = %s", str1, str2);
----------------解决方案--------------------------------------------------------

大概得写了下,思路就是这样的。具体的考虑关键字匹配的优化,自己做吧,比如关键字“p = ”,p的大小写兼容和空格过滤,以及取出的文本文件里的大小写兼容和空格过滤。

程序代码:

#include <iostream.h>
#include <fstream.h>
#include <string.h>
#define MAX_LEN 1024

void main()
{
char buf[MAX_LEN];
char *ret;
int i = 0;
ifstream in(\"1.txt\");
while(!in.eof())
{
in.getline(buf,MAX_LEN);
char temp[] = \"P=\"; //关键字设置
if(strstr(buf,temp)) //是否找到关键字\"P=\"
{
i = 0;
while(buf[i]!='\0')
{
if(buf[i] == temp[0] && buf[i+1] == temp[1])
{
ret = &buf[i+2];
cout<<ret;
return;
}
}

}
}
}


----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <conio.h>
int main()
{
FILE *fp;

fp=fopen("d:\\123.txt","r");

while(!feof(fp))
{

if(fgetc(fp)=='p'&&fgetc(fp)=='=')
/*这里写取 "p="后的值的算法*/
printf("p=");
fseek(fp,-1,SEEK_CUR);
if(fgetc(fp)=='p'&&fgetc(fp)=='=')
printf("p=");
}
fclose(fp);
getch();
return 0;
}
我只写了 'p='的做法
这样做可能要简单点


----------------解决方案--------------------------------------------------------
回复:(zhuhang)[新手求助]怎么查找一个文本中的特定...

谢谢楼上的各位,在你们的帮助之下已经解决了~


----------------解决方案--------------------------------------------------------
  相关解决方案