C语言读取文件内容,保存到数组里面

前言

本文分为两部分,其中一部分主要使用C语言编程实现读取文件内容(要打开的文件名称采用命令行方式输入),统计文件内容的行数,并将文件内容保存到数组里面打印输出。
另一部分使用C语言编程实现读取文件内容(要打开的文件名称采用命令行方式输入),统计文件内容的行数,保存文件内容的数组采用动态分配内存的方式,这样不管文件大小,都可以进行文件内容读取保存。同时还可将读取的文件内容使用fprintf函数保存到另一个文件中。

第一部分

对保存文件内容的数组分配200个int型长度的内存。
主要使用c语言从命令行输入文件,读入文件,统计行数,并将文件内容保存到数组里面。

程序

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main(int argc,char* argv[])   //命令行传参,argc代表传入参数个数,argv表示传入的参数
{
	int i,j;
	int k=0;
	int count=0;  //统计文件中字符个数
	int sum_row;  //统计文件中字符个数
	int flag=0;
	FILE *fp;  //文件指针
	FILE *fp1;
	int a_in[200];  //保存文件内容的数组
	int b_in[200];  //保存文件内容的数组
	fp=fopen(argv[1],"r");   //打开文件,只读
	//fp1=fopen("int_data.txt","r"); 
	fp1=fopen(argv[1],"r"); 
	if(fp==NULL)  
	{  
		printf("File cannot open! " );  
		//exit;  
		return 0;
	}  
	 if(argc!=2)   //判断输入参数个数,如果不为2个就报错
    {
        printf("参数个数错误");
        return -1;
    }
	
while(!feof(fp))   //读文件,直到文件末尾
  {
    flag = fgetc(fp);  //将文件内容附给flag
    if(flag == '\n')  //如果为\n表示到行尾,便进行计数
      count++;
  }
  sum_row = count+1; //加上文件最后一行,即为文件总的行数
  printf("文件行数为:%d",sum_row);  //打印文件行数,因为每行只有一个数,所以即统计文件中有多少个数
  printf("\n");
for(i=0;i<sum_row;i++)  //控制文件行数
	{
		for (j=0;j<1;j++)  //控制文件列数
		{
		fscanf(fp1,"%d",&a_in[j]);  //将文件其中一行内容保存到数组中
		b_in[k]=a_in[j];  //将读到的每一行的数据都保存到b_in数组中
		k++;  //行数加一
	}
}
printf("文件内容为:\n");
for (i=0;i<k;i++)  //循环打印保存到数组中的数据
{
	printf("%d\t",b_in[i]);  //打印
}
fclose(fp);  //关闭文件,释放指向文件的指针
fclose(fp1);  //关闭文件,释放指向文件的指针
return 0;
} 

运行结果

  • 注 运行采用tcc运行C程序

文件内容为从1到110个数,每个数存储在一行
在这里插入图片描述
运行结果:
在这里插入图片描述

C:\Users\CL\Desktop\学习\C\conv\fprintf>tcc read1.c

C:\Users\CL\Desktop\学习\C\conv\fprintf>read1.exe int_data.txt
文件行数为:110
文件内容为:
1       2       3       4       5       6       7       8       9       10      11      12      13      14      15
16      17      18      19      20      21      22      23      24      25      26      27      28      29      30
31      32      33      34      35      36      37      38      39      40      41      42      43      44      45
46      47      48      49      50      51      52      53      54      55      56      57      58      59      60
61      62      63      64      65      66      67      68      69      70      71      72      73      74      75
76      77      78      79      80      81      82      83      84      85      86      87      88      89      90
91      92      93      94      95      96      97      98      99      100     101     102     103     104     105
106     107     108     109     110

第二部分

主要实现C语言从命令行输入文件,读入文件,统计行数,对保存文件内容的数组进行动态内存分配,并将文件内容保存到数组里面,打印输出,同时将读入的文件内容保存到另外一个文件中。

程序

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main(int argc,char* argv[])   //命令行传参,argc代表传入参数个数,argv表示传入的参数
{
	int i,j;
	int k=0;
	int count=0;  //统计文件中字符个数
	int sum_row;  //统计文件中字符个数
	int flag=0;  //用于暂时将文件内容保存
	FILE *fp;    //文件指针
	FILE *fp1; 
	FILE *fp2;
	int *a_in;   //用于读文件中的数据
	int *b_in;   //用于保存从文件中读入的数据
	fp=fopen(argv[1],"r");   //打开文件,只读,argv[1]代表从命令行输入的文件名称,即运行.exe程序时输入的第二个参数
	fp1=fopen(argv[1],"r");   //再次打开文件,(第一次打开文件用于统计文件的行数,即数据的个数)用于将文件内容保存到指针数组里
	fp2=fopen("test1.txt","w");   //打开文件,只写,用于将数组内容重新保存到另一个文件中
	if(fp==NULL)    //打开文件失败
	{  
		printf("File cannot open! ");  
		//exit;  
		return 0;
	}  
	 if(argc!=2)   //判断输入参数个数,如果不为2个就报错
    {
        printf("参数个数错误");
        return -1;
    }
	
	while(!feof(fp))  //读文件,直到文件末尾
	{
		flag = fgetc(fp);  //将文件内容附给flag
		if(flag == '\n')  //如果为\n表示到行尾,便进行计数
		{
			count++;  //统计文件行数
		}
	}
	sum_row = count+1; //加上文件最后一行,即为文件总的行数
	printf("文件行数为:%d",sum_row);  //统计文件行数,因为每行只有一个数,所以即统计文件中有多少个数
	printf("\n");
	a_in = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	b_in = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	if (!a_in)   //动态内存分配失败
    {
       printf("内存分配失败");
       return-1;
    }
	if (!b_in)  //动态内存分配失败
    {
       printf("内存分配失败");
       return-1;
    }

	for(i=0;i<sum_row;i++)  //控制文件行数
	{
		for (j=0;j<1;j++)   //控制文件列数
		{
			fscanf(fp1,"%d",&a_in[j]);  //将文件其中一行内容保存到指针数组中
			b_in[k]=a_in[j];    //将读到的每一行的数据都保存到b_in指针数组中
			k++;  //行数加一
		}
	}		
	printf("文件内容为:\n");
	for (i=0;i<k;i++)  //循环打印保存到指针数组中的数据
	{
		printf("%d\t",b_in[i]);  //打印
		fprintf(fp2,"%d\n",b_in[i]);  //将保存到数组的数据保存到test1.txt文件中
	}
	fclose(fp);  //关闭文件,释放指向文件的指针
	fclose(fp1);  //关闭文件,释放指向文件的指针
	fclose(fp2);
	return 0;
	free(a_in);  //释放指针
	free(b_in);  //释放指针
	return 0;
}

文件内容为从1到110个数,每个数存储在一行。

结果

C:\Users\CL\Desktop\学习\C\conv\fprintf>tcc read2.c

C:\Users\CL\Desktop\学习\C\conv\fprintf>read2.exe int_data.txt
文件行数为:110
文件内容为:
1       2       3       4       5       6       7       8       9       10      11      12      13      14      15
16      17      18      19      20      21      22      23      24      25      26      27      28      29      30
31      32      33      34      35      36      37      38      39      40      41      42      43      44      45
46      47      48      49      50      51      52      53      54      55      56      57      58      59      60
61      62      63      64      65      66      67      68      69      70      71      72      73      74      75
76      77      78      79      80      81      82      83      84      85      86      87      88      89      90
91      92      93      94      95      96      97      98      99      100     101     102     103     104     105
106     107     108     109     110

保存到新文件的结果:
在这里插入图片描述
到此就成功实现了使用C语言进行文件内容读取,统计个数,保存到数组的功能,同时也实现了数据重新保存到另一个文件中。
如何从命令行输入数据,并保存到文件中,可参考我的另一篇博客:
c语言从命令行输入数据,并保存到文件中
对于如何统计每行有多个数据的文件中数据的个数,可参考我的博客:
c语言命令行传参输入要读入的文件,统计文件中字符的个数

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值