当我想要对下面的文本进行标记并在结构中保存标记时,我遇到了一些问题。
Wojciech Szczęsny POL G 1.95 84 18-04-90 Warsaw Legia Warszawa
Bacary Sagna FRA D 1.76 72 14-02-83 Sens Auxerre
Per Mertesacker GER D 1.98 90 29-09-84 Hannover Werder Bremen
Bewtween是一个空格和一个标签,我想提供以下内容:
t[1].nev = Wojciech Szczesny
t[1].orsz = POL
t[1].poz = G
t[1].mag = 1.95
t[1].suly = 84
t[1].datum = 18-04-90
t[1].varos = Warsaw
t[1].ecs = Legia Warszawa and etc.
我没有编辑txt文件,因为它包含超过20,000个数据。
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct{
char nev[50];
char orsz[3];
char poz[3];
float mag;
int suly;
char datum[10];
char varos[30];
char ecs[50];
}JATEKOS;
int main(){
FILE*f=fopen("Text.txt","rt");
int i;
JATEKOS*t;
t = (JATEKOS*)malloc(3*sizeof(JATEKOS));
for(i=1;i<=2;++i){
fscanf(f,"%[^\t]",t[i].nev);
fscanf(f,"%[^\t]",t[i].orsz);
fscanf(f,"%[^\n]",t[i].poz);
fscanf(f,"%[^\t]",&t[i].mag);
fscanf(f,"%[^\t]",&t[i].suly);
fscanf(f,"%[^\t]",t[i].datum);
fscanf(f,"%[^\t]",t[i].varos);
fscanf(f,"%[^\n]",t[i].ecs);
}
printf("\n\n");
for(int i=1;i<=2;++i){
//printf("%s %s %s %f %i %s %s %s",t[i].nev,t[i].orsz,t[i].poz,t[i].mag,t[i].suly,t[i].datum,t[i].varos,t[i].ecs);
printf("%s %s %s",t[i].nev,t[i].orsz,t[i].poz);
}
getch();
}
答案 0 :(得分:1)
大多数时候,C程序员会保存很少的实用程序以备将来使用 - 一个是使用strtok打破一个字符串。试试这个更灵活:
typedef struct{
char nev[50];
char orsz[3];
char poz[3];
float mag;
int suly;
char datum[10];
char varos[30];
char ecs[50];
}JATEKOS;
#define MAX_SPLIT 24
char **split(char **result, char *working, const char *delim)
{
int i;
char *p=strtok(working, delim);
for(i=0; p!=NULL && i<MAX_SPLIT; p=strtok(NULL, delim), i++)
{
result[i]=p;
result[i+1]=NULL;
}
return result;
}
int main()
{
FILE*f=fopen("Text.txt","rt");
int i=0;
JATEKOS *t, *rec;
char tmp[128]={0x0};
char *r[MAX_SPLIT + 1]={NULL};
t = (JATEKOS*)malloc(3*sizeof(JATEKOS));
rec=t;
while(fgets(tmp, 128, f)!=NULL)
{
split(r, tmp, "\t \n");
sprintf(rec->nev, "%s %s", r[0], r[1]);
strcpy(rec->orsz, r[2]);
strcpy(rec->poz , r[3]);
rec->mag=atof( r[4]);
rec->suly=atoi( r[5]);
strcpy(rec->datum, r[6]);
strcpy(rec->varos, r[7]);
strcpy(rec->ecs , r[8]);
i++;
if(i==2) break;
rec++;
}
printf("\n\n");
for(i=1;i<=2;++i){
//printf("%s %s %s %f %i %s %s %s",t[i].nev,t[i].orsz,t[i].poz,t[i].mag,t[i].suly,t[i].datum,t[i].varos,t[i].ecs);
printf("%s %s %s",t[i].nev,t[i].orsz,t[i].poz);
}
getch();
return 0;
}