精华内容
下载资源
问答
  • 【C语言】C语言读取文本文件

    万次阅读 多人点赞 2019-01-28 20:44:26
    文章目录【C语言】C语言读取文本文件一 前言二 按字符读取文本文件1、程序实现一2、程序实现二三、按行读取文本文件1、程序实现一2、程序实现二四、说明 【C语言】C语言读取文本文件 一 前言  ...

    【C语言】C语言读取文本文件

    一 前言

            时不时牵扯到做处理文件,然后就要读取文本,每次都要重新写,这里就做一个记录,方便以后用到,就直接复制粘贴就ok。

    二 按字符读取文本文件

    1、程序实现一

            1:代码

    /*
     程序功能:分别按照字符,行标识读取文本文件
    
     */
    
    // 一、按照字符读取文本文件
    #include <stdio.h>
    int fileHang(FILE *fp);
    
    int main(int argc, char *argv[])
    {
        int flag;
        char ch;
    
    
        char *f1 = argv[1];         //  后台参数
        FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件
    
        if(fp1 == NULL){
            printf("文件 %s 打开时发生错误", f1);
            return -1;
        }
    
        while((ch=fgetc(fp1)) != EOF){
            // putchar(ch);
            printf("%c",ch);
        }
     
        // fileHang(fp1);
        fclose(fp1);
        return 0;
    }
    

            2:结果
    在这里插入图片描述

    2、程序实现二

            1:代码

    /*
     程序功能:分别按照字符,行标识读取文本文件
    
     */
    
    // 一、按照字符读取文本文件
    #include <stdio.h>
    int fileHang(FILE *fp);
    
    int main(int argc, char *argv[])
    {
       
        char *f1 = argv[1];         //  后台参数
        FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件
    
        if (fp1 == NULL)
        {
            printf("文件 %s 打开时发生错误", f1);
            return -1;
        }
    
        fileHang(fp1); // 调用自定义函数
        fclose(fp1); // 关闭文件指针
        return 0;
    }
    
    
    // 创建子函数
    int fileHang(FILE *fp1)
    {
    
        int lines = 1;
        char ch;
        while ((ch = fgetc(fp1)) != EOF)// 读取到文件末尾或读取失败时返回 EOF
        { 
            
            if (ch == '\n')
            {
                lines++;
            }
            // putchar(ch);
            printf("%c", ch);
        }
    
        printf("\n 一共 %d 行",lines);
        return 1;
    }
    
    

            2:结果
    在这里插入图片描述

    3、以西游记为海量文本进行测试

            1:代码

    /*
     程序功能:分别按照字符,行标识读取文本文件
    
     */
    
    // 一、按照字符读取文本文件
    
    #include <stdio.h>
    #include<time.h>
    
    int fileHang(FILE *fp);
    
    int main(int argc, char *argv[])
    {
       clock_t start,finish;
       double duration;
    
        char *f1 = argv[1];         //  后台参数
        FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件
        start = clock();
        if (fp1 == NULL)
        {
            printf("文件 %s 打开时发生错误", f1);
            return -1;
        }
    
        fileHang(fp1); // 调用自定义函数
        fclose(fp1); // 关闭文件指针
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
        printf("\n一共耗时 %f 秒",duration);
        return 0;
    }
    
    
    // 创建子函数
    int fileHang(FILE *fp1)
    {
    
        int lines = 1;
        char ch;
        while ((ch = fgetc(fp1)) != EOF)// 读取到文件末尾或读取失败时返回 EOF
        { 
            
            if (ch == '\n')
            {
                lines++;
            }
            // putchar(ch);
            printf("%c", ch);
        }
    
        printf("\n 一共 %d 行",lines);
        return 1;
    }
    
    
    

            2:结果

    在这里插入图片描述

    三、按行读取文本文件

    1、程序实现一

            1:代码

    /*
     程序功能:分别按照字符,行标识读取文本文件
    
     */
    
    // 二、按照行读取文本文件
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 1024
    int fileHang(FILE *fp);
    
    int main(int argc, char *argv[])
    {
        char line[MAX];
        int lines = 0;
        char *f1 = argv[1];         //  后台参数
        FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件
    
        if (fp1 == NULL)
        {
            printf("文件 %s 打开时发生错误", f1);
            exit(1);
        }
    
        while(fgets(line,MAX,fp1) != NULL){
        // 或者,使用whie(!feof(fp1)){fgets(line,MAX,fp1)}
            lines++; // 统计行数
            printf(line);// 打印文本
            
        }
        
        // fileHang(fp1); // 调用自定义函数
        printf("\n一共 %d 行",lines);
        fclose(fp1); // 关闭文件指针
        return 0;
    }
    

            2:结果
    在这里插入图片描述

    2、程序实现二

            1:程序

    /*
     程序功能:分别按照字符,行标识读取文本文件
    
    */
    
    // 二、按照行读取文本文件
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 1024
    int fileHang(FILE *fp);
    
    int main(int argc, char *argv[])
    {
        char line[MAX];
        int lines = 0;
        char *f1 = argv[1];         //  后台参数
        FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件
    
        if (fp1 == NULL)
        {
            printf("文件 %s 打开时发生错误", f1);
            exit(1);
        }
    
        fileHang(fp1); // 调用自定义函数
        fclose(fp1);   // 关闭文件指针
        return 0;
    }
    
    
    // 创建子函数
    int fileHang(FILE *fp1)
    {
    
        int lines = 0;
        char line[MAX];
        while (fgets(line, MAX, fp1) != NULL)
        {
            lines++;      // 统计行数
            printf(line); // 打印文本
        }
        printf("\n 一共 %d 行", lines);
        return 1;
    }
    
    

            2:结果
    在这里插入图片描述

    四、说明

            以上的程序实现一和实现二其本质上是一样的,区别就是实现二是将代码封装了起来。

    展开全文
  • C语言读取文本文件

    千次阅读 2016-11-17 14:21:47
    //(3)读取整个文件--文件随机读取 //获取文件长度 fseek(pFile, 0, SEEK_END); //文件指针移到文件末尾  iFileLen = ftell(pFile); //获得文件当前指针位置,即为文件长度  rewind(pFile); //将文件...


    C代码  收藏代码
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. char* ReadFile(char *filename)  
    5. {  
    6.    char *buffer = NULL;  
    7.    int string_size,read_size;  
    8.    FILE *handler = fopen(filename,"r");  
    9.   
    10.    if (handler)  
    11.    {  
    12.        //seek the last byte of the file  
    13.        fseek(handler,0,SEEK_END);  
    14.        //offset from the first to the last byte, or in other words, filesize  
    15.        string_size = ftell (handler);  
    16.        //go back to the start of the file  
    17.        rewind(handler);  
    18.   
    19.        //allocate a string that can hold it all  
    20.        buffer = (char*) malloc (sizeof(char) * (string_size + 1) );  
    21.        //read it all in one operation  
    22.        read_size = fread(buffer,sizeof(char),string_size,handler);  
    23.        //fread doesnt set it so put a \0 in the last position  
    24.        //and buffer is now officialy a string  
    25.        buffer[string_size+1] = '\0';  
    26.   
    27.        if (string_size != read_size) {  
    28.            //something went wrong, throw away the memory and set  
    29.            //the buffer to NULL  
    30.            free(buffer);  
    31.            buffer = NULL;  
    32.         }  
    33.     }  
    34.   
    35.     return buffer;  
    36. }  
    37.   
    38. int main() {  
    39.     char *string = ReadFile("yourfile.txt");  
    40.     if (string) {  
    41.         puts(string);  
    42.         free(string);  
    43.     }  
    44.   
    45.     return 0;  
    46. }  
    C代码  收藏代码
    1. #include   <stdio.h>    
    2.   
    3. long   filesize(FILE   *stream);    
    4.   
    5. int   main(void)    
    6. {    
    7.       FILE   *fptr;    
    8.   
    9.       stream   =   fopen( "MYFILE.TXT ",   "w+ ");    
    10.       fprintf(fptr,   "This   is   a   test ");    
    11.       printf( "Filesize   of   MYFILE.TXT   is   %ld   bytes\n ",   filesize(fptr));    
    12.       fclose(fptr);    
    13.       return   0;    
    14. }    
    15.   
    16. long   filesize(FILE   *fptr)    
    17. {    
    18.       long   curpos,   length;    
    19.   
    20.       curpos   =   ftell(fptr);    
    21.       fseek(fptr,   0L,   SEEK_END);    
    22.       length   =   ftell(fptr);    
    23.       fseek(fptr,   curpos,   SEEK_SET);    
    24.       return   length;    
    25. }     

     

    C代码  收藏代码
    1. #include "stdio.h"  
    2.   
    3. int main()  
    4. {  
    5.  FILE *pf=NULL;   //文件指针  
    6.   
    7.  int filelen=0;  
    8.  int i=0;  
    9.  char *buf;  
    10.  pf=fopen("D:\\test.txt","r");   //以只读方式打开文件  
    11.  if(pf==NULL)  
    12.  {  
    13.   return 0;  
    14.  }  
    15.  else  
    16.  {  
    17.   //获得文件长度  
    18.   
    19.   fseek(pf,0,SEEK_END);   //文件指针移到末尾  
    20.   filelen=ftell(pf);   //获得文件当前指针位置,即为文件长度  
    21.   rewind(pf);   //将文件指针移到开头,准备读取  
    22.   
    23.   buf=malloc(filelen+1);    //新建缓冲区,存储独处的数据  
    24.   //将缓冲区的数据设置为0  
    25.   for(i=0;i<filelen+1;i++)  
    26.    buf[i]=0;  
    27.   
    28.   //读取文件  
    29.   fread(buf,filelen,1,pf);  
    30.   //关闭文件  
    31.   fclose(pf);  
    32.   //buf中即为要读出的数据  
    33.   
    34.   printf("%s\n",buf);    //输出一下数据,你可以随便怎么用  
    35.   free(buf);    //最后记得要释放  
    36.  }  
    37.  return 1;  
    38. }  

     
    #include "stdafx.h"
    #include <windows.h>


    //文件操作--读文件
    int _tmain(int argc, _TCHAR* argv[])
    {
    FILE* pFile;
    char *pbuffer = NULL; //缓存读取内容
    //int string_size = 1024, read_size;
    int iFileLen = 0;
    int i = 0;

    pFile = fopen("G:\\文件操作\\FileOpreate\\Debug\\Read.txt", "rb"); //以只读和二进制方式打开
    if (NULL == pFile){
    printf("打开文件失败,请退出!\n");
    //Sleep(1000);
    exit(0);
    }
    else
    {

    /*
    *(1).读写文件中字符的函数(一次只读写文件中的一个字符):
    *int fgetc(FILE *stream);
    *int getchar(void);
    *int fputc(int ch,FILE *stream);
    *int putchar(int ch);
    *int getc(FILE *stream);
    *int putc(int ch,FILE *stream);
    */
    //每次读取一个字符
    /*int ch = 0;
    while( (ch = fgetc(pFile)) != EOF)
    fputc(ch, stdout);
    fclose(pFile);*/
       



    /*
    (2).读写文件中字符串的函数
    char *fgets(char *string,int n,FILE *stream);
    char *gets(char *s);
    int fprintf(FILE *stream,char *format,variable-list);
    int fputs(char *string,FILE *stream);
    int fscanf(FILE *stream,char *format,variable-list);
    */


    每次读取一行
    //char str[128];
    //while (!feof(pFile)) {//如果没有到文件尾
    // if (fgets(str, 128, pFile) != NULL) //如果没有出差
    // printf("%s", str);
    //}
    //fclose(pFile);
    /
    //(3)读取整个文件--文件随机读取
    //获取文件长度
    fseek(pFile, 0, SEEK_END);   //文件指针移到文件末尾 
    iFileLen = ftell(pFile);     //获得文件当前指针位置,即为文件长度 
    rewind(pFile);   //将文件指针移到开头,准备读取文件  


    pbuffer = (char*)malloc(iFileLen + 1);    //新建缓冲区,存储的数据
    memset(pbuffer, 0, sizeof(char) * iFileLen + 1);//将缓冲区初始化为0


    //读取文件
    int n = fread(pbuffer, sizeof(char), sizeof(char) * iFileLen, pFile);


    //关闭文件
    fclose(pFile);


    printf("%s\n", pbuffer); //输出数据


    free(pbuffer);  //释放缓冲区
    }
    return 0;
    }






    文件操作--写文件
    //int _tmain(int argc, _TCHAR* argv[])
    //{
    // //char *s = "That's good news";
    // //int i = 617;
    // //FILE *fp;
    // //fp = fopen("test.dat", "w"); /*建立一个文字文件只写*/
    // //fputs("Your score of TOEFL is", fp); /*向所建文件写入一串字符*/
    // //fputc(':', fp); /*向所建文件写冒号:*/
    // //fprintf(fp, "%d/n", i); /*向所建文件写一整型数*/
    // //fprintf(fp, "%s", s); /*向所建文件写一字符串*/
    // //fclose(fp);
    //
    // char s[24], m[20];
    // int i;
    // FILE *fp;
    // fp = fopen("test.dat", "r"); /*打开文字文件只读*/
    // fgets(s, 24, fp); /*从文件中读取23个字符*/
    // printf("%s", s);
    // fscanf(fp, "%d", &i); /*读取整型数*/
    // printf("%d", i);
    // putchar(fgetc(fp)); /*读取一个字符同时输出*/
    // fgets(m, 17, fp); /*读取16个字符*/
    // puts(m); /*输出所读字符串*/
    // fclose(fp);
    // return 0;
    //}
    展开全文
  • 一个简单的C语言读取文本文件操作,原数据是3*5的一个矩阵。如下图: 读取后保存在一个二维数组中。 #include <stdio.h> int main() { int a[3][5]; FILE* fpread; fpread = fopen("data.txt", "r"); ...

    一个简单的C语言读取文本文件操作,原数据是3*5的一个矩阵。如下图:

    读取后保存在一个二维数组中。

    #include <stdio.h>
    int main()
    {
    	int a[3][5];
    	FILE* fpread;
    	fpread = fopen("data.txt", "r");
    	if (fpread == NULL)
    	{
    		printf("file is error.");
    		return -1;
    	}
    	for (int i = 0; i < 3; i++)
    	{
    		for (int j = 0; j < 5; j++)
    		{
    			fscanf(fpread, "%d", &a[i][j]);
    		}
    	}
    	fclose(fpread);
    	for (int i = 0; i < 3; i++)
    	{
    		for (int j = 0; j < 5; j++)
    		{
    			printf("%d\t",a[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }

    程序编译运行后的结果如下:

    前提是在工作路径下。

    展开全文
  • } 文本文件中的内容如下: a b c 程序的读取结果如下,最后一行出现重复读取问题: a b c c 0x01 问题解决办法 需要遵循先读取再判断文件是否结束的原则。 在C语言中,feof()函数的使用是根据指针内容判断的,而非...

    0x00 问题

    C代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main(void)
    {
            FILE *fp = NULL;
            fp = fopen("test.txt","r");
            if(fp==NULL)
            {
                    printf("文件不存在\n");
                    exit;
            }
            char str[30]={'\0'};
        
            while(!feof(fp))
            {
                    fscanf(fp,"%s",str);
                    printf("%s\n",str);
            }
            fclose(fp);
    }
    

    文本文件中的内容如下:

    a
    b
    c
    

    程序的读取结果如下,最后一行出现重复读取问题:

    a
    b
    c
    c
    

    0x01 问题解决办法

    需要遵循先读取再判断文件是否结束的原则。
    在C语言中,feof()函数的使用是根据指针内容判断的,而非指针位置,无论指针是否到头,甚至超出了,它都需要先读取指针的内容,看一看内容是否是EOF,然后才知道文件是否到头。上述代码中第四次循环遇到EOF时不能读入有效字符,就会重复输出最后一个字符。
    故将代码修改为如下形式:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main(void)
    {
    	FILE *fp = NULL;
    	fp = fopen("test.txt","r");
    	if(fp==NULL)
    	{
    		printf("文件不存在\n");
    		exit;
    	}
    	char str[30]={'\0'};
    	
    	fscanf(fp,"%s",str);
    	while(!feof(fp))
    	{
    		printf("%s\n",str);
    		fscanf(fp,"%s",str);
    	}
    	fclose(fp);
    }
    
    展开全文
  • 有一个文本,里面全是一条一条的oracle sql 插入语句,类似于这种: Insert into EXPORT_TABLE (MSG_SEQ,MSG_ID,GATEWAY_TIME,PRIORITY,RCV_ADDRESS,SND_ADDRESS,BEP_TIME,SMI,AIRCRAFT_ID,FLIGHT_ID,DSP,RGS,RGS_...
  • 假如文本文件有下列两行,用C语言读出来并相加计算和。 044h, 023h, 04Dh, 06Fh, 06Eh, 069h, 074h, 06Fh, 05Ah, 011h, 000h, 00Ah, 030h, 040h, 050h, 090h, h代表这个数据是16进制的。 结果显示sum = ...
  • 最近用fgets函数读取文本文件时,出现一个奇怪的现象;当我读取文本第一行的内容,用字符串格式打印出来正确,单个字符打印却没有达到自己想要看到的结果;但是读取第二行文本内容却又正常,刚开始以为是文件指针的...
  • C语言读取文本文件

    2009-11-01 23:21:00
    int main(int argc, char* argv[]){ printf("Hello World!/n"); char buf[1024] = ""; FILE * fp = fopen( "a.txt", "r" ); if ( !fp ) return 1; if ( !fgets( buf, sizeof( buf ), fp 
  • 为什么视屏上没有转化? fscanf(fp,"%d",&变量);,这个变量不需要atoi么?
  • c语言读取文本文件

    千次阅读 2005-04-27 21:35:00
    #include "stdlib.h"#include "stdio.h"#include "dos.h"main(){FILE *fp;char filename[20],ch[20];int i;clrscr();printf("Please input a filename /n");scanf("%s",filename);fp=fopen(filename,"r");...
  • C语言读取文本内容 按行读取txt

    千次阅读 2019-08-17 08:29:06
    /*逐行读取txt文件的内容*/ // VC++6.0 #include <stdio.h> #include <string.h> int main() { char szTest[1000] = {0}; int len = 0; FILE *fp = fopen("1.txt", "r"); if(NULL == fp) ...
  • C语言按行读取文本文件

    千次阅读 2020-09-09 22:14:17
    C语言按行读取文本文件 一般来说,计算机文件可以分为两类:文本文件和二进制文件。 文本文件是一种由若干行字符构成的计算机文件。文本文件存在于计算机文件系统中。通常,通过在文本文件最后一行后放置文件结束...
  • C语言读取txt文件实例

    万次阅读 多人点赞 2018-06-07 16:07:49
    本文主要总结用C语言来读txt文本的内容,具体的步骤如下所述。1.1建一个.c源文件,赋值如下代码。#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#define MAX...
  • C语言读取文本信息中的fgetc()和fseek()函数 今天在写C语言课设读入文件时遇到的一个文件开头字符无法读入问题 txt中的数据内容为 Ben 3118007419 外国语学院 电子信息工程专业 123456 100.000000 0 0 // A ...
  • C语言 读取文件

    2017-11-28 23:07:48
    该代码采用C语言编程,通过文件路径读取文本文件,并保存在数组中。
  • C语言读取文件

    2016-06-14 22:41:05
    c语言文件操作,详细的给出了如何读取文本文件数据,以及存储数据到另外的文件中
  • C语言读取excel文件

    千次阅读 2020-04-22 14:36:21
    将Excel文件另存为*.csv文件(是和txt一样,以二进制文本形式存储,它是以都逗号分隔符做个单元格内容的划分),这里要特别注意在另存为时,会有两个关于csv的选项,如果需要在C语言中,读取中文,需要选择 CSV(逗号...
  • 用fsanf对文件内容读取到结构体中,需要对一整行的元素进行读取,否则原本应该读下一行数据的结构体就从上一行未读完的数据开始读取,导致后面的读取错位。 ...
  • Mac无法使用C++/C语言文本文件进行读取和编辑的问题 在Mac系统中,我们使用C++/C语言对文件进行读写操作的时候,会遇到无法读取文件或者无法修改文件,这个时候,我们可以将引号中,需要操作的文件名,修改成绝对...
  • 哪位大神指点一下[face]monkey:2.gif[/face][img=https://img-bbs.csdn.net/upload/202105/23/1621777984_221837.jpg][/img]
  • 打开文件的函数原型 FILE *fopen( const char * filename, const char * mode ); 读、写文件的几种模式 模式 描述 ... 文件的类型为文本文件。 + 具有文件的读写权限。 r:以只读的方式打.
  • !(图片说明](https://img-ask.csdn.net/upload/201907/16/1563261125_779598.png) 如图片所示,一组数据包含多行,如何使用c语言读取文件并将每组数据保存到字符串数组中?(总共181组数据)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 811
精华内容 324
关键字:

c语言读取文本文件

c语言 订阅