Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152032
  • 博文数量: 64
  • 博客积分: 2545
  • 博客等级: 少校
  • 技术积分: 692
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-22 20:00
文章分类

全部博文(64)

文章存档

2011年(3)

2009年(51)

2008年(10)

我的朋友

分类: C/C++

2008-07-01 15:32:32

 
 
 
 
 
 
 
 
 
 
/*下面这个简单程序功能是从硬盘上的文件中读入一个由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;
}
 
原文:=字符串
阅读(2434) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~