精华内容
下载资源
问答
  • 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:结果
    在这里插入图片描述

    四、说明

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

    展开全文
  • 本程序要自己创建个文本格式的输入文件a1.txt,编译后能将文本文件前255字节以内的字符转换成相应的AscII码值的二进制表示,并存入输出文件a2.txt中。然后再将二进制文件还原并存入a3.txt文件。 具体代码如下: #...
  • C语言实现文本文件的检索及计数

    千次阅读 2019-11-29 09:59:58
    题目要求:要求编程建立一个文本文件,每个单词不包括空格及跨行,单词由字符序列构成且区分大小写,完成以下功能:统计给定单词在文本文件中出现的总次数、检索输出某单词在文本文件中首次出现的行号及位置。...

    文本文件检索及计数2

    题目要求:要求编程建立一个文本文件,每个单词不包括空格及跨行,单词由字符序列构成且区分大小写,完成以下功能:统计给定单词在文本文件中出现的总次数、检索输出某单词在文本文件中首次出现的行号及位置。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void creat(FILE* fp)
    {
        char ch[1000];
        //输入文本内容
        printf("Enter the contents of this file, end with # in the start of a line.\n");
        fgets(ch, 1000, stdin);//从标准输入流中读取一行
        //行首不为#时,将本行内容写入文件
        while(ch[0] != '#')
        {
            fputs(ch, fp);
            fgets(ch, 1000, stdin);
        }
    }
    void find(FILE* fp, char word[])
    {
        int first_row, first_col; //单词第一次出现的位置
        int index = 0, row = 0, col = 0 ,count = 0;//依次为当前单词下标变量,行号,列号,指定单词出现次数
        char ch[1000], this_word[50];//当前行内容,当前单词
        char this_char; //当前字符
        //按行读取
        while(fgets(ch, 1000, fp)!= NULL)
        {
            row ++;
            col = 0;
            //依次将本行字符赋给this_char
            for(int i = 0; i<strlen(ch); i ++)
            {
                this_char=ch[i];
                //当前字符为字母时,将其存入当前单词数组
                if(isalpha(this_char))
                {
                    this_word[index]=this_char;
                    index++;
                }
                else
                {
                    if(index != 0)   //单词结束
                    {
                        col++;
                    }
                    this_word[index] = '\0';  //表示字符串的结束,这样就只显示index前面我们想要的字符,否则将显示全部的this_word[50],但后面的不是我们想要的
                    index = 0; //以备下一个单词的开始
                    //当前单词为要查找单词
                    if(strcmp(this_word , word) == 0)
                    {
                        count++;
                        //次数为1时,记录第一次出现的行号和列号
                        if(count == 1)
                        {
                            first_col = col;
                            first_row = row;
                        }
                   }
                }
            }
        }
        printf("\n\nThe word you enter appears %d time(s) in total.\n",count);
       if(count >= 1)
        {
            printf("\nThis word first appears in line %d, column %d",first_row,first_col);
        }
    }
    int main()
    {
        FILE* fp;
        char word[50];
        fp=fopen("file_plus.txt","w+");
        if(fp == NULL)
        {
            printf("Unable to open this file.");
            exit(0);//正常运行程序并退出程序
        }
        creat(fp);
        //输入要查找的单词
        printf("\nEnter the word you want to find:\n");
        scanf("%s", word);
        //将文件指针重新指向开头
        rewind(fp);
        //查找单词
        find(fp, word);
        fclose(fp);
        return 0;
    }
    
    

    关于程序中使用到的几个函数:
    1.fgets()函数:从指定文件中读取字符串,每次读取一行。
    原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止。此函数会自动在末尾加‘\0’表示字符串结束。
    2.fputs()函数:向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。
    3.isalpha()函数:判断字符是否为字母,若为字母返回非0.

    展开全文
  • 打开文件的函数原型 FILE *fopen( const char * filename, const char * mode ); 读、写文件的几种模式 模式 描述 ... 文件的类型为文本文件。 + 具有文件的读写权限。 r:以只读的方式打.

    打开文件的函数原型

    FILE *fopen( const char * filename, const char * mode );

     读、写文件的几种模式

    模式描述
    r(read)具有文件的读权限。
    w(write)具有文件的写权限。
    a(append)在文件的末端添加数据。
    b(binary)文件的类型为二进制文件。

    t(text)

    文件的类型为文本文件。
    +具有文件的读写权限。
    • r:以只读的方式打开文件,如果文件不存在,则返回NULL。
    • r+:以读写的方式打开文件,如果文件不存在,则返回NULL。
    • a:追加文件并进行写操作,如果文件不存在,就创建文件,否则新增的内容被添加到文件的末端。
    • rt:以读方式打开一个文本文件。
    • wt:以写方式打开打开一个文本文件,如果文件不存在,则新建该文件。
    • rt+:以读写方式打开一个文本文件
    • wt+:以读写方式打开一个文本文件,如果文件不存在,则新建该文件。

    如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

    "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"


    例子:以只读的方式读取文本文件,并且过滤其中没有内容的行。 

    #include <stdio.h>
    #include <string.h>
    
    #define BufferLen 256
    
    // 读写文件
    int main()
    {
    	FILE* fp = NULL;
    
    	// 只允许读文件// 打开文件
    	fopen_s(&fp,"work.txt", "r");
    
    	char buffer[BufferLen];
    
    	// 判断文件是否结束
    	while (!feof(fp))
    	{
    		// 每次读取之前将buffer置为空
    		memset(buffer,'\0', BufferLen * sizeof(char));
    
    		// 读取出来的buffer会默认在最后一位加'\0'
    		fgets(buffer, BufferLen, fp);
    
    		// 所以读取的文件如果其中一行为空,则默认其长度为1
    		// 过滤其中没有内容的行
    		size_t len = strlen(buffer);
    		if (len == 1)continue;
    
    		printf("work contexts: %s", buffer);
    	}
    
    	// 关闭文件
    	fclose(fp);
    	
    	return 0;
    }

     

    展开全文
  • 前面章节中,已经给大家介绍了文件流...在讲解具体读写文件的方法之前,读者首先要搞清楚的是,对文件的读/写操作又可以细分为 2 类,分别是以文本形式读写文件和以二进制形式读写文件。1) 我们知道,文件中存储的...

    前面章节中,已经给大家介绍了文件流对象如何调用 open() 方法打开文件,并且在读写(又称 I/O )文件操作结束后,应调用 close() 方法关闭先前打开的文件。那么,如何实现对文件内容的读写呢?接下来就对此问题做详细的讲解。

    在讲解具体读写文件的方法之前,读者首先要搞清楚的是,对文件的读/写操作又可以细分为 2 类,分别是以文本形式读写文件和以二进制形式读写文件。

    1) 我们知道,文件中存储的数据并没有类型上的分别,统统都是字符。所谓以文本形式读/写文件,就是直白地将文件中存储的字符(或字符串)读取出来,以及将目标字符(或字符串)存储在文件中。

    2) 而以二进制形式读/写文件,操作的对象不再是打开文件就能看到的字符,而是文件底层存储的二进制数据。更详细地讲,当以该形式读取文件时,读取的是该文件底层存储的二进制数据;同样,当将某数据以二进制形式写入到文件中时,写入的也是其对应的二进制数据。

    举个例子,假设我们以文本形式将浮点数 19.625 写入文件,则该文件会直接将 "19.625" 这个字符串存储起来。当我们双击打开此文件,也可以看到 19.625。值得一提的是,由非字符串数据(比如这里的浮点数 19.625)转换为对应字符串(转化为 "19.625")的过程,C++ 标准库已经实现好了,不需要我们操心。

    但如果以二进制形式将浮点数 19.625 写入文件,则该文件存储的不再是 "19.625" 这个字符串,而是 19.625 浮点数对应的二进制数据。以 float 类型的 19.625 来说,文件最终存储的数据如下所示:

    0100 0001 1001 1101 0000 0000 0000 0000

    至于如何得出 float 类型的 19.625 对应的二进制,感兴趣的读者可阅读《小数在内存中是如何存储的》一节。

    显然,如果直接将以上二进制数据转换为 float 类型,仍可以得到浮点数 19.625。但对于文件来说,它只会将存储的二进制数据根据既定的编码格式(如 utf-8、gbk 等)转换为一个个字符。这也就意味着,如果我们直接打开此文件,看到的并不会是 19.625,往往是一堆乱码。

    C++ 标准库中,提供了 2 套读写文件的方法组合,分别是:

    使用 >> 和 << 读写文件:适用于以文本形式读写文件;

    使用 read() 和 write() 成员方法读写文件:适用于以二进制形式读写文件。

    本节先讲解如何用 >> 和 << 实现以文本形式读写文件,至于如何实现以二进制形式读写文件,下一节会做详细介绍。

    C++ >>和<

    通过《C++文件流类》一节的学习我们知道,fstream 或者 ifstream 类负责实现对文件的读取,它们内部都对 >> 输出流运算符做了重载;同样,fstream 和 ofstream 类负责实现对文件的写入,它们的内部也都对 << 输出流运算符做了重载。

    所以,当 fstream 或者 ifstream 类对象打开文件(通常以 ios::in 作为打开模式)之后,就可以直接借助 >> 输入流运算符,读取文件中存储的字符(或字符串);当 fstream 或者 ofstream 类对象打开文件(通常以 ios::out 作为打开模式)后,可以直接借助 << 输出流运算符向文件中写入字符(或字符串)。

    举个例子:

    #include

    #include

    using namespace std;

    int main()

    {

    int x,sum=0;

    ifstream srcFile("in.txt", ios::in); //以文本模式打开in.txt备读

    if (!srcFile) { //打开失败

    cout << "error opening source file." << endl;

    return 0;

    }

    ofstream destFile("out.txt", ios::out); //以文本模式打开out.txt备写

    if (!destFile) {

    srcFile.close(); //程序结束前不能忘记关闭以前打开过的文件

    cout << "error opening destination file." << endl;

    return 0;

    }

    //可以像用cin那样用ifstream对象

    while (srcFile >> x) {

    sum += x;

    //可以像 cout 那样使用 ofstream 对象

    destFile << x << " ";

    }

    cout << "sum:" << sum << endl;

    destFile.close();

    srcFile.close();

    return 0;

    }

    注意,此程序中分别采用 ios::in 和 ios::out 打开文件,即以文本模式而非二进制模式打开文件。感兴趣的读者可在其基础上添加 ios::binary,即以二进制模式打开文件,程序依旧会正常执行。这是因为,以文本模式打开文件和以二进制模式打开文件,并没有很大的区别(后续章节会做详细讲解)。

    执行此程序之前,必须在和该程序源文件同目录中手动创建一个 in.txt 文件,假设其内部存储的字符串为:

    10 20 30 40 50

    建立之后,执行程序,其执行结果为:

    sum:150

    同时在 in.txt 文件同目录下,会生成一个 out.txt 文件,其内部存储的字符和 in.txt 文件完全一样,读者可自行打开文件查看。

    通过分析程序的执行结果不难理解,对于 in.txt 文件中的 "10 20 30 40 50" 字符串,srcFile 对象会依次将 "10"、"20"、"30"、"40"、"50" 读取出来,将它们解析成 int 类型的整数 10、20、30、40、50 并赋值给 x,同时完成和 sum 的加和操作。

    同样,对于每次从 in.txt 文件读取并解析出的整形 x,destFile 对象都会原封不动地将其再解析成对应的字符串(如整数 10 解析成字符串 "10"),然后和 " " 空格符一起写入 out.txt 文件。

    展开全文
  • C语言文本文件实现局部修改

    万次阅读 多人点赞 2018-06-17 13:23:59
    前言:以往进行文件操作时,都是以链表(变量)作为用户所见数据与文件数据之间的桥梁。用户改变数据时,先改变链表(变量)中的数据,然后直接将...下面介绍一下文本文件的局部修改(覆盖写入)。当然,不进行覆盖...
  • C语言——创建文件

    万次阅读 2019-02-23 21:44:29
    创建文件 #include &lt;stdio.h&gt; int main(int argc,char *argv[]){ f(argc != 2){ printf("param error"); return 1; }else{ FILE *fd = fopen(*(argv+1),"w+"); if(fd != ...
  • 使用C语言创建指定大小的txt文件
  • 用二进制方式创建一个文件,然后写UTF-8文件头(必须在后续写之前) char header[3] = {0xef, 0xbb, 0xbf}; // UTF-8 file header FILE * fp = fopen(pszFile, "w+b"); fwrite(line, sizeof(char), 3, fp); /*在...
  • C语言文本文件与二进制文件转换

    千次阅读 2019-07-13 19:19:05
    本程序要自己创建个文本格式的输入文件a1.txt,编译后能将文本文件前255字节以内的字符转换成相应的AscII码值的二进制表示,并存入输出文件a2.txt中。然后再将二进制文件还原并存入a3.txt文件。实现文件之间的转换。...
  • 有一个文本文件CommandList.txt,第一行是说明性文字:本文件最后一次打开和运行日期是20200224。第二行开始每行是一个可执行程序的名称(含路径)。编写一个应用程序能打开该文件,顺序执行其中的每个程序,并将...
  • C语言详解 FILE文件操作

    万次阅读 多人点赞 2018-07-20 09:00:53
    进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。 1.2 缓冲区(Buffer): 指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据...
  • 这篇文章主要介绍了C语言采用文本方式和二进制方式打开文件的区别分析,有助于读者更好的理解文本文件与二进制文件的原理,需要的朋友可以参考下 稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机...
  • 如何用c语言创建一个txt文件(How to create a TXT file using the C language)如何用c语言创建一个txt文件(How to create a TXT file using the C language)Call for help: how to use C language to create a TXT ...
  • C语言创建与读写txt文件

    万次阅读 2018-07-04 21:51:37
    #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; int main() { FILE *fp = fopen("loss.txt", "w"); ... double i..
  • 文本文件转二进制文件 二进制文件转文本文件
  • c语言创建写入和读取TXT文件数据

    万次阅读 多人点赞 2017-07-13 11:06:28
    下面是一个简单文件读取程序,首先是写数据,将数字0~9写入到data.txt文件中,然后再从data.txt中读取数据,将读到的数据存到数组a[10]中,并且打印到控制台上。 下面是程序: [cpp] view plain copy ...
  • 每天创建一个文件,以时间命名文件名,每隔一个小时写入数据,三十天后,每天删除一个文件
  • 利用标准C语言库函数进行文本文件读写

    万次阅读 多人点赞 2017-02-21 15:36:30
    一、文件打开 1、fopen() 二、文件读 fgetc getc getchar fgets gets fscanf 三、文件写 fputc putc putchar fputs puts fprintf
  • ``` #include #include #include void main() { FILE *fp; char ch[50]; char name[10] = "111"; char data[5] = ".txt"; ch[0] = '\0'; data[4] = '\0'; time_t timep;...
  • c语言文件文件打开方式 打开文件 参数1:文件的路经(相对于可执行文件的相对路径或绝对路径 参数2:文件的模式 r 读模式 w 写模式 a 追加模式 + 读写模式 b 二进制模式 文件存在 各种模式都可以用 文件不存在 ...
  • 用m4 macros创建文本文件

    千次阅读 2015-03-20 18:49:22
    用m4 macros创建文本文件 原文链接:http://ldp.linux.no/linuxfocus/ChineseGB/September1999/article111.html by John Perr 关于作者:从1994年便成为了Linux 的使用者.他是 LinuxFocus 的法国成员之一.目录:介绍...
  • C语言获取文本字符串以及字符过滤

    千次阅读 2019-05-29 18:49:25
    今年开始准备考研,...千里之行,始于足下,今天,学习下C语言获取文本字符串以及字符过滤: 代码: int main() { //读取文件 int c; while ((c = getchar()) != EOF) { if (c < '5') putch...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,054
精华内容 25,621
关键字:

c语言创建文本文件

c语言 订阅