C строк из текстового файла

Я новичок в языке программирования C. Как вы можете найти определенную строку из текстового файла и сделать их в массиве, а затем создать одну строку из этого массива?

текстовый файл:

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 

Вывод должен быть в 1 строке, не разделенной, так что, скажем, это

 printf("%s", strings); 

Он дает выходные данные:

 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 

Моя попытка до сих пор заключается в получении текстового файла и поиске строки:

 #include  #include  #include  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); } } } 

которые дают только результат:

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

Попытка:

 #include  #include  #include  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); } 

с выходом:

 2 record(s) found. Name: name1, last1, last2 Type: type2 g1 type: g4 g2 type: g6 g3 type: g7 

Во-первых, вам нужно разделить линию с strtok . Прочтите документ здесь .

После того как вы получите все необходимые поля, выведите их в одну строку, используя snprintf

 #include  #include  #include  #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; }