| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5467 人关注过本帖, 1 人收藏
标题:如何把txt文件中某一列储存到数组中?求大神相助
只看楼主 加入收藏
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
结帖率:50%
收藏(1)
已结贴  问题点数:10 回复次数:14 
如何把txt文件中某一列储存到数组中?求大神相助
谢谢各位,之前的问题搞定了,还有最后一个问题,求教各位大神,

现在需要把2.txt文件中第6列的元素保存到数组num[100]中

2.txt文件部分内容如下:
ATOM      5  CA  ALA     2       3.742 -82.457   7.139  1.00  0.00      BR  
ATOM     15  CA  GLN     3       6.705 -83.726   5.222  1.00  0.00      BR  
ATOM     32  CA  ILE     4       7.323 -84.922   1.667  1.00  0.00      BR  
ATOM     51  CA  THR     5       4.616 -87.640   1.751  1.00  0.00      BR  
ATOM     65  CA  GLY     6       2.503 -85.524   1.825  1.00  0.00      BR  
ATOM     72  CA  ARG     7       1.939 -81.836   2.668  1.00  0.00      BR  
ATOM     95  CA  PRO     8      -1.784 -80.944   3.050  1.00  0.00      BR  
ATOM    110  CA  GLU     9      -0.387 -77.511   3.891  1.00  0.00      BR  

如第一行第六列储存到数组第一个元素中:num[0]=3.742
第二行第六列储存到数组第二个元素中:num[1]=6.705
………………
用fscanf写不是碰到空格就不行了么?求助

[ 本帖最后由 惜小君 于 2012-6-19 14:56 编辑 ]
搜索更多相关主题的帖子: 如何 元素 
2012-06-19 14:03
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
收藏
得分:0 
想用fgets来读去,但是fgets(字符数组名,n,文件指针);文件指针怎么写呢?

2012-06-19 14:46
zxwangyun
Rank: 4
来 自:云南
等 级:业余侠客
威 望:1
帖 子:232
专家分:299
注 册:2008-10-17
收藏
得分:0 
因为你这是文本文件,fscanf会把一行都当作一个字符串,直接读到行尾
可用fgets读取后,解析整个字符串来实现

努力改变一点点!!
2012-06-19 15:25
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
收藏
得分:0 
回复 3楼 zxwangyun
能说详细点吗,怎么解析整个字符串.
2012-06-19 15:44
zxwangyun
Rank: 4
来 自:云南
等 级:业余侠客
威 望:1
帖 子:232
专家分:299
注 册:2008-10-17
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <string.h> //包含memset函数
#include <stdlib.h> //包含double atof(const char *nptr);

#define MAX_LEN 260

#ifndef _MSC_VER
#define bool int
#define false 0
#define true 1
#endif

int main()
{
    float num[100]={0};
    int num_index = 0;
    FILE * lpFile = NULL;
    lpFile = fopen("2.txt","r");
    if(lpFile)
    {
        char ch;
        char szBuf[MAX_LEN]={0};
        bool bHasSpace=false;
        int i=0;
        while((ch=fgetc(lpFile)) != EOF)
        {
            //过滤多余空格,如果有\r或\t ,顺便过滤掉
            if(ch == '\r')continue;
            while( ch == ' ' || ch == '\t')
            {
                ch=fgetc(lpFile);
                bHasSpace = true;
            }           

            if(bHasSpace)//多个空格使用一个空格代替
            {
                bHasSpace = false;
                szBuf[i++]=' ';
            }
            szBuf[i++]=ch;
           

            if( ch == '\n' || ch == EOF)//读完一行
            {
                //开始解析字符串
                if(num_index<100)
                {       

                    int count=0;           

                    for(char * p = szBuf;*p;p++)
                    {
                        if(*p == ' ')
                            count ++;
                        if(count == 5)
                        {
                            char szNum[MAX_LEN]={0};
                            int tmp=0;
                            while(*(++p) && *p != ' ')
                            {
                                szNum[tmp++]=*p;                               

                            }
                            if(tmp)
                            {
                                num[num_index++] = atof(szNum);
                            }
                            break;
                        }
                    }
                }

                i=0;
                memset(szBuf,0,sizeof(szBuf));
                if(ch == EOF)
                    break;
            }
        }       

        fclose(lpFile);
    }
    for(int i=0;i<num_index;i++)
    {
        printf("%f\n",num[i]);
    }
    return 0;
}


努力改变一点点!!
2012-06-19 16:19
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
收藏
得分:0 
回复 5楼 zxwangyun
C语言中有bool吗,那好像是C++的^

bool bHasSpace=false;
2012-06-20 08:08
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
收藏
得分:0 
求达人啊
2012-06-20 08:09
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
收藏
得分:0 
有没更简单的方法
2012-06-20 08:10
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
我说你这位朋友态度很有问题吧,人家把这么漂亮的代码都给你了,也不仔细看一下就发 问C++神码的,这么任性,富二代吗

The quieter you become, the more you can hear
2012-06-20 08:18
惜小君
Rank: 1
来 自:合肥
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-6-19
收藏
得分:0 
回复 9楼 madfrogme
那段代码编译时会报错,修改好之后运行不显示任何数据,
程序代码:
#include <stdio.h>
#include <string.h> //包含memset函数
#include <stdlib.h> //包含double atof(const char *nptr);
#define MAX_LEN 260
#ifndef _MSC_VER
#endif

int main()
{
    double num[100]={0};
    int num_index = 0;
    int i;
    char *p;
    FILE * lpFile = NULL;
    lpFile = fopen("2.txt","r");
    if(lpFile)
    {
        char ch;
        char szBuf[MAX_LEN]={0};
        int bHasSpace=0;
        int i=0;
        while((ch=fgetc(lpFile)) != EOF)
        {
            //过滤多余空格,如果有\r或\t ,顺便过滤掉
            if(ch == '\r')continue;
            while( ch == ' ' || ch == '\t')
            {
                ch=fgetc(lpFile);
                bHasSpace = 1;
            }           

            if(bHasSpace)//多个空格使用一个空格代替
            {
                bHasSpace = 0;
                szBuf[i++]=' ';
            }
            szBuf[i++]=ch;
           

            if( ch == '\n' || ch == EOF)//读完一行
            {
                //开始解析字符串
                if(num_index<100)
                {       

                    int count=0;           

                    for(p = szBuf;*p;p++)
                    {
                        if(*p == ' ')
                            count ++;
                        if(count == 5)
                        {
                            char szNum[MAX_LEN]={0};
                            int tmp=0;
                            while(*(++p) && *p != ' ')
                            {
                                szNum[tmp++]=*p;                               

                            }
                            if(tmp)
                            {
                                num[num_index++] = atof(szNum);
                            }
                            break;
                        }
                    }
                }
                memset(szBuf,0,sizeof(szBuf));
                if(ch == EOF)
                    break;
            }
        }       

        fclose(lpFile);
    }
    for(i=0;i<num_index;i++)
    {
        printf("%f\n",num[i]);
    }
    return 0;
}



2012-06-20 08:47
快速回复:如何把txt文件中某一列储存到数组中?求大神相助
数据加载中...
 
   



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

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