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); //将文件内容附给flagif(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.cC:\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); //将文件内容附给flagif(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.cC:\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语言命令行传参输入要读入的文件,统计文件中字符的个数
C语言读取文件内容,保存到数组里面相关推荐
- C语言 读取文件内容
读取文件文本内容: 要读取的目标文件: 要读取的目标内容: 运行前请将代码文件和要读取的文件放在同一目录下. #include <stdio.h>int main(void){int ch ...
- C语言读取文件大量数据到数组
针对.txt文档的大量有规律数据,譬如100行8列的数据将其读取到二维数组(矩阵)中,留作之后的数据处理. 改程序通过宏定义的方法来确定将要读取程序的行数和列数,将数据读取到二维数组data[100] ...
- cNoteReadFile_C语言读取文件内容
1 #include"stdio.h" 2 /* 3 char readScale() 4 从文本中读出一定范围的字符到数组中 5 文本名 范围 数组地址 6 由函数参数给定 7 ...
- c语言读取文件到结构体数组,有关文件读写到结构体数组问题;
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 typedef struct IMG { char *name; int weight; int height; }IMG; 这是我的结构体存的是 图片的 ...
- linux 读取变量内容,linux sh 读取文件内容,if判读语句,变量var打印
#!/bin/bash #1 读取文件 并显示 cat state.txt | while read line do echo $line done #2 读取文件 并显示 cat state.txt ...
- python 保存pdf文件_PyPDF2读取PDF文件内容保存到本地TXT实例
我就废话不多说了,大家还是直接看代码吧! from PyPDF2.pdf import PdfFileReader import pandas as pd def Pdf_to_txt(pdf): f ...
- PyPDF2读取PDF文件内容保存到本地TXT
利用PyPDF2读取PDF文件内容保存到本地TXT from PyPDF2.pdf import PdfFileReader import pandas as pddef Pdf_to_txt(pdf ...
- php读取文件内容不全,php读取文件内容的三种方法
//**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...
- js 读取php文件内容为空,PHP 读取文件内容代码(txt,js等)
PHP 读取文件内容代码(txt,js等) 发布于 2014-10-15 20:15:37 | 128 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hyperte ...
最新文章
- python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
- 华为python工程师工资-华为百万年薪抢人工智能应届生,这个高薪行业你如何进入?...
- [Elasticsearch2.x] 多字段搜索 (三) - multi_match查询和多数字段 译
- hibernate3 hbm2java_hibernate3下hbm2ddl和hbm2java的配置
- 返回结果数据实体类R
- java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别...
- STL源码剖析 set相关算法
- Spring : @EnableAutoConfiguration注解
- log4j.properties配置详解(转载)
- [Ext JS 4] 实战之浏览器兼容
- Sketch中文版教程,已加星标的更新如何使用?什么是Sketch星标功能?
- tablayout 增加数字小标_Android中TabLayout添加小红点的示例代码
- 软件测试面试题整理(三)之工作/项目流程篇
- QT5.11下载与安装教程
- 量子计算机采用量子力学原理,物理学:量子计算机的工作是不是就是根据量子力学原理造的?...
- 【Unity】实现立体的UI
- 不会哄女朋友?来,教你爬搞笑图片
- 京东jos 获取授权及php-sdk的使用示例
- idea 启动多个项目 减少内存占用
- mywallop、orkut、gmail的邀请
热门文章
- Effie :影评人“炸锅”,献礼建党 100 周年的《大决战》怎么了?
- OpenFire源码学习之五:用户登录
- QT QSettings介绍
- [转载]离别二十年,旧地重返.老友重逢,河口再练拳......。
- Java学习四阶段-07 服务注册中心Nacos
- tldr_tldr将手册页转换为简明英语解释
- 还在手动发早安吗?教你用java实现每日给女友微信发送早安
- VB和C#中循环语句
- 中国电动压缩机行业市场研究与预测报告(2023版)
- JAVA-基于RFC6238的TOTP算法的简单实现