/*下面这个简单程序功能是从硬盘上的文件中读入一个由6个空格隔开的7个字符段构成的一个完成的原始字符串,如: 12 Lao Wang 20 13 15 22,然后对这个字符串加以分析后提取数据.要提取的数据分别为整数 12,字符串 Lao,字符串 Wang,整数 20,整数 13,整数 15,以及整数 22.假定编程者已知该原始字符串的以上这个格式.然后将这些解析出来的数据填入相应的结构体数组的数据元素中去,最后打印填充好的结构体数组.*/
#include
#include
#define NAMELEN 31
typedef struct s_playerinfo{
int playernumber;
char fisrtname[NAMELEN];
char lastname[NAMELEN];
int otab;
int noh;
int walks;
int rbis;
}PLAYERINFO;
int skip_file_space(FILE *fp) {
int c;
if (isspace(c = fgetc(fp))) {
while ((c = fgetc(fp)) != EOF) {
if (!isspace(c)) {
ungetc(c, fp);
return 0;
}
}
}
return -1;
}
int skip_file_to_return(FILE *fp) {
int c;
while ((c = fgetc(fp)) != EOF) {
if (c == '\n' || c == '\r') {
return 0;
}
}
return -1;
}
int get_file_int(FILE *fp, int *reti) {
int c;
int i;
if (isdigit(c = fgetc(fp))) {
ungetc(c, fp);
i = 0;
while ((c = fgetc(fp)) != EOF) {
if (!isdigit(c)) {
break;
}
i = i * 10 + c - '0';
}
ungetc(c, fp);
*reti = i;
return 0;
}
return -1;
}
int get_file_text(FILE *fp, char *buf, int buf_len) {
int c;
if (buf_len > 0) {
if (!isspace(c = fgetc(fp))) {
ungetc(c, fp);
while ((c = fgetc(fp)) != EOF) {
if (buf_len <= 0 || isspace(c)) {
break;
}
*buf++ = c;
buf_len--;
}
ungetc(c, fp);
*buf = '\0';
return 0;
}
}
return -1;
}
int get_file_playerinfo(FILE *fp, PLAYERINFO *pi) {
PLAYERINFO tmp_pi;
if (get_file_int(fp, &tmp_pi.playernumber) == 0) {
if (skip_file_space(fp) == 0) {
if (get_file_text(fp, tmp_pi.fisrtname, NAMELEN) == 0) {
if (skip_file_space(fp) == 0) {
if (get_file_text(fp, tmp_pi.lastname, NAMELEN) == 0) {
if (skip_file_space(fp) == 0) {
if (get_file_int(fp, &tmp_pi.otab) == 0) {
if (skip_file_space(fp) == 0) {
if (get_file_int(fp, &tmp_pi.noh) == 0) {
if (skip_file_space(fp) == 0) {
if (get_file_int(fp, &tmp_pi.walks) == 0) {
if (skip_file_space(fp) == 0) {
if (get_file_int(fp, &tmp_pi.rbis) == 0) {
skip_file_to_return(fp);
*pi = tmp_pi;
return 0;
}
}
}
}
}
}
}
}
}
}
}
}
}
return -1;
}
int main(void) {
FILE *fp;
PLAYERINFO pi;
fp = fopen("test.txt", "r");
if (fp != NULL) {
while (get_file_playerinfo(fp, &pi) == 0) {
printf("%d %s %s %d %d %d %d\n",pi.playernumber,pi.fisrtname,
pi.lastname,pi.otab,
pi.noh,pi.walks,pi.rbis);
}
fclose(fp);
return 0;
}
return -1;
}
原文:=字符串
阅读(2462) | 评论(0) | 转发(0) |