| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1821 人关注过本帖
标题:如何【逐行】读取一个内容有一定格式的TXT文件
只看楼主 加入收藏
Runa
Rank: 1
来 自:武汉科技大学
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-2-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
如何【逐行】读取一个内容有一定格式的TXT文件
比较小白的我最近写的一个寝室管理系统,几天解决剩下这一个载入问题,如下是我存在txt中的格式需要进行读取再用insert函数载入,用空格分开的,最后用#来判断是否一段结束
南一 101 男寝 4 4#

这是我的代码
程序代码:
status load_dormitory(DorList d)
{
    FILE *fp_dormitory;
    int flag=0,i=0;
    char ch;//判断用字符
    char room_num[8];//这些都是为了拷贝用
    char building_num[8];
    char sex_type[8];
    char total_str[5];
    char left_str[5];
    int total;
    int left;
    char filename[]="G:\\dormitory.txt";
    if((fp_dormitory=fopen(filename,"r"))==NULL)
    {
        printf("无法打开文件%s进行载入\n",filename);
        return ERROR;
    }
    while(!feof(fp_dormitory))
    {
        ch=fgetc(fp_dormitory);//逐个读取
        if(ch!='#')
        {
            if(flag==0&&ch!=' ')
            {
                building_num[i]=ch;
                i++;
            }
            else if(flag==1&&ch!=' ')
            {
                room_num[i]=ch;
                i++;
            }
            else if(flag==2&&ch!=' ')
            {
                sex_type[i]=ch;
                i++;
            }
            else if(flag==3&&ch!=' ')
            {
                total_str[i]=ch;
                i++;
            }
            else if(flag==4&&ch!=' ')
            {
                left_str[i]=ch;
                i++;
            }
            else if(ch==' ')
            {
                flag++;
                i=0;
            }
        }
        else
        {
            flag=0;
            i=0;
            total=atoi(total_str);
            left=atoi(left_str);
            printf("%s\n",building_num);
            printf("%s\n",room_num);
            system("PAUSE");
            printf("%s\t%s\t%s\t%d\t%d\n",building_num,room_num,sex_type,total,left);
            insert_dor(d,room_num,building_num,sex_type,total,left);//一个载入函数
        }
    }
    fclose(fp_dormitory);
    return OK;
}

但是这样每个部分都有缀余的奇怪字符在后面,后来尝试了每行用fgets读取每行,再对每行进行格式的判断和读取,然而还是不行。。。有没有大神支个招,说个例子也好我去学习学习。。。卡了我一天多了

[此贴子已经被作者于2016-2-14 14:24编辑过]

2016-02-14 13:52
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:20 
else if(flag==1&&ch!=' ')
            {
                room_num[i]=ch;
                i++;
                room_num[i]='\0';//加一句,其它分支也加上
             }
2016-02-14 16:42
Runa
Rank: 1
来 自:武汉科技大学
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-2-14
收藏
得分:0 
多谢大神!能稍微讲讲这个是如何解决的吗?是否和txt文件的存储有关系呢,我查了资料但是还是有点摸不清头脑,而且此时读取到最后一行后直接就崩掉了。。。不是很懂这里的错误在哪?

[此贴子已经被作者于2016-2-14 18:42编辑过]


手很残很残。所以天天都要敲代码QAQ
2016-02-14 18:27
Runa
Rank: 1
来 自:武汉科技大学
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-2-14
收藏
得分:0 
哈哈,我用fscanf解决了这个问题,逐行带格式还是fscanf好用,还是多谢大神啦!

手很残很残。所以天天都要敲代码QAQ
2016-02-14 20:09
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
只说一下有缀余的奇怪字符出现的问题,c的字符串函数要求的参数是指向c语言的字符串的指针,c语言的字符串要求结尾处有空字符'\0',楼主的代码中传入的参数只是字符数组,缺少结尾的空字符,所以会出问题。
2016-02-17 15:06
快速回复:如何【逐行】读取一个内容有一定格式的TXT文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016939 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved