精华内容
下载资源
问答
  • C语言读取一行TXT文件 && 修改TXT中的内容

    千次阅读 多人点赞 2020-12-22 17:16:55
    事情是这样的,给出个TXT文本文件,里面存储的有多条数据,将数据插入数据库。 每条数据的格式: `BH001;属性1;属性2;属性3;属性4;属性5;` 但是给出的文档有问题,会有多出换行的数据,无法正确插入 `BH001;属性1;...

    今天在工作中遇到一些问题。
    事情是这样的,给出一个TXT文本文件,里面存储的有多条数据,将数据插入数据库。
    每条数据的格式:
    BH001;属性1;属性2;属性3;属性4;属性5;
    但是给出的文档有问题,会有多出换行的数据,无法正确插入
    BH001;属性1;属性2;
    属性3;属性4;属性5;

    一共几十万条数据,那我就不可能一个个去找,这时我发现每条属性的开头都是B,那么我就可以用C语言读取每一行的数据,判断第一个字符是不是B,如果不是,把这个行数输出出来,然后可以在TXT中编辑->转到输入行数修改即可。

    #include <stdio.h>
    int main() {
    	FILE *fp;
    	fp=fopen("C:\\Users\\Lenovo\\Desktop\\a.txt","r");  
    	int i = 0;
    	char str[1000];
    	while(fgets(str, 500, (FILE*)fp)!=NULL) {
    		i++;
    		if(str[0]!='B') {
    			printf("%d\n", i);
    			i--;
    		}
    	}
    	fclose(fp);
    } 
    

    但是算出来有问题的数据也有几百条,一条条改也是比较费时间的。那我就先把有问题的数据线存储到一个txt中。

    #include <stdio.h>
    int main() {
    	FILE *fp, *fp1;
    	fp=fopen("C:\\Users\\Lenovo\\Desktop\\a.txt","r");  
    	fp1=fopen("C:\\Users\\Lenovo\\Desktop\\index.txt", "w");
    	int i = 0;
    	char str[1000];
    	while(fgets(str, 500, (FILE*)fp)!=NULL) {
    		i++;
    		if(str[0]!='B') {
    			printf("%d\n", i);
    			fprintf(fp1, "%d\n", i-1);
    			i--;
    		}
    	}
    	fclose(fp);
    	fclose(fp1);
    } 
    

    然后我在网上查了一下,修改TXT中的内容的话可以先创建一个TXT,将新改的内容插入这个新的TXT中。
    对于有问题的行数,我可以一次读两行,把前一行的换行去掉,然后插入到新的TXT中,就能解决问题了。

    #include <stdio.h>
    #include <string.h>
    int main() {
    	FILE *fp, *fp1, *fp2;
    	fp=fopen("C:\\Users\\Lenovo\\Desktop\\a.txt", "r");
    	fp1=fopen("C:\\Users\\Lenovo\\Desktop\\index.txt", "r");
    	fp2=fopen("C:\\Users\\Lenovo\\Desktop\\a1.txt", "w");
    	
    	//用来存储出问题的行数 
    	int index[1020];
    	int length=0;
    	//将出问题的行数读取出来 
    	while(fscanf(fp1, "%d", &index[length])!=EOF)
    		length++;
    	//末尾设置为无限大,直到所有的数据都读取完 
    	index[length]=99999999;
    	
    	char str[1020], str1[1020];
    	int i=0, j=0;
    	while(fgets(str, 500, (FILE*)fp)!=NULL) {
    		i++;
    		//比较当前行数和出问题的行数是否相等 
    		while(i==index[j]) {
    			fgets(str1, 500, (FILE*)fp);
    			int len = strlen(str);
    			//将前一行数据的换行去除 
    			str[len-1]='\0';
    			//拼接两个字符串 
    			strcat(str, str1);
    			j++;
    		}
    		fprintf(fp2, "%s", str);
    	}
    	fclose(fp);
    	fclose(fp1);
    	fclose(fp2);
    	return 0;
    } 
    
    展开全文
  • #include <stdio.h> #include <stdlib.h> #include <string.h> #define path "C:/Users/ZS/Desktop/test.ini" ...//实现读取配置文件一行,当行的开头为#时则跳过这行 void re...
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define path "C:/Users/ZS/Desktop/test.ini"
    
    //去除字符串的左右两端的空格
    char *s_trim(char *str);
    
    //实现读取配置文件的一行,当行的开头为#时则跳过这行
    void readline(char *buf, int size, FILE *fp);
    
    /* file 配置文件路径
     * sec 代表的是读取的是哪个配置
     * param 代表的是想要读取到的变量
     * value 将读取到的结果存入value
     * */
    int readini(const char *file, const char *sec, const char *param, char *value);
    
    int main()
    {
        char str[20];
        int ret = readini(path, "server", "maxvalue", str);
        printf("%s", str);
    }
    
    //去除字符串的左右两端的空格
    char *s_trim(char *str)
    {
        char *s = str;
        char *copied, *tail = NULL;
        if(str == NULL || *str == '\0')
            return str;
        if((str[0]  != ' ') && (str[strlen(str)-1] != ' '))
            return str;
        for(copied = str; *str; str++){
            if(*str  != ' ' && *str != '\t' && *str != '\r' &&  *str != '\n'){
                *copied++ =  *str;
                tail = copied;
            }
            else{
                if(tail)
                    *copied++ = *str;
            }
        }
        if(tail)
            *tail = 0;
        else
            *copied = 0;
        return s;
    }
    
    //实现读取配置文件的一行,当行的开头为#时则跳过这行
    void readline(char *buf, int size, FILE *fp)
    {
        char c;
        int i = 0;
        while((c = fgetc(fp)) != EOF && c != '\n' && c != '#') {
            if(i >= size)
                break;
            buf[i++] = c;
        }
        while(c != '\n' && c != EOF)
            c = fgetc(fp);
    }
    
    int readini(const char *file, const char *sec, const char *param, char *value)
    {
        FILE *fp = NULL;
        char buf[1024];
        char *s;
        if((fp = fopen(file, "r")) == NULL)
            return -1;
        while(!feof(fp)){
            memset(buf, 0, sizeof(buf));
            readline(buf, sizeof(buf), fp);
            s_trim(buf);
            if(buf[0] != '[')
                continue;
            for(s = buf+1; *s != ']'; s++);
            *s = '\0';
            s_trim(buf+1);
            if(strcmp(sec, buf+1) != 0)
                continue;
            while(!feof(fp)){
                memset(buf, 0, sizeof(buf));
                readline(buf, sizeof(buf), fp);
                s_trim(buf);
                if(buf[0] == '[')
                   break;
                if(buf[0] == '\0' || buf[0] == '#')
                    continue;
                for(s=buf; *s != '='; s++);
                *s = '\0';
                s_trim(buf);
                if (strcmp(param, buf) == 0) {
                    memcpy(value, s+1, strlen(s+1));
                    value[strlen(s+1)] = '\0';
                    fclose(fp);
                    return 0;
               }
            }
        }
        printf("%s read error!", param);
        fclose(fp);
        return -1;
    }
    

     

    展开全文
  • C语言读取文件内容,按

    千次阅读 2013-06-01 21:27:54
    fgets读取一行文件内容到字符数组 并把文件指针指向下一行 用法如下 #include int main() {  FILE * pFile;  char mystring [100];  pFile = fopen ("myfile.txt" , "r");  if (pFile == NULL) ...

    循环中用fgets函数

    fgets读取一行文件内容到字符数组

    并把文件指针指向下一行

    用法如下

    #include <stdio.h>

    int main()
    {
       FILE * pFile;
       char mystring [100];

       pFile = fopen ("myfile.txt" , "r");
       if (pFile == NULL)

    perror ("Error opening file");
       else {

    while( fgets (mystring , 100 , pFile)!= NULL )

    {
             printf ("%s\n",mystring);
     }

        fclose (pFile);
       }
       return 0;
    }

    展开全文
  • 文章目录【C语言读取指定范围内容之终止和文本文件总行数之间的关系问题、问题描述二、代码三、原文本文件内容四、测试结果 【C语言读取指定范围内容之终止和文本文件总行数之间的关系问题 、问题...

    【C语言】读取指定行范围内容之终止行和文本文件总行数之间的关系问题

    一、问题描述

             在读取指定行范围内容的时候,比如读取一个文本文件的10-20行的内容,原则上就打印:10,11,12,,,20行的内容,But,要是文本文件中的内容只有15行内容该当如何?
             按照博主的想法:终止行>文本文件总行数,那就从输入的起始行开始读取到文本文件总行数就ok。
             注: 这里只讨论以上陈述问题,且不考虑起始行和终止行的关系,起始行和文本文件总行数的关系等等。

    一、流程图

    在这里插入图片描述

    二、代码

    /*
    
    程序功能: 读取指定行范围
    主要目的: 解决终止行和文本文件总行数之间的关系
            
    
    
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX 1024
    int displayLine(FILE *file, int isDisplay);
    
    int main()
    {
        int index = 1;
        int start = 2; // 起始行
        int end = 20;  // 终止行
    
        FILE *file = fopen("./wenben/wenben.txt", "r");
    
        while (1)
        {
            if (index >= start && index <= end)
            {
                int isTextEnd = displayLine(file, 1);
                index++;
                if (isTextEnd)
                {
                    break;
                }
                printf("\n");
            }
            else if (index > end)
            {
                break;
            }
            else
            {
                int isTextEnd = displayLine(file, 0);
                if (isTextEnd)
                {
                    break;
                }
                index++;
            }
        }
        return 0;
    }
    
    
    // 创建子函数
    int displayLine(FILE *file, int isDisplay)
    {
        char read;
        read = fgetc(file); // 按照字符读取
    
        int index = 0;
        char chars[MAX];
        memset(chars, 0, MAX);//  void *memset(void *s,int c,size_t n):将已开辟内存空间 s 的首 n 个字节的值设为值 c。
        while (read != '\n') 
        {
            if (read == EOF) 
            {
                if (isDisplay)
                {
                    for (int i = 0; i < index; i++)
                    {
                        printf("%c", chars[i]);
                    }
                }
                return 1;
            }
            chars[index] = read;
            index++;
            read = fgetc(file);
        }
    
    
        if (isDisplay)
        {
            for (int i = 0; i < index; i++)
            {
                printf("%c", chars[i]);
            }
        }
        return 0;
    }
    
    

    三、原文本文件内容

    在这里插入图片描述

    四、测试结果

             为了测试简单,实现速度快,代码中将写要测试的行范围写死了(起始行:2,终止行:20)。
    在这里插入图片描述

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

    2021-05-25 11:21:54
    C语言一次性读取文件 C - File I/O C library function - fread() ...fgets函数,一次只能读取一行,并且在结尾自动添加\0 fread函数,可以读取很多内容,但是不会添加\0需要手动完成,具体看[参考1] ...
  • 下图右边蓝色部分表示从文件读取出来的一行内容,再过来绿色框的一级指针指向这些内容的地址,每个指针指向一行,然后再使用一个二级指针来指向这个一级指针数组 实现代码 //把文件读到内存 #include&...
  • 当我读取文本第一行内容,用字符串格式打印出来正确,单个字符打印却没有达到自己想要看到的结果;但是读取第二行文本内容却又正常,刚开始以为是文件指针的问题,后面发现不是。 最后猜测可能是编码问题,把文本...
  • 今天小编就为大家分享一篇关于C语言对CSV文件从最后往前一行一行读取的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 用fsanf对文件内容读取到结构体中,需要对一整行的元素进行读取,否则原本应该读下一行数据的结构体就从上一行未读完的数据开始读取,导致后面的读取错位。 ...
  • C语言一次性读取文件全部内容

    万次阅读 2013-04-21 22:08:46
    关键是获取文件大小,知道文件大小就可以用fread次读入内存中。 使用fseek()定位到文件末尾,ftell()计算当前文件位置指针相对于文件首的偏移字节数,也就是...* 读取文件内容 * path:文件路径 * length:文件大小(ou
  • 例:编写个程序,以个字符和任意文件名作为命令行参数。然后输入字符所在的整行内容。(此题目是我为了讲解而自己想的,若有不足之处请多指教) 代码如下: #include <stdio.h> #include <stdlib.h>...
  • c语言读取文件内的数据

    万次阅读 2007-11-03 20:31:00
    如:若data.txt内的内容为11010110(每个数据独占一行,当然数据比这多很多,反正一共38kb)得到的结果应该是2 1 1 1 2 1(每个数据独占一行),然后保存在新的文件中,如result.txt。 网站上有篇文章编写了如下代码...
  • 最近在家又开始看一看C 结果发现文件这块不太熟练 用的时候发现使用文件读取txt里的内容时读不到第一行内容 感到有些疑惑 我用的是devcpp 希望有老哥指点一二 ``` #include #include using namespace std; ...
  • 在学习c语言的时候,我们可能会对fscanf的读取存在疑惑,这也是c语言个bug。在"E:\\temp\\a.txt"的a.txt的内容如下:张三,600李四,500王五,1200程序要解决的问题是:读取姓名后面的数字,并求和;程序...
  • 我在做USACO的训练题 按照要求写了个读文件的程序,但是出了一点我不能理解的bug 希望老师指点指点 ...ride.in 文件内容: ``` COMETQ HVNGAT ``` 编译后的输出却是: ``` HVNGAT H ```
  • 2 编写个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。 函数原型有两个,任意选择其 要求1:请自己任意选择个接口(函数),并实现功能;70分 要求2:编写...
  • C语言文件写入内容读取显示

    千次阅读 2017-01-07 20:24:51
    将学生信息(姓名、年龄、...文件存储条学生信息,姓名、年龄、学号、平均分以tab(\t)为分隔。 代码实现: 复制纯文本复制 #include #include #include #define FILE_PATH "D:/demo.txt" // 文件
  • 输出的文件一行末尾也没有回车,这种情况该如何解决,求大神解惑 代码如下 <p>#include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE 100...
  • 最近初学C语言,使用编译器DEV-C,遇到了一个没有想通...文件中第二行“3”的位置是存量减一的正确输出,但后面却跟上了文件一行内容,并破坏了下面一行的数据。思考很久都没有找出原因,恳请各位伸出援手,感谢!
  • 说明:此方式主要用于读取文件内容连续无换行符文件(如json数据),若有很多换行符想读取每行数据或挑出哪一行数据读取可用别的方法更易读取。demo:#include #include #include #include #include #include...
  • C语言——从文件读取数据

    千次阅读 2020-05-06 23:20:55
    情形一:文件只有一行数据 文件内容 :1 2 3 4 5 方法 一: int main() { FILE*fp=NULL; int buff[255]; int i=0; fp=fopen("D:/Data_Structure/test.txt","r"); while(fscanf(fp,"%d", &buff[i])!=EOF) {...
  • c语言实现读取文本文件中的内容 并返回其中最长的
  • 当前内容主要为向文件中写入文本时间,并按行读取时间数据 主要使用 time.h这个库中的time()和localtime方式获取当前的时间 2.demo #include <stdio.h> #include <time.h> #include <stdlib.h> ...
  • c语言fread()无法读取文件

    千次阅读 2012-11-05 00:31:42
    因为之前有段是先检测这个文件有多少的,然后才要来读取具体的文件内容,为了之后读取文件的时候文件指针还在文件头,所以, 用了这样的代码。。。。 FILE *file; FILE *ctnum; ctnum = file; 没错...
  • C语言实现文件倒序存储

    千次阅读 2014-03-25 15:17:28
    从A文件读取文本存储到B文件里,但是B文件里的文本顺序要和A文件里的顺序相反,比如A文件里的文本是: sun moon 那么B文件里的内容就必须是: moon sun 采用了双向链表实现这功能,C语言的实现代码如下: #...
  • 这个不能直接插入, 因为数据在文件中存储是顺序存储的, 你插入的数据会覆盖掉后面的内容, ...以下代码实现将文件中第6行处插入一行, 即原来的第6行以后依次往后移一行. #include int main(void) { FILE *fp;

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 212
精华内容 84
关键字:

c语言读取一行文件内容

c语言 订阅