| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:有一个问题需要求解!!!
只看楼主 加入收藏
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
结帖率:93.94%
收藏
已结贴  问题点数:30 回复次数:8 
有一个问题需要求解!!!
我有17174行数据,每一行数据几个到几十个不等,
以下是我编的程序,想把每一行数据两两放在下面的数组中:
date=fopen("E:\\寻找内含子序列\\每个基因上的外显子起始与终止.txt","rt");
 while(!'\n')
   for(i=0;i<1;i++)
     for(j=0;j<125;j++)
        fscanf(date,"%d,%d,",&lead[i].start[j],&lead[i].end[j]);

但是每一行数据都有一次换行,我该怎么处理这个换行呢?因为不处理的话,上面的程序就会不理换行,直接读完125个数据才会结束,
谢谢各位大侠,帮帮忙,困惑好久了,谢谢!!!!

这是17174行数据!!
每个基因上的外显子起始与终止.rar (364.02 KB)
搜索更多相关主题的帖子: 外显子 内含子 
2013-03-20 11:37
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
好像有getline 什么的?
或者直接ReadFile 正常读取数据,自己解析换行就行了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-20 12:18
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:0 
又是这基因
2013-03-20 12:51
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用yuccn在2013-3-20 12:18:06的发言:

好像有getline 什么的?
或者直接ReadFile 正常读取数据,自己解析换行就行了
您好,请问您说的getline或ReadFile怎么用呢,这个有些陌生,望指教!!!
谢谢!!!
2013-03-20 12:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
总共111273组数据是吧?

授人以渔,不授人以鱼。
2013-03-20 12:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:25 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Lead
{
    int start;
    int end;
    Lead* next;
};

void release_list(Lead* const head);

int main(int argc, char* argv[])
{
    if (argc < 2)        // 没有输入命令行参数
    {
        return -1;
    }

    const char* filename = argv[1];
    FILE* file;
    errno_t error_no = fopen_s(&file, filename, "rt");
    if (error_no == 0)
    {
        Lead* const lead_head = (Lead*) malloc(sizeof(Lead));
        if (lead_head)
        {
            lead_head->next = nullptr;
            size_t counter = 0;
            Lead* lead_node = lead_head;
            while (!feof(file) && (fscanf_s(file, "%d%,%d,", &(lead_node->start), &(lead_node->end)) == 2))
            {
                ++counter;
                printf_s("%d,%d\n", lead_node->start, lead_node->end);
                if (lead_node->next = (Lead*) malloc(sizeof(Lead)))
                {
                    lead_node = lead_node->next;
                    lead_node->next = nullptr;
                }
                else
                {
                    printf_s("\n内存不足!\n");
                    break;
                }
            }
            printf_s("\n记录总数 = %u, 占用的动态内存 = %u Byte\n", counter, counter * sizeof(Lead));
        }
        fclose(file);
        release_list(lead_head);
    }
    else
    {
        printf_s("数据文件 %s 打开失败, 错误码 = %d\n", filename, error_no);
        printf_s("按任意键继续...\n");
        _getch();
        return error_no;
    }

    printf_s("按任意键继续...\n");
    _getch();

    return 0;
}

// 释放链表占用的内存
void release_list(Lead* const head)
{
    printf_s("\n正在释放动态分配的内存, 请稍候...\n");
    Lead* node = head;
    while (node)
    {
        Lead* next = node->next;
        delete node;
        node = next;
    }
}


授人以渔,不授人以鱼。
2013-03-20 13:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你文件中那些数据,在内存中以二进制格式储存,接近700K,Windows平台下默认程序的栈大小是1M,你如果在栈上分配数组,有点危险。不过这还不算大问题,现在是读入外部数据的时候没有事先获取有多少组数据,很难准确分配数组的大小,而数组是无法动态伸缩的(其实使用C++的vector好操作得多),分多了有浪费,而分到1M又会破坏程序。我不知道你怎么算那个数组尺寸的。

授人以渔,不授人以鱼。
2013-03-20 14:30
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用TonyDeng在2013-3-20 14:30:42的发言:

你文件中那些数据,在内存中以二进制格式储存,接近700K,Windows平台下默认程序的栈大小是1M,你如果在栈上分配数组,有点危险。不过这还不算大问题,现在是读入外部数据的时候没有事先获取有多少组数据,很难准确分配数组的大小,而数组是无法动态伸缩的(其实使用C++的vector好操作得多),分多了有浪费,而分到1M又会破坏程序。我不知道你怎么算那个数组尺寸的。
您好,因为一行数据有的比较多,我要把他们分别表示出来,下面是我编的一个程序

#include"stdio.h"
#include"stdlib.h"
FILE *fp,*str,*date1,*date2;
struct motif
{
int start[125];
int end[125];
int num;
}lead[17175];
void Out(int a, int b)
{
char zifu;
fseek(fp,(a-1),0);
while (a++<=b)   
{
zifu=fgetc(fp);
fprintf(str,"%c",zifu);
}
}
void main()
{
 int i,j;
 fp=fopen("F:\\人类23条染色体\\rst1.txt", "r");
 date1=fopen("E:\\寻找内含子序列\\17174个基因.txt","r");                //这一行里,文件中存的是每一行数据的个数,我在下面给出这个文件!!1
 date2=fopen("E:\\寻找内含子序列\\每个基因上的外显子起始与终止.txt","r");
 str=fopen("E:\\寻找内含子序列\\内含子序列.txt","w");
 for(i=0;i<17175;i++)
 fscanf(date1,"%d",&lead[i].num);
 for(i=0;i<17175;i++)
   for(j=0;j<lead[i].num;j++)
      fscanf(date2,"%d,%d,",&lead[i].start[j],&lead[i].end[j]);
 for(i=0;i<17175;i++)
   for(j=0;j<lead[i].num-1;j++)
    Out(lead[i].end[j],lead[i].start[j+1]);
 fclose(fp);
}
17174个基因.rar (11.57 KB)

我感觉自己编的这个有些小问题,但找不出来,还望赐教!!!!!!
2013-03-20 14:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
上面给了你代码,也附带了解决意见,自己慢慢看着琢磨吧。

授人以渔,不授人以鱼。
2013-03-20 15:00
快速回复:有一个问题需要求解!!!
数据加载中...
 
   



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

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