如何用C++读取txt文件的每一列,放到数组中?
txt文件大体如下:File:F:\20080808.txtCreated:2008年8月8日22:00:51Headertimeformat:AbsoluteTimeo...
txt文件大体如下:
File:F:\20080808.txt
Created:2008年8月8日 22:00:51
Header time format:Absolute
Time of first sample:221 10:56:27.4641102
Title:
Time Ch C1 Ch C2
s Volt Volt
0 0.24 0.16
2E-006 0.24 0.18
4E-006 0.22 0.21
6E-006 0.23 0.21
8E-006 0.24 0.17
1E-005 0.22 0.17
1.2E-005 0.21 0.18
1.4E-005 0.18 0.18
1.6E-005 0.15 0.14
1.8E-005 0.11 0.15
2E-005 0.15 0.19
2.2E-005 0.20 0.20
2.4E-005 0.22 0.19
2.6E-005 0.18 0.15
2.8E-005 0.20 0.17
3E-005 0.16 0.18
3.2E-005 0.24 0.18
3.4E-005 0.22 0.21
3.6E-005 0.23 0.21
3.8E-005 0.24 0.17
4E-005 0.22 0.17
4.2E-005 0.21 0.18
4.4E-005 0.18 0.18
4.6E-005 0.15 0.14
4.8E-005 0.11 0.15
5E-005 0.15 0.19
读取的时候不要前几行,只读下面的数据部分,将数据部分的第二列放到float data1[i]数组中,第三列放到float data2[i]数组中,可在以下的程序基础上继续……
CFileDialog fdlg(TRUE,"txt",NULL,NULL,"fff(*.txt)|*.txt|All files(*.*)|*.*||",NULL);
fdlg.m_ofn.lpstrTitle="文件打开";
if(fdlg.DoModal()==IDOK)
{
CString filename;
filename=fdlg.GetPathName();
CFile f(fdlg.GetFileName(),CFile::modeRead);
char *pBuf;
DWORD dwFileLen;
dwFileLen=f.GetLength();
如何从第9行开始读呢……
或者从多少个字节以后开始读? 展开
File:F:\20080808.txt
Created:2008年8月8日 22:00:51
Header time format:Absolute
Time of first sample:221 10:56:27.4641102
Title:
Time Ch C1 Ch C2
s Volt Volt
0 0.24 0.16
2E-006 0.24 0.18
4E-006 0.22 0.21
6E-006 0.23 0.21
8E-006 0.24 0.17
1E-005 0.22 0.17
1.2E-005 0.21 0.18
1.4E-005 0.18 0.18
1.6E-005 0.15 0.14
1.8E-005 0.11 0.15
2E-005 0.15 0.19
2.2E-005 0.20 0.20
2.4E-005 0.22 0.19
2.6E-005 0.18 0.15
2.8E-005 0.20 0.17
3E-005 0.16 0.18
3.2E-005 0.24 0.18
3.4E-005 0.22 0.21
3.6E-005 0.23 0.21
3.8E-005 0.24 0.17
4E-005 0.22 0.17
4.2E-005 0.21 0.18
4.4E-005 0.18 0.18
4.6E-005 0.15 0.14
4.8E-005 0.11 0.15
5E-005 0.15 0.19
读取的时候不要前几行,只读下面的数据部分,将数据部分的第二列放到float data1[i]数组中,第三列放到float data2[i]数组中,可在以下的程序基础上继续……
CFileDialog fdlg(TRUE,"txt",NULL,NULL,"fff(*.txt)|*.txt|All files(*.*)|*.*||",NULL);
fdlg.m_ofn.lpstrTitle="文件打开";
if(fdlg.DoModal()==IDOK)
{
CString filename;
filename=fdlg.GetPathName();
CFile f(fdlg.GetFileName(),CFile::modeRead);
char *pBuf;
DWORD dwFileLen;
dwFileLen=f.GetLength();
如何从第9行开始读呢……
或者从多少个字节以后开始读? 展开
展开全部
一行一行处理的话建议使用
CStdioFile比较方便,下面是示例代码:
CStdioFile f( _T( "f:\\2.txt" ),CFile::modeRead);
CString linebuf;
CString strdata1,strdata2,strdata3;
int index;
int i=0;
int line = 0;//记录行号
float data1[100];//结果
float data2[100];//结果
while(f.ReadString(linebuf))
{
if(line>9)
{
line++;
continue;//如果小于9行就直接跳过去
}else{
line++;
}//通过这里的来控制读取行的特殊要求
index = linebuf.FindOneOf(TEXT(" \t"));
//第一列数据
strdata1 = linebuf.Left(index);
linebuf.Delete(0,index);
linebuf.TrimLeft();
//第二列数据
index = linebuf.FindOneOf(TEXT(" \t"));
strdata2 = linebuf.Left(index);
linebuf.Delete(0,index);
linebuf.TrimLeft();
//第三列数据
index = linebuf.FindOneOf(TEXT(" \t"));
strdata3 = linebuf.Left(index);
linebuf.Delete(0,index);
linebuf.TrimLeft();
//转换数据
//你可以在这里加一些过滤的语句,比如不要头2句,由于我不知道规律,不好去除数据
data1[i] = (float)_tstof(strdata2) ;
data2[i] = (float)_tstof(strdata3) ;
i++;
//防止float数组越界
if (i>=100)
{
break;
}
}//while结束
CStdioFile比较方便,下面是示例代码:
CStdioFile f( _T( "f:\\2.txt" ),CFile::modeRead);
CString linebuf;
CString strdata1,strdata2,strdata3;
int index;
int i=0;
int line = 0;//记录行号
float data1[100];//结果
float data2[100];//结果
while(f.ReadString(linebuf))
{
if(line>9)
{
line++;
continue;//如果小于9行就直接跳过去
}else{
line++;
}//通过这里的来控制读取行的特殊要求
index = linebuf.FindOneOf(TEXT(" \t"));
//第一列数据
strdata1 = linebuf.Left(index);
linebuf.Delete(0,index);
linebuf.TrimLeft();
//第二列数据
index = linebuf.FindOneOf(TEXT(" \t"));
strdata2 = linebuf.Left(index);
linebuf.Delete(0,index);
linebuf.TrimLeft();
//第三列数据
index = linebuf.FindOneOf(TEXT(" \t"));
strdata3 = linebuf.Left(index);
linebuf.Delete(0,index);
linebuf.TrimLeft();
//转换数据
//你可以在这里加一些过滤的语句,比如不要头2句,由于我不知道规律,不好去除数据
data1[i] = (float)_tstof(strdata2) ;
data2[i] = (float)_tstof(strdata3) ;
i++;
//防止float数组越界
if (i>=100)
{
break;
}
}//while结束
展开全部
1.用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。
2.例程:
#include<stdio.h>
#include<string.h>
void main()
{
char a[100],b[100],c[100];
int i=3,j=4,k=0; //第三行,第四列
FILE *fp = fopen("data.txt","r");
while(fgets(c,100,fp)){ //读入每行数据
i--;
if(i==0) strcpy(a,c); //读到第三行数据
b[k++]=c[j-1]; //把每行的那列字符拷到b中
}
b[k]=0;
printf("第%d行数据:%s\n",i,a);
printf("第%d列数据:%s\n",j,b);
fclose(fp);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fscanf(pf, "%*e%f%f", data1+i, data2+i);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一行一行的处理啊,有困难?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询