如何把文件(如:abc.txt)用c语言读入,并把它放进一个二维数组?急!!!!!

zy6720 2006-11-29 08:49:12
008 1 2.250 Y 2005-12-02 15:06:50.000
008 2 2.239 Y 2005-12-02 15:06:50.000
008 3 2.243 Y 2005-12-02 15:06:50.000
008 4 2.243 Y 2005-12-02 15:06:50.000
008 5 2.237 Y 2005-12-02 15:06:50.000
008 1 .000 Y 2005-12-02 15:11:45.000
008 2 .000 Y 2005-12-02 15:11:45.000
008 3 .000 Y 2005-12-02 15:11:45.000
008 4 .000 Y 2005-12-02 15:11:45.000
008 5 .000 Y 2005-12-02 15:11:45.000
008 1 .000 Y 2005-12-02 15:21:54.000
008 2 .000 Y 2005-12-02 15:21:54.000
008 3 .000 Y 2005-12-02 15:21:54.000
008 4 .000 Y 2005-12-02 15:21:54.000
008 5 .000 Y 2005-12-02 15:21:54.000

如何把上面这个文件(如:abc.txt)用c语言读入,并把它放进一个二维数组a[m][n]
m应为15,n应为5。

希望能有个完整的程序。本人是初学者,有用,先谢谢了!
...全文
959 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
烂番 2006-12-06
  • 打赏
  • 举报
回复
嗯 是要这样改
另外建议用结构体, 像这样char data[6][MAX_LENGTH];比较浪费空间
cy2005abc 2006-12-06
  • 打赏
  • 举报
回复
fscanf( stream, "%s %s %s %s %s %s", &data[0], &data[1], &data[2], &data[3], &data[4], &data[5] );

===
fscanf( stream, "%s %s %s %s %s %s", data[0], data[1],data[2], data[3],data[4], data[5] );

要改吧??
烂番 2006-12-06
  • 打赏
  • 举报
回复
malloc()函数是分配内存用的
这个语句的作用如同是新定义了一个数组: char a[MAX_LEN]
而指针 *a[n][i]是指向这个数组的,(注意*a[][]是个二维的指针数组)

另外使用这个函数貌似要包含头文件“malloc.h”吧
zy6720 2006-12-05
  • 打赏
  • 举报
回复
处理15行数据的搞好了。但是处理上百万条我就又不会了。

对于这个a[n][i] = (char*)malloc(MAX_LENGTH)中的malloc函数不是很清楚,希望高人再指点指点。


#define MAX_LENGTH

这里怎么定义啊
zy6720 2006-12-01
  • 打赏
  • 举报
回复
今天是好了,真奇怪啊,谢谢honker110(honker)

我的数据有上百万条

#define MAX_LENGTH
#define M

这里怎么定义啊。
zy6720 2006-11-30
  • 打赏
  • 举报
回复
但事实上,honker110(honker) 写的那个我运行起来是有问题啊,用的vc++6.0(turbo c/c++)
我自己改的应该用途和他那个是一样的吧,可是结果不是我希望的那个结果,反正好像是没有读入到数组中。我也说不清楚,这里又不能贴图。
上面中的#define MAX_LENGTH 10应为#define MAX_LENGTH 50
boot2006 2006-11-30
  • 打赏
  • 举报
回复
那就用上面honker110(honker) 写的那个就行
zy6720 2006-11-30
  • 打赏
  • 举报
回复
例如:
008 1 2.250 Y 2005-12-02 15:06:50.000

008为第一列,1为第二列,2.250为第三列,Y为第四列,2005-12-02 15:06:50.000为第五列

即:a[0][0]=008,a[0][1]=1,a[0][2]=2.250,a[0][3]=Y,a[0][4]=2005-12-02 15:06:50.000


事实上,我的数据有上百万条,这里只是举一下例子。
zy6720 2006-11-30
  • 打赏
  • 举报
