一个 读取基因组文件的问题!

时间:2008-05-10 05:02:42   来源:论坛整理  作者:  编辑:chinaitzhe
void read(const char *filename)
{
static const int buffer_size=500000;
unsigned int current=0;
ifstream genome_file(filename);
if(!genome_file)
{
cout < <"Can not open input file" string(filename);
return;
}
else
{
vector <char> buffer;

char c='\0';
do
{
genome_file.get(c);
current;
}
while(c!='\n' && c!='\0');

while(!genome_file.eof())
{
genome_file.seekg(current);
genome_file.read(&buffer.front(),buffer_size);
int real_size=genome_file.gcount();

int loop=buffer_size-12;

for(int j=0;j <=loop;j )
{
unsigned int key=0;
for(short k=0;k <seed_size;k )
{
int tmp=char_to_int(buffer[current j k]);
key=key tmp*pow(4.0,12-k-1);
... ...
}
... ...
}
}
}
}


文件读取 有两个问题:
1. 死循环: while(!genome_file.eof()) 不会结束,执行无数次
假如改成 while(genome) 就只执行一次

2. 读取的东西为空:
genome_file.read(&buffer.front(),buffer_size);
int real_size=genome_file.gcount();

发现 buffer 为空, real_size=0

求助各位高手,俺是新手!



网友回复:所读取的文件是这样的:

>chr12frag
accagcatggcgaaaccccatctctactaaaaatacaaaaattatccagg
cgtggtggcacgtgcctgtaatcccagctactcaggagactgaggcagga
gaatcgcttgaacccaggaggcagaggttgcagtgagccaagattgcacc
agtgcactccagcctgggtgacagagtgagactccacctcaaaaaaaaac
aacctcaagtatcttctccatattgagaatcatcagagtaatcaaacttt
tacataaataggaaacttgtatagggatttgtgcaagaatacgaaggtgg
ttctgattagggaggaaacttgtaggcatgtctttgaaagataacaggta
ttatgtggagtcaggaaagtctggtttcaaattcctgccctaccacttcc
aactgtgataacaaactttaatttttaacctgtcttatgtgaagagtttt
cacctgtaaaacagtggaaattaaaggaccactgttattatcgggtggcg
ttaaatttccccttgaagtagaaatggcatactatgtcaaccaaactcca
gctccgtacttggatatttgttaattgataactcttcaagtttgttcttt

后面省略

网友回复:if ( genome_file.fail() )
判定下,是不是你的文件名写错了

网友回复:跟踪下current的数值
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





    do

    {

     genome_file.get(c);

       current;                        

    }

    while(c!='\n' && c!='\0'); 



貌似你的逻辑错了,你是想先跳过一开始的换行和null吧?



那应该这样

do

    {

     genome_file.get(c);

if(c=='\n' || c=='\0')

       current;                        

    }

    while(c=='\n' || c=='\0');


丑陋了点,不管了,你自己实现相同功能吧
网友回复:文件名 经检查 无误。

char c='\0';
do
{
genome_file.get(c);
current;
}
while(c!='\n' && c!='\0');
这段确实 是 跳过 前面一行

而且 也是 正确的, current 也增加了,

但是后面 while(!genome_file.eof())
{
进入 后 没有读到东西,current 无增加,real_size为0 ,
网友回复:关注 接分
网友回复:有问题请先GOOGLE,BAIDU
关键字:一个,读取,基因组,文件,问题,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面