精华内容
下载资源
问答
  • C语言读取txt文件实例

    万次阅读 多人点赞 2018-06-07 16:07:49
    本文主要总结用C语言来读txt文本的内容,具体的步骤如下所述。1.1建一个.c源文件,赋值如下代码。#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX...

    本文主要总结用C语言来读txt文本的内容,具体的步骤如下所述。

    1.1建一个.c源文件,复制如下代码。

    #define _CRT_SECURE_NO_WARNINGS // 新版本提示要用安全函数,此处添加宏_CRT_SECURE_NO_WARNINGS 屏蔽告警
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_LINE 1024
    
    int main()
    {
    	char buf[MAX_LINE];  /*缓冲区*/
    	FILE* fp;            /*文件指针*/
    	int len;             /*行字符个数*/
    	if ((fp = fopen("test.txt", "r")) == NULL)
    	{
    		perror("fail to read");
    		exit(1);
    	}
    	while (fgets(buf, MAX_LINE, fp) != NULL)
    	{
    		len = strlen(buf);
    		buf[len - 1] = '\0';  /*去掉换行符*/
    		printf("%s %d \n", buf, len - 1);
    	}
    	return 0;
    }

    1.2在.c源文件同目录下,新建一个名为test.txt的文本文件,在其中随意写入内容,比如我写入的内容为:

    I an a string! 1234567

     

    1.3在cygwin下,敲入如下指令进行编译,生成.exe可执行程序,如下图所示:

    gcc write_txt.c -o write_txt.exe

     

     

    1.4继续在cygwin下,敲入如下指令,执行.exe可执行程序,结果如下图所示:

    ./write_txt

     

    由上面结果可知,该程序正确读出了test.txt文本文件的内容!

    参考内容:

    https://blog.csdn.net/baidu_29950065/article/details/51659913?yyue=a21bo.50862.201879(重点参考)

    https://blog.csdn.net/u010925447/article/details/75046810

    展开全文
  • 读取txt文件,统计“java”字符串出现的次数
  • 本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题。 但是,请一定注意linux和Windows文件格式的区别,比如: ... 当Windows上的代码读取linux格式文件时读取的结果会显示只有一行, 想想为什么。

           本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题。 

           但是,请一定注意linux和Windows文件格式的区别,比如:

           1. 当linux上的代码读取Windows文件格式时, 读取结果的每行都会多一个\r,  想想为什么。

           2. 当Windows上的代码读取linux格式文件时, 读取的结果会显示只有一行, 想想为什么。

           先用C语言写一个丑陋的程序:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    	FILE *fp;
    	if(NULL == (fp = fopen("1.txt", "r")))
    	{
    		printf("error\n");
    	    exit(1);
    	}
    
    	char ch;
    	while(EOF != (ch=fgetc(fp)))
    	{
    		printf("%c", ch);
    	}
    
    	fclose(fp);
    
    	return 0;
    }

         你只能看到结果,却没法利用每一行。 我们来改为:

    // 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)
    	{
    		printf("failed to open dos.txt\n");
    		return 1;
    	}
    
    	while(!feof(fp))
    	{
    		memset(szTest, 0, sizeof(szTest));
    		fgets(szTest, sizeof(szTest) - 1, fp); // 包含了换行符
    		printf("%s", szTest);
    	}
    
    	fclose(fp);
    
    	printf("\n");
    
    	return 0;
    }

          这样, 我们就是整行读取了。
     

          感觉C的读取方法有点丑陋,还是看看C++吧(只要文件格式Windows/linux和编译平台Windows/linux对应一致, 就放心用吧):

    #include <fstream>
    #include <string>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	ifstream in("1.txt");
    	string filename;
    	string line;
    
    	if(in) // 有该文件
    	{
    		while (getline (in, line)) // line中不包括每行的换行符
    		{ 
    			cout << line << endl;
    		}
    	}
    	else // 没有该文件
    	{
    		cout <<"no such file" << endl;
    	}
    
    	return 0;
    }

        当然,你可以对上述程序进行修改,让1.txt中的每一行输入到2.txt中,如下:

    #include <fstream>
    #include <string>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	ifstream in("1.txt");
    	ofstream out("2.txt");
    	string filename;
    	string line;
    
    	if(in) // 有该文件
    	{
    		while (getline (in, line)) // line中不包括每行的换行符
    		{ 
    			cout << line << endl;
    			out << line << endl; // 输入到2.txt中
    		}
    	}
    	else // 没有该文件
    	{
    		cout <<"no such file" << endl;
    	}
    
    	return 0;
    }

          结果, 2.txt和1.txt中的内容完全一致,你可以用Beyond Compare比较一下,我比较过了。

         看来上述程序还能实现文件的复制呢,如下:

    #include <fstream>
    #include <string>
    #include <iostream>
    using namespace std;
    
    void fileCopy(char *file1, char *file2)
    {
    	// 最好对file1和file2进行判断
    	
    	ifstream in(file1);
    	ofstream out(file2);
    	string filename;
    	string line;
    
    	while (getline (in, line))
    	{ 
    		out << line << endl;
    	}
    }
    
    int main()
    {
    	fileCopy("1.txt", "2.txt");
    	return 0;
    }

        当然了,上述程序只能针对文本文件(不仅仅是.txt),对其它类型的文件,不适合。

    展开全文
  • 在调试程序,有时候会有许多的输入,如果每次Debug都自己输入测试...所以将输入重定向到指定文件,从文件读取输入就方便多了。 在C++中,可以调用freopen这个函数来实现此功能,此函数包含在头文件中,也方便调用。

    在调试程序时,有时候会有许多的输入,如果每次Debug都自己输入测试样例的话会非常麻烦。

    所以将输入重定向到指定文件,从文件读取输入就方便多了。

    在C++中,可以调用freopen这个函数来实现此功能,此函数包含在头文件<iostream>中,也方便调用。

    freopen的声明为:

    将现有文件流stream重新分配到不有filename确定的,以模式mode使用的文件。

    FILE * freopen ( const char * filename, const char * mode, FILE * stream );

    filename: 文件路径

    mode:读取模式-- 只读:r, 只写:w

    stream:将这个流重定向。

    简单举例:freopen("Input.txt", "r", stdin);  将标准输入stdin重新分配到文件 Input.txt,模式为只读。

    更多细节请参考:http://www.cplusplus.com/reference/cstdio/freopen/?kw=freopen


     

    函数介绍到此,在Xcode中使用时,我碰到了一个问题,无法读取文件!!!

    尝试1:在工程文件所在位置创建文件InputFromFile.txt 

    函数调用

    freopen("InputFromFile.txt", "r", stdin);

    结果无法成功读取到文件内容。初步判定是文件路径不对。


    尝试2:将文件路径改为绝对路径

    freopen("Users/name/Code/Cpp/cppTest/cppTest/InputFromFile.txt", "r"stdin);

    仍然无法成功读取到文件内容。


    尝试3:将文件放到与cppTest执行文件同一目录下。

    看到上图中 Products/cppTest 这个执行文件了没?右键它


    Show in Finder


    这时你发现可执行文件和源代码并不在同一个文件夹,我们将输入文件拷贝至这个文件夹下。

    函数调用为:

    freopen("InputFromFile.txt", "r"stdin);


    这时就可以成功的读取文件啦。


    如果在Xcode下还有更方便的方法,麻烦您留言评论,十分感谢


    事例程序:

    首先读入二维数组的行数m,列数n。然后依次输入每一个数。

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main(){
        int m, n;
        
        freopen("InputFromFile.txt", "r", stdin);
        
        cin >> m >> n;  
        cout << "m = " << m << " n = " << n << endl;
        
        vector<vector<int> > vec;
        for(int i = 0; i < m; ++i){
            vector<int> tmpvec;
            for(int j = 0; j < n; ++j){
                int tmp;
                cin >> tmp;
                tmpvec.push_back(tmp);
                cout << tmp << " " ;
            }
            vec.push_back(tmpvec);
            cout << endl;
        }
        
        for(int i = 0; i < m; ++i){
            for(int j = 0; j < n; ++j){
                cout << vec[i][j] << " ";
            }
            cout << endl;
        }    
        return 0;
    }


    InputFromFile.txt

    2 3
    1 2 3
    6 4 5


    output:

    m = 2 n = 3
    1 2 3 
    6 4 5 
    1 2 3 
    6 4 5 
    Program ended with exit code: 0


    展开全文
  • C++中txt文件读取失败

    2018-12-26 15:07:38
    编译无错误,但运行,文件根本打不开,TXT文件,源代码是在同一文件里面,
  • 来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数: s: 字符型... n: 从流中读入n-1个字符 stream : 指向读取的流。 返回值: 1. 当n&lt;=0 返回NULL,即空指针。 ...

    来说一说fgets(..)函数。

        原型  char *  fgets(char * s, int n,FILE *stream);

        参数:

             s: 字符型指针,指向存储读入数据的缓冲区的地址。

             n: 从流中读入n-1个字符

             stream : 指向读取的流。

       返回值:

              1. 当n<=0 时返回NULL,即空指针。

              2. 当n=1 时,返回空串"".

              3. 如果读入成功,则返回缓冲区的地址。

              4. 如果读入错误或遇到文件结尾(EOF),则返回NULL.

              看看这个函数的官方说明:

                           /*** 
                        *char *fgets(string, count, stream) - input string from a stream 
                        * 
                        *Purpose:  
                        * get a string, up to count-1 chars or '\n', whichever comes first, 
                        * append '\0' and put the whole thing into string. the '\n' IS included 
                        * in the string. if count<=1 no input is requested. if EOF is found 
                        * immediately, return NULL. if EOF found after chars read, let EOF 
                        * finish the string as '\n' would. 
                        * 
                        *Entry: 
                        * char *string - pointer to place to store string 
                        * int count - max characters to place at string (include \0) 
                        * FILE *stream - stream to read from 
                        * 
                        *Exit: 
                        * returns string with text read from file in it. 
                        * if count <= 0 return NULL 
                        * if count == 1 put null string in string 
                        * returns NULL if error or end-of-file found immediately 
                        * 
                        *Exceptions: 
                        * 
                        *******************************************************************************/ 

                标准库中fgets(...)的实现:

                

    [cpp]  view plain  copy
    1. /****************************************************  
    2.  char *fgets(char *s, int n,  FILE *stream)  
    3.    {  
    4.      register int c;  
    5.      register char *cs;  
    6.      cs=s;  
    7.      while(--n>0 &&(c = getc(stream))!=EOF)  
    8.      if ((*cs++=  c) =='\n')  
    9.            break;  
    10.      *cs ='\0';  
    11.      return (c == EOF && cs == s) ?NULL :s ;  
    12.     }  
    13.   
    14. /********************************************************  



           在用fgets(..)读入数据时,先定义一个字符数组或字符指针,如果定义了字符指针 ,那么一定要初始化。

            example:

                  char s[100]; //可以。

                  char *s;  //不可以,因为只是声明了一个指针。但并没有为它分配内存缓冲区。

            所以,如果要用指针,则  char *s=(char *)malloc(100*sizeof(char)); 为其分配内存空间,c++中用char *s=new char [100];      如果为分配内存空间,编译时不会检查出问题,但运行时会出现未知错误。。

            fgets(...)读入文本行时的两种情况。

              1.如果n大于一行的字符串长度,那么当读到字符串末尾的换行符时,fgets(..)会返回。并且在s的最后插入字符串结束标志'\0'。 而s缓冲区剩余的位置不会再填充。

               example:

                  123abc

                  fgets(s,10,fp);

                  此时,读入七个字符,123abc\n,实际上还有最后的'\0',所以,strlen(s)=7; 如果要去除末尾的\n,s[strlen(s)-1]='\0';便可。

              2.如果n小于等于一行的字符串的长度,那么读入n-1个字符,此时并没有读入\n因为并没有到行尾 ,同样在最后会插入'\0'.

              example:

                123abc

                char  s[5];

                fgets(s,5,fp);

                这时读入4个字符,123a,并没有换行符,所以strlen(s)=4.

           fgets(...)读入整个文件内容

              通常用while()循环来使fges()读入文本全部内容,并按行读入。

              

    [cpp]  view plain  copy
    1. char s[1024];  
    2.            while((fgets(s,1024,fp))!=NULL)  
    3.             {  
    4.                   printf(s);  
    5.             }  

             当然如果n小于每行的字符个数,也可以读,只不过读的次数要多。

              假设一行为 : 123456789

              

    [cpp]  view plain  copy
    1. char s[2];  
    2.           int  num=0;  
    3.           while((fgets(s,2,fp))!=NULL)  
    4.             {  
    5.                  printf(s);  
    6.                  n++;  
    7.             }  

              每次读入一个字符, 最后也会读完一行,num=10,读了十次,所以,fgets若没遇到换行符,会接着从前一次的位置继续读入n-1个字符,只要是文本流没关闭。

             读入空行的情况:

                第一行   abcdef123

                第二行                       

                第三行  helloworld

                其中第二行为空,fget(..)会把第二行也读入,因为并未到文件结尾。

                有时我们并不需要空行,可以这样做。

              

    [cpp]  view plain  copy
    1. while((fgets(s,n,fp))!=NULL)  
    2.              {  
    3.                   if(strlen(s)!=1)    //注意这儿是1不是0,因为尽管是空行,它也会读入换行符,strlen(s)=1;  
    4.                       printf(s);  
    5.              }  

             fgets(...)从标准设备读数据。

                用fgets(...)还也读入标准输入设备(一般为键盘)的信息

                原型  :  fgets(s,n,stdin);

                假设在控制台下,我们可以用fgets(...)替代gets(),读入键盘输入的信息,fgets()是安全的,因为不会像gets()有溢出的可能。。

                比如 :输入 abc

                fgets(s,n,stdin)也会读入n-1个字符。但是只是从stdin流读入。。。


    写入:

    CHAR log[64];
    CHAR compile_time[verstr_max_len];
    CHAR app_name[verstr_max_len];
    CHAR ver[verstr_max_len];
        FILE    *fp;

        if ( (fp=fopen(TASKD_VRE_FILE, "w")) == 0 )
        {
    sprintf(log, "向taskdver.txt文件写入版本信息失败");
    MyWriteLog(log,TRUE);
            return -1;
        }
    else
    {
    taskdGetVersionInfo(verstr_max_len,app_name,ver,compile_time);
    fputs(app_name,fp);
    fputc('\n',fp);

    fputs(ver,fp);
    fputc('\n',fp);

    fputs(compile_time,fp);
    fputc('\n',fp);

    fclose(fp);/*关闭文件*/
    return 0;

    }


    读取;

    FILE *fp;
    if ( (fp=fopen(verfile, "r")) == 0 )
    {
    return -1;
    }
    else
    {
    fgets(app_name,str_max_len,fp);
    if(app_name[strlen(app_name)-1] == '\n')
    {
    app_name[strlen(app_name)-1] = '\0';  /*去掉换行符*/
    }

    fgets(version,str_max_len,fp);
    if(version[strlen(version)-1] == '\n')
    {
    version[strlen(version)-1] = '\0';  /*去掉换行符*/
    }

    fgets(compile_time,str_max_len,fp);
    if(compile_time[strlen(compile_time)-1] == '\n')
    {
    compile_time[strlen(compile_time)-1] = '\0';  /*去掉换行符*/
    }

    fclose(fp);
    return 0;

    展开全文
  • C语言读写txt文件编译时出现乱码

    千次阅读 2021-01-24 21:51:31
    文本文件默认的编码形式是utf-8 马赛克部分是中文 将编码形式改成ascii就好了。文件 -> 另存为->
  • 但是使用javac 编译, 可以正常打印txt文件中的内容 public static String txtFile(File file) { StringBuilder result = new StringBuilder(); try { BufferedReader br = new BufferedReader(new ...
  • 1.java直接读取客户端txt文件 关于java的文件读取,网上也有许多资料,但是直接读取客户端文件的案例很少,大多是把文件上传到服务器上,再进行读取读取后再删除。这种方法以前也试过,但是现在遇 到这种...
  • 3. 由TXT文本中读入一系列的数据,建立一棵平衡二叉树,并实现查找任何数据的功能,并能打印出结点的访问路径。 (Makefile编译
  • R读取txt文件的问题

    千次阅读 2014-07-20 11:11:04
    参照http://pages.stat.wisc.edu/~larget/stat302/chap2... RStudio运行会出现如下错误, ...heart = read.table("F:/XXXXt/heart-rate.txt",header = TRUE) ...原因是缺少文件后缀,不知原文作者为毛能编译通过。
  • 实验内容:(1)从txt文件中读入字符。 (2)统计行数和列数用于定位。 (3)删除空格类字符,包括回车、制表符空格。 (4)按拼写单词,并用(内码,属性)二元式表示。 (属性值——token 的机内表示) (5)如果...
  • 简单使用命令行运行C程序,读取外部txt文件,并输出结果到txt文件 示例代码 #include <stdio.h> int main(int argc, char const *argv[]) { int x; scanf("%d", &x); printf("The number is: %d!\n",...
  • 使用pandas读取txt文件,如果是有列名的,第一列每次都会有个不明符号,如下图: 困扰了很久不知道原因,今天终于知道原因(看了廖雪峰网站的git教程): “千万不要使用Windows自带的记事本编辑任何文本文件。...
  • 我的Android笔记(七)—— 读取txt文件内容

    万次阅读 多人点赞 2012-03-17 23:07:06
    众所周知,Android的res文件夹是用来存储资源...比如我们可以将更新信息、版权信息等放到txt文件中,然后放到raw文件中,然后很方便地进行访问。 在raw中放入一个a.txt文件,然后就可以在Activity中使用getResourc
  • NSBundle读取图片 plist文件和txt文件

    千次阅读 2012-06-28 11:52:04
    本文想简单介绍一下NSBundle读取图片到视图上,读取plist文件,读取txt文件显示在lable上; 关于bundle作用在网上参考了两个博客,介绍如下: bundle是一个目录,其中包含了程序会使用到的资源. 这些...
  • //文件读取 def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName(“File”).setMaster(“spark://IP地址:7077”) val sc = new SparkContext(conf); // 读取hdfs数据 val t...
  • 本文实例讲述了Android编程实现读取工程中的txt文件功能。分享给大家供大家参考,具体如下: 1. 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹,放置在raw文件夹下的内容会被...
  • 利用fread读取二进制文件,读出来的结果全部为零,编译运行都没有报错,代码如下, 有人说是大小端的问题,怎么理解啊?判断出来的本机器的为little endian,怎么判断需不需要转换啊?要是需要转换,怎么转换啊?在...
  • 安卓之读取raw文件夹下得txt文件

    千次阅读 2017-08-22 23:22:49
    Demo:读取res/raw下存放的一个text文件
  • Java 读取文件

    千次阅读 2018-12-03 14:19:46
    JAVA有多种读取文件的方式,其中比较深层次的原理在我的另外一篇文章分析过:JDK核心JAVA源码解析(5...直接从项目的classpath(maven的话src/main/resource编译之后也会存在于classpath下)读取: InputStream inputS...
  • 从文本文件读取数据并自动建立单链表 另一个完整的程序 http://download.csdn.net/source/3198575 VC++6.0环境下编译通过
  • 1、从文本文件中导入班级学生信息:学号、姓名、性别、籍贯 2、将学号重复的删除 3、显示导入的学生信息(文件加后缀) 4、按学号、姓名、性别、籍贯相等和不相等查找 5、多次查找 ...7、VC++6.0编译通过
  • 编译原理 |——file.cpp |——filein.txt |——fileout.txt */ //open source file ifstream fin; fin.open(./filein.txt); if(!fin.is_open()){ cerr<<Open File Faile
  • VC.NET 文件操作源码实例,读取和保存TXT文本文件,可浏览打开TXT文本文件,保存独立的TXT存储文件读取独立的TXT存储文件,文件夹内Form1.h是主文件,程序的核心功能在此文件中完成。本实例的编译环境为VC .NET...
  • Python读取csv/txt文件并图像化

    千次阅读 2019-04-10 17:58:43
    目的 在开发过程前期,我们往往需要对数据进行分析,如果使用编译性语言的话,往往会降低项目的开发进度...然后使用Open函数来打开文件读取数据: with open('data1.csv','rb') as csvfile: reader = csv.rea...
  • 最近我读取视频,VideoCapture.isOpened()总是返回false,视频文件路径对的啊,网上百度了好久,也问一些前辈,现在写下我的经历过程吧 我出现这情况的原因是C:\OpenCVSoft\opencv\newbuild\install\x64\vc15\bin ...
  • java从jar包中读取资源文件

    万次阅读 多人点赞 2019-03-25 22:04:31
    一个JAVA项目需要在应用启动时读取一个文件,在这遇到了一个坑,就是在Idea 中,应用启动可以正常读取这个文件,但应用打成jar包后直接运行就读取不到。 要读取文件位于/src/main/resources目录下,其相对路径为...
  • Android的res文件夹是用来存储资源的,...比如我们可以将更新信息、版权信息等放到txt文件中,然后放到raw文件中,然后很方便地进行访问。 在raw中放入一个a.txt文件,然后就可以在Activity中使用getResources().
  • VTK从TXT文件读取数据

    千次阅读 2016-03-08 10:26:03
    TXT文本文件读取数据的方式有很多,以下介绍两种。 1.采用VTK官方提供的类vtkSimplePointsReader可以方便读取,但是该方法要求文本文件必须是规整的,如下示例读取随机点云数据。 #include #include #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,981
精华内容 33,192
关键字:

编译时读取txt文件