回复
上次发的时候没搞好。文件里的数据为:
008 1 2.250 Y 2005-12-02 15:06:50.000
008 2 2.239 Y 2005-12-02 15:06:50.000
008 3 2.243 Y 2005-12-02 15:06:50.000
008 4 2.243 Y 2005-12-02 15:06:50.000
008 5 2.237 Y 2005-12-02 15:06:50.000
008 1 .000 Y 2005-12-02 15:11:45.000
008 2 .000 Y 2005-12-02 15:11:45.000
008 3 .000 Y 2005-12-02 15:11:45.000
008 4 .000 Y 2005-12-02 15:11:45.000
008 5 .000 Y 2005-12-02 15:11:45.000
008 1 .000 Y 2005-12-02 15:21:54.000
008 2 .000 Y 2005-12-02 15:21:54.000
008 3 .000 Y 2005-12-02 15:21:54.000
008 4 .000 Y 2005-12-02 15:21:54.000
008 5 .000 Y 2005-12-02 15:21:54.000
zy6720 2006-11-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#define MAX_LENGTH 10
#define M 15
#define N 5

main()
{
int i,j;
char data[6][MAX_LENGTH];
char* a[M][N];
FILE *fp;

if((fp=fopen("d:\test","rt"))!=0)
printf( "The file could not opened\n" );

else
{
int n = 0;
while ( !feof( fp ))
{
fscanf( fp, "%s %s %s %s %s %s", &data[0], &data[1], &data[2], &data[3], &data[4], &data[5] );

if (!strcmp(data[2], ".000"))
strcpy(data[2], "0.000");

for (i = 0; i < N; i++)
{
a[n][i] = (char*)malloc(MAX_LENGTH);
strcpy(a[n][i], data[i]);
}
strcat(a[n][4], " ");
strcat(a[n][4], data[5]);

printf("%3s %3s %4s %1s %s \n", a[n][0], a[n][1], a[n][2], a[n][3], a[n][4]);
n++;
}

fclose( fp );

for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
free(a[i][j]);
}
}
}
return 0;
}

我自己改了改,是能运行了,但是好像不能把文本文件的数据读取出来啊,好像要自己一行一行的打的啊。

boot2006 2006-11-30
  • 打赏
  • 举报
回复
n 应为 5
这句怎么理解?
这5列应该是什么呢
honker110 2006-11-30
  • 打赏
  • 举报
回复
好像變量int n = 0;必須在函數開始時聲明
honker110 2006-11-30
  • 打赏
  • 举报
回复
我是在VC2005裡寫的,能通過,你運行有錯誤估計是因為我編譯時是按C++語法編譯的,你看看改一下吧
zy6720 2006-11-29
  • 打赏
  • 举报
回复
运行了一下,有错误啊,不过谢谢了,先研究研究
honker110 2006-11-29
  • 打赏
  • 举报
回复
#define MAX_LENGTH 50

int main(int argc, char* argv[])
{
//StripSpace::Run();

FILE *stream;

char data[6][MAX_LENGTH];
char* result[15][5];


if( fopen_s( &stream, "e:\\test.txt", "r" ) != 0 )
printf( "The file fscanf.out was not opened\n" );
else
{
int n = 0;
while ( !feof( stream ))
{
fscanf( stream, "%s %s %s %s %s %s", &data[0], &data[1], &data[2], &data[3], &data[4], &data[5] ); // C4996

if (!strcmp(data[2], ".000"))
strcpy(data[2], "0");

for (int i = 0; i < 5; i++)
{
result[n][i] = (char*)malloc(MAX_LENGTH);
strcpy(result[n][i], data[i]);
}
strcat(result[n][4], " ");
strcat(result[n][4], data[5]);

printf("%3s %1s %5s %1s %s \n", result[n][0], result[n][1], result[n][2], result[n][3], result[n][4]);

n++;
}

fclose( stream );

for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 5; j++)
{
free(result[i][j]);
}
}
}

return 0;
}
zy6720 2006-11-29
  • 打赏
  • 举报
回复
其中.000应在数组中显示为0

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