我是用一个软件运行后得到一个文本
文本是由如下这样一些内容组成(下面的只是其中一段,其余的是类似的重复的文本,只是我需要获取的值不一样)
现在就是要提取出 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
----------------解决方案--------------------------------------------------------
思路:
逐行读入文本数据,分析是否含有字段“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>头文件中
----------------解决方案--------------------------------------------------------
思路:
逐行读入文本数据,分析是否含有字段“P =”,若有,则提取后面的数据。
如何"提取后面的数据"??
修改指针的位置么? 具体怎么操作啊
----------------解决方案--------------------------------------------------------
自己顶一下,继续求助~
----------------解决方案--------------------------------------------------------
哦,对内容进行行拆分,用回车换行标志\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='的做法
这样做可能要简单点
----------------解决方案--------------------------------------------------------
谢谢楼上的各位,在你们的帮助之下已经解决了~
----------------解决方案--------------------------------------------------------