如何用C语言讲文本文件中储存的数据读入一个二维数组
比如说我在一份文本文件中存有如下格式的数据10.20.160.60.4580.43220.440.580.75.56.4231.4582.458.122441.02每行第...
比如说我在一份文本文件中存有如下格式的数据
1 0.2 0.16 0.6 0.458 0.432
2 0.44 0.58 0.7 5.5 6.42
3 1.458 2.45 8.12 244 1.02
每行第一个数字是序号,后面的每个数字用空格分隔开
文件存储在D:\\GLUE\\0818.txt
我写了一点程序,但是不对。希望高手指点。
int main(int argc, char *argv[])
int i = 0;
char line[1000]; # maximum characters stored in a line
char wLine[1000];
double SIMUL[100][100];
int lineCount = 0;
Fsimul.file = NULL;
if ((Fsimul.file = fopen("D:\\GLUE\\0818.txt","rt")) == NULL break;
while ( fgets(line, MAXLINE, Fsimul.file) != NULL )
{
// --- make copy of line and scan for tokens
lineCount++;
strcpy(wLine, line);
for (j = 0; j < 5; j++)
{
SIMUL[i][j] = strtod(wLine, NULL);
i++;
}
..................................
如何跳过序号,只把序号后面的数写入数组中呢?谢谢啦 展开
1 0.2 0.16 0.6 0.458 0.432
2 0.44 0.58 0.7 5.5 6.42
3 1.458 2.45 8.12 244 1.02
每行第一个数字是序号,后面的每个数字用空格分隔开
文件存储在D:\\GLUE\\0818.txt
我写了一点程序,但是不对。希望高手指点。
int main(int argc, char *argv[])
int i = 0;
char line[1000]; # maximum characters stored in a line
char wLine[1000];
double SIMUL[100][100];
int lineCount = 0;
Fsimul.file = NULL;
if ((Fsimul.file = fopen("D:\\GLUE\\0818.txt","rt")) == NULL break;
while ( fgets(line, MAXLINE, Fsimul.file) != NULL )
{
// --- make copy of line and scan for tokens
lineCount++;
strcpy(wLine, line);
for (j = 0; j < 5; j++)
{
SIMUL[i][j] = strtod(wLine, NULL);
i++;
}
..................................
如何跳过序号,只把序号后面的数写入数组中呢?谢谢啦 展开
7个回答
展开全部
此代码符合你的要求:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
FILE *fp;
char line[1000];
char wLine[1000];
double SIMUL[100][100];
int lineCount = 0;
char *delim=" ";
int ii,jj;
fp = fopen("1.txt","r");
if( fp==NULL){
printf("fopen error!\n");
return -1;
}
memset(line,0x00,sizeof(line));
while(fgets(line,1000,fp)!=NULL){
strtok(line,delim);
for(ii=0;ii<5;ii++){
SIMUL[lineCount][ii] = atof(strtok(NULL,delim));
}
lineCount++;
}
fclose(fp);
//打印结果
for(ii=0;ii<lineCount;ii++){
for(jj=0;jj<5;jj++){
printf("%f ",SIMUL[ii][jj]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
FILE *fp;
char line[1000];
char wLine[1000];
double SIMUL[100][100];
int lineCount = 0;
char *delim=" ";
int ii,jj;
fp = fopen("1.txt","r");
if( fp==NULL){
printf("fopen error!\n");
return -1;
}
memset(line,0x00,sizeof(line));
while(fgets(line,1000,fp)!=NULL){
strtok(line,delim);
for(ii=0;ii<5;ii++){
SIMUL[lineCount][ii] = atof(strtok(NULL,delim));
}
lineCount++;
}
fclose(fp);
//打印结果
for(ii=0;ii<lineCount;ii++){
for(jj=0;jj<5;jj++){
printf("%f ",SIMUL[ii][jj]);
}
printf("\n");
}
return 0;
}
展开全部
自己试试看,下午无聊给你做了一下,我在linux下面跑起来是可以的
完全满足你的最终要求,忽略掉了行号,记录真实数据到二维数组
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int localize(char *buf);
void linechg(double *dest, char *sour);
main()
{
FILE *f1;
int i=0,j=0,k=0,len_f1;
double dest[100];
char sour[100];
double SIMUL[100][100];
f1=fopen("k2","rt");//改为你自己的路径
if(f1==NULL)
{
printf("Fail to open the source file!\n");
return 2;
}
while(1){
if(fgets(sour,100,f1)==NULL)
return 1; //input complete
else
{
linechg(dest, sour);//做单行的处理
strncpy(SIMUL[i],dest,5);
printf("\n");
}
}
fclose(f1);
for(i=0;i<5;i++)
printf("%lf",SIMUL[i]);
return 0;
}
/*
定位空格(实际上就是定位下一个浮点数起始位置)*/
int localize(char *buf)
{
int i;
for(i=1;i<1024;i++)
{
if(buf[i]==' ')
break;
else if((buf[i]=='\n')||(buf[i]==EOF))//analyse completely
{
i=0;
break;
}
}
return i;
}
void linechg(double *dest, char *sour)
{
int i=1,j=0,k=0;
for(k=0;k<5;k++)
{
i=localize(sour+j);
if(i==0) break;
j+=i;//current new location
dest[k]=strtod(sour+j,NULL);
printf("%lf ",dest[k]);
}
}
完全满足你的最终要求,忽略掉了行号,记录真实数据到二维数组
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int localize(char *buf);
void linechg(double *dest, char *sour);
main()
{
FILE *f1;
int i=0,j=0,k=0,len_f1;
double dest[100];
char sour[100];
double SIMUL[100][100];
f1=fopen("k2","rt");//改为你自己的路径
if(f1==NULL)
{
printf("Fail to open the source file!\n");
return 2;
}
while(1){
if(fgets(sour,100,f1)==NULL)
return 1; //input complete
else
{
linechg(dest, sour);//做单行的处理
strncpy(SIMUL[i],dest,5);
printf("\n");
}
}
fclose(f1);
for(i=0;i<5;i++)
printf("%lf",SIMUL[i]);
return 0;
}
/*
定位空格(实际上就是定位下一个浮点数起始位置)*/
int localize(char *buf)
{
int i;
for(i=1;i<1024;i++)
{
if(buf[i]==' ')
break;
else if((buf[i]=='\n')||(buf[i]==EOF))//analyse completely
{
i=0;
break;
}
}
return i;
}
void linechg(double *dest, char *sour)
{
int i=1,j=0,k=0;
for(k=0;k<5;k++)
{
i=localize(sour+j);
if(i==0) break;
j+=i;//current new location
dest[k]=strtod(sour+j,NULL);
printf("%lf ",dest[k]);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我只能基本上推翻你写的所有程序了,因为你没有实际进行剔除第一个数的操作
#include <stdio.h>
int main(int argc, char *argv[])
{
double SIMUL[100][100];
char line[1000];
int i = 0;
int trush; //用于存放每行第一个数,但没有实际作用
FILE *Fsimul = NULL;
if((Fsimul = fopen("D:\\GLUE\\0818.txt","rt")) == NULL)
return -1;
while ( fgets(line, 1000, Fsimul) != NULL )
{
sscanf(line, "%d %lf %lf %lf %lf %lf", &trush, &SIMUL[i][0], &SIMUL[i][1], &SIMUL[i][2], &SIMUL[i][3], &SIMUL[i][4]);
//根据你写的部分程序来看,每行都是有固定的5个数需要录入到数组中,那么这样用sscanf会方便很多
i++; //每行录入完毕后自加进入下一行的录入
}
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[])
{
double SIMUL[100][100];
char line[1000];
int i = 0;
int trush; //用于存放每行第一个数,但没有实际作用
FILE *Fsimul = NULL;
if((Fsimul = fopen("D:\\GLUE\\0818.txt","rt")) == NULL)
return -1;
while ( fgets(line, 1000, Fsimul) != NULL )
{
sscanf(line, "%d %lf %lf %lf %lf %lf", &trush, &SIMUL[i][0], &SIMUL[i][1], &SIMUL[i][2], &SIMUL[i][3], &SIMUL[i][4]);
//根据你写的部分程序来看,每行都是有固定的5个数需要录入到数组中,那么这样用sscanf会方便很多
i++; //每行录入完毕后自加进入下一行的录入
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-08-23 · 知道合伙人软件行家
关注
展开全部
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{
FILE *fp;
int i = 0;
double data[100][5];
char str[100];
fp = fopen("F:/112.txt", "r"); //打开文件
if (!fp)
return -1;
while (!feof(fp)) // 读取数据
{
fgets(str, 100, fp);
strtok(str, " ");
for (int n = 0; n < 5; n++) // 截取数据
data[i][n] = atof(strtok(NULL, " "));
i++;
}
fclose(fp);
for (int r = 0; r < i; r++) // 打印数据
{
for (int n = 0; n < 5; n++)
printf("%lf ", data[r][n]);
printf("\n");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文本文件中的数据格式如果能自己控制, 并且是固定的话, 完全可以通过#include, 让编译器来帮你读入....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询