曾黎蓝色档案被侮辱v:问一个用VC对文档里面数据的读取问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 22:12:55
有一个文本文档,里面有两列数据,左边一列为实数数据,右边一列为指数数据,请问各位大虾怎么才能判断出数据的行数,然后将左边一列的实数数据和右边一列指数数据分别放在两个文档里?比如说
346.00 1.000E-003
346.50 1.000E-003
347.00 1.000E-003
347.50 1.000E-003
348.00 1.000E-003
348.50 1.000E-003
怎么判断出这组数据的行数,并且将左边和右边分别放在两个文档里

这个问题不需预先知道文档的行数,如果一定要知道的话,
有一个笨办法,那就是将文档从头到尾读一遍,记下换行符
的个数,就是它的行数(如果换行符不是最后一个话,
需要加1)。

代码如下:

//求指定文件的行数
int line_count(char* path)
{
FILE *f=fopen(path,"r");
int count=0;//行数计数器
char c;
int flag;//标志
for(flag=fscanf(f,"%c",&c);flag!=EOF && flag>0;flag=fscanf(f,"%c",&c))
{
if(c=='\n')count++;
}
if(c!='\n')count++;
fclose(f);

return count;
}

对于这个问题,你可以采用逐个读取字符,
空格之前的字符写入文件1,换行符之前的字符写入文件2,
这样自然也就将它分成了你要求的两个文档

代码如下:

//将文件path中的内容分为两部分,分别存入outFile1,outFile2,并返回文件path的行数
int split(char* path, char* outFile1,char* outFile2)
{
FILE *r=fopen(path,"r");//输入文件
FILE *w1=fopen(outFile1,"w");//输出文件1
FILE *w2=fopen(outFile2,"w");//输出文件2

if(r==NULL || w1==NULL || w2==NULL)
{
//打开文件失败,可以添加其它错误处理
return -1;
}

int eof;//用于指示是否已经到达文件末尾
char c;//读入的字符
bool b=true;//b为true时,写入输出文件1,否则写入输出文件2
int count=0;//文件行数
for(eof=fscanf(r,"%c",&c);eof!=EOF && eof>0; eof=fscanf(r,"%c",&c))
{
switch(c)
{
case ' '://碰到换行符
b=false;
fprintf(w1,"\n");
break;
case '\n'://碰到换行符
b=true;
fprintf(w2,"\n");

count++;//行数加1
break;
case '\r'://该字符总与\n成对出现,忽略
break;
default:
if(b==true)
fprintf(w1,"%c",c);
else
fprintf(w2,"%c",c);
break;
}
}

if(c!='\n')count++;//最后一个字符不是换行符,应将行数加1

fclose(w1);
fclose(w2);
fclose(r);
return count;
}

调用方式为:

int lineCount=split("C:\\a.txt","C:\\a1.txt","C:\\a2.txt");

祝你好运!