C strings from text file

我们两清 提交于 2020-01-16 19:56:07

问题


I am new to C programming language. How do you search a particular string from a text file and make them into array, then produce a single string from those array?

text file:

name1,name2,name3,type1,g1,g2,g3
name1,last1,last2,type2,g4,g6,g7
foo1,foo2,foo3,type3,gx,g3,g5
foo1,doo1,doo2,type4,g1,gt,gl

The output should be in 1 string, not separated so if let's say it is

printf("%s", strings);

It gives output like:

2 records found

Name: name1,name2,name3
type: type1
g1 type: g1
g2 type: g2
g3 type: g3

Name: name1,last1,last2
type: type2
g1 type: g4
g2 type: g6
g3 type: g7

My attempt so far is getting the text file and search the string:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){


    char tmp[1000];
    int count=0;

    FILE *fp=fopen("test.csv","r");

    while(fgets(tmp, sizeof(tmp),fp) != NULL){
            if (strstr(tmp, "name1")){
                    count = count + 1;
                    printf("%s", tmp);
            }
    }

}

which only give output:

name1,name2,name3,type1,g1,g2,g3
name1,last1,last2,type2,g4,g6,g7

Attempt in progress:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){


    char tmp[1000];
    int count=0;
    char *string;
    char *name1, *name2, *name3, *type,*g1,*g2,*g3;

    FILE *fp=fopen("test.csv","r");

            while(fgets(tmp, sizeof(tmp),fp) != NULL){        

                    name1 = strtok(tmp,",");
                    name2 = strtok(NULL,",");
                    name3 = strtok(NULL,",");
                    type= strtok(NULL,",");
                    g1= strtok(NULL,",");
                    g2= strtok(NULL,",");
                    g3= strtok(NULL,",");

                    if (strstr(tmp, "name1")){
                            count = count + 1;
                            string = malloc(sizeof(*string));
                            sprintf(string, "\n%d record(s) found.\n\nName: %s, %s, %s \nType: %s\ng1 type: %s\ng2 type: %s\ng3 type: %s", count, name1, name2,name3,type,g1,g2,g3);
                    }
        }
        printf("%s", string);

}

with output:

2 record(s) found.

Name: name1, last1, last2 
Type: type2
g1 type: g4
g2 type: g6
g3 type: g7

回答1:


First, you need to split the line with strtok. Read the doc here.

Once you get all the fields needed, output them to one single string by using snprintf

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE 1000

int main(){

    char tmp[BUFFER_SIZE];
    int count=0;
    char string[BUFFER_SIZE];
    char all_records[BUFFER_SIZE];
    char *name1, *name2, *name3, *type,*g1,*g2,*g3;

    FILE *fp=fopen("test.csv","r");
    while(fgets(tmp, BUFFER_SIZE,fp) != NULL){        
        name1 = strtok(tmp,",");
        name2 = strtok(NULL,",");
        name3 = strtok(NULL,",");
        type= strtok(NULL,",");
        g1= strtok(NULL,",");
        g2= strtok(NULL,",");
        g3= strtok(NULL,",");

        if (strstr(tmp, "name1")){
            count++;
    // snprintf is very similar to printf, see the reference [here][2]
            snprintf(string, BUFFER_SIZE,"\nName: %s, %s, %s \nType: %s\ng1 type: %s\ng2 type: %s\ng3 type: %s", name1, name2,name3,type,g1,g2,g3);
            strcat(all_records, string);              // combine new correct record
        }
    }
    snprintf(string, BUFFER_SIZE, "%d record(s) found.\n", count);
    strcat(string, all_records);   // add the number of records to the start
    // You can use the return value of snprintf to evaluate the size of all things you will print.
    printf("%s", string);
    return 0;
}


来源:https://stackoverflow.com/questions/13079828/c-strings-from-text-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!