| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 823 人关注过本帖, 1 人收藏
标题:多个文件的链接问题
取消只看楼主 加入收藏
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
结帖率:55.56%
收藏(1)
已结贴  问题点数:10 回复次数:9 
多个文件的链接问题
现有7个文本文件(ha1-7 里面存放的是字符型数据,每个文件的行数不一样,7个文件的字符长度也不一样,但是每个文件内部每一行的长度是一定的),对应另外7个文件(f1-7 此文件存放的是ha1-7文件中每行对应的频率) 还有一个文本文件(fenkuailianjieqizhi.txt) 存放的是ha1-7文件每一行字符的的长度。现在想把两两个文件中频率乘积大与q的字符两接到一起,最后连接成一个长字符
以下是我编写的代码但是满是错误   麻烦大家指点
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include<time.h>
#include<string.h>
#define m 7
#define q 0.03
void main()
{
    FILE *fp,*fp1;
    int i,j=0,Individual=0,SNP=0,x,t,n;
    int a[100][5]={0};
    char str1[500][100]={0};
    char str2[500][500]={0};
    char mid,fname[20],finame[20];
    int fr[500]={0},fr1[500]={0},b[500]={0},c[100]={0};
    //int
    //int
    if((fp=fopen("fenkuailianjieqizhi.txt","r"))==NULL)/*确定每一个文本文件的起止字符*/
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        for(i=0;i<m;i++)
            for(j=0;j<2;j++)
                fscanf(fp,"%d",&a[i][j]);
            fclose(fp);
    }
    for(i=1;i<=m;i++)/*确定每个文本文件有多少行*/
    {
        Individual=0;
        sprintf(fname, "ha%d.txt", i);
        if((fp=fopen(fname,"r"))==NULL)
        {
            printf("Can not open the file!\n");
        }
        while(!feof(fp))
        {
            mid=fgetc(fp);
            if(mid=='\n')
                Individual++;
        }
        c[i-1]=Individual;
    }
    for(i=1;i<=m;i++)
        printf("%d\t",c[i-1]);
    printf("\n");
    if ((fp = fopen("ha1.txt","r"))==NULL)/*将每个文本文件的内容赋给数组*/
        {
            printf("cannot open this file\n");
            exit(0);
        }
    else
    {
        for(i=0;i<c[0];i++)
            for(j=0;j<a[0][1]-a[0][0]+2;j++)
                fscanf(fp,"%c",&str1[i][j]);
            fclose(fp);
    }
    for(i=0;i<c[0];i++)
    {
        for(j=0;j<a[0][1]-a[0][0]+1;j++)
            printf("%c",str1[i][j]);
            printf("\n");
    }
    if ((fp = fopen("f1.txt","r"))==NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        for(i=0;i<c[0];i++)
            fscanf(fp,"%d",&fr[i]);
        fclose(fp);
    }
    for(i=0;i<c[0];i++)
            printf("%d",fr[i]);
    t=c[0];

    for(i=2;i<=m;i++)
    {
        sprintf(fname, "ha%d.txt", i);
        if ((fp = fopen(fname,"r"))==NULL)
        {
            printf("cannot open this file\n");
            exit(0);
        }
        else
        {
            for(x=0;x<c[i-1];x++)
                for(j=0;j<a[i-1][1]-a[i-1][0]+1;j++)
                    fscanf(fp,"%c",&str2[x][j]);
                fclose(fp);
            for(x=0;x<c[i-1];x++)
            {
                for(j=0;j<a[i-1][1]-a[i-1][0]+1;j++)
                    printf("%c",str2[x][j]);
                printf("\n");
            }
            sprintf(fname, "f%d.txt", i);
            if ((fp = fopen(fname,"r"))==NULL)
            {
                printf("cannot open this file\n");
                exit(0);
            }
            else
            {
                for(x=0;x<c[i-1];x++)
                    fscanf(fp,"%d",&fr1[x]);
                fclose(fp);
            }
            for(x=0;x<t;x++)
            {
                for(j=0;j<c[i-1];j++)
                {
                    if(fr[x]*fr1[j]>q)/* 这地方不会编了    */
                    {
                        for(n=0;n<a[i-1][1]-a[i-1][0]+1;n++){
                        while (str1[x][n] !='\n')
                        while (str2[j][n] !='\n')
                            str1[x][n]=str2[j][n]; }      
                        //str1[x][j] ='\0';}
                    }
                }
            }
        }
    }
}
搜索更多相关主题的帖子: 文本文件 include 
2015-01-09 15:21
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 2楼 wp231957
ha1数据如下
0001
0002
0011
0012
0101
0102
0111
1001
1002
1011
1012
1101
1102
1111
1112
ha2 数据如下
00
00
01
01
10
10
11
11
ha3 数据如下
1
1
2
2
ha4 数据如下
11
11
11
12
12
12
21
21
22
22
22
22
f1 数据如下
0.549653
0.216120
0.101893
0.001619
0.006398
0.000031
0.000062
0.025851
0.004410
0.004058
0.000124
0.023693
0.012353
0.052367
0.001368
f2 数据如下
0.640790
0.244303
0.001738
0.001368
0.001736
0.001369
0.094866
0.013829
f3 数据如下
0.614748
0.124383
0.143016
0.117853
f4 数据如下
0.669543
0.055830
0.000031
0.003893
0.019119
0.009348
0.003665
0.019379
0.008075
0.000745
0.040757
0.169616
fenkuailianjieqizhi.txt数据如下
1    4(两数相减加1 是ha1 文件每行字符的长度)
5    6
7    7
8    9
谢谢!


2015-01-09 15:46
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 4楼 TonyDeng
是横着看的
4-1+1=4是ha1文件每个字符的长度
6-5+1=2是ha2文件每个字符的长度
7-7+1=1是ha3文件每个字符的长度
9-8+1=2是ha4文件每个字符的长度
2015-01-09 19:38
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 6楼 TonyDeng
我这是研究的生物信息学,1 4 表示的是ha1文件中存的是第一到第四个基因位点,也就是说ha1 文件每一行存的是4个字符
5 6表示的是ha2文件中存的是第5到第6个基因位点,也就是说ha1 文件每一行存的是2个字符
依次类推
谢谢!
2015-01-09 19:51
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 6楼 TonyDeng
我研究生物是生物信息学,  1  4 表示ha1文件存放的是基因的第1到第4个位点,也就是ha1文件的每一行都是4个字符
5  6 表示ha2文件存放的是基因的第5到第6个位点,也就是ha2文件的每一行都是2个字符
7 7 表示ha3文件存放的是基因的第7到第7个位点,也就是ha3文件的每一行都是1个字符
依次类推
我刚刚改的程序如下:
/*字符连接。。。。。。*/那地方怎么都不对
谢谢你帮助!


#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include<time.h>
#include<string.h>
#define m 2
#define q 0.05
void main()
{
    FILE *fp,*fp1;
    int i,j=0,Individual=0,SNP=0,x,t,n,k,p;
    int a[100][5]={0};
    char str1[500][100]={0};
    char str2[500][500]={0};
    char mid,fname[20],finame[20];
    double fr[500]={0},fr1[500]={0},fr2[500]={0};
    int b[500]={0},c[100]={0};
    //int
    if((fp=fopen("fenkuailianjieqizhi.txt","r"))==NULL)/*确定每一个文本文件的起止字符*/
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        for(i=0;i<m;i++)
            for(j=0;j<2;j++)
                fscanf(fp,"%d",&a[i][j]);
            fclose(fp);
    }
    for(i=1;i<=m;i++)/*确定每个文本文件有多少行*/
    {
        Individual=0;
        sprintf(fname, "ha%d.txt", i);
        if((fp=fopen(fname,"r"))==NULL)
        {
            printf("Can not open the file!\n");
        }
        while(!feof(fp))
        {
            mid=fgetc(fp);
            if(mid=='\n')
                Individual++;
        }
        c[i-1]=Individual;
    }
    for(i=1;i<=m;i++)
        printf("%d\t",c[i-1]);
    printf("\n");
    if ((fp = fopen("ha1.txt","r"))==NULL)/*将每个文本文件的内容赋给数组*/
        {
            printf("cannot open this file\n");
            exit(0);
        }
    else
    {
        for(i=0;i<c[0];i++)
            for(j=0;j<a[0][1]-a[0][0]+2;j++)
                fscanf(fp,"%c",&str1[i][j]);
            fclose(fp);
    }
    for(i=0;i<c[0];i++)
    {
        for(j=0;j<a[0][1]-a[0][0]+1;j++)
            printf("%c",str1[i][j]);
            printf("\n");
    }
    if ((fp = fopen("f1.txt","r"))==NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        for(i=0;i<c[0];i++)
            fscanf(fp,"%lf",&fr[i]);
        fclose(fp);
    }
    for(i=0;i<c[0];i++)
            printf("%lf",fr[i]);
    t=c[0];

    for(i=2;i<=m;i++)
    {
        sprintf(fname, "ha%d.txt", i);
        if ((fp = fopen(fname,"r"))==NULL)
        {
            printf("cannot open this file\n");
            exit(0);
        }
        else
        {
            for(x=0;x<c[i-1];x++)
                for(j=0;j<a[i-1][1]-a[i-1][0]+2;j++)
                    fscanf(fp,"%c",&str2[x][j]);
                fclose(fp);
            /*for(x=0;x<c[i-1];x++)
            {
                for(j=0;j<a[i-1][1]-a[i-1][0]+1;j++)
                    printf("%c",str2[x][j]);
                printf("\n");
            }*/
            sprintf(fname, "f%d.txt", i);
            if ((fp = fopen(fname,"r"))==NULL)
            {
                printf("cannot open this file\n");
                exit(0);
            }
            else
            {
                for(x=0;x<c[i-1];x++)
                    fscanf(fp,"%lf",&fr1[x]);
                fclose(fp);
            }
            k=0;
            for(x=0;x<t;x++)
            {
                //g=0;
                for(j=0;j<c[i-1];j++)
                {
                    if(fr[x]*fr1[j]>q)
                    {
                        fr2[k]=fr[x]*fr1[j];
                        k++;
                        //g++;
                        n=0;
                        /*p=0;
                        if (str1[x][n] !='\n')/*字符连接。。。。。。。。。*/
                                n++;
                        if (str2[j][p] !='\n')
                        {
                            str1[x][n++]=str2[j][p++];
                            str1[g][n++]=str1[x][n++];
                        }      
                        str1[x][n] ='\n';
                        
                        for(p=0;p<g;p++)
                            for(h=0;h<n;h++)
                            {
                                str1[p][]=str1[x][];
                            }*/
                    }
                }
            }
            t=k;
            printf("%d\t",t);
            for(x=0;x<t;x++)
            {
                fr[x]=fr2[x];
            }
            for(x=0;x<t;x++)
            {
                printf("%lf\t",fr[x]);
            }
        }
    }
}
2015-01-09 20:12
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 8楼 TonyDeng
没有不耐烦,不知道那就话说的不合适,不好意思啊!
2015-01-09 20:14
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 11楼 yahwei
谢谢你!  我想用你的方法试一下  先编了个小程序   把ha1 的内容一行一行的读出来在存入新的文件hap2 文件中 可是hap2 文件只存ha1文件的最后一行  找不到原因  程序如下
#include <stdio.h>
   
  void main()
   {
       FILE *fp,*fp1;
       char StrLine[1024];
       if((fp = fopen("ha2.txt","r")) == NULL) 读
       {
          printf("error!");  
      }
  
      while (!feof(fp))
      {
          fgets(StrLine,1024,fp);  //读取一行
         printf("%s", StrLine); //输出
          if ((fp1 = fopen("hap2.txt","w"))==NULL)
            {
                printf("the file can not open..");
            }
         else
         {
             printf("hahha\n");
            fprintf(fp1,"%s", StrLine);
            fclose(fp1);
         }
      }
      fclose(fp);                     
  }
2015-01-10 16:41
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 13楼 砖家的谎言
  没找到原因,请大师指点
2015-01-10 18:04
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 15楼 longwu9t
谢谢你!我在vc6.0上运行了 但是编译时候一直显示错误 改了一会没有找到错误的地方
ha1-7和f1-7文件每行的结尾都是一个‘\n’
最好要循环的比较因为这次“fenkuailianjieqizhi.txt”里面显示的是四行(说明ha1-7和f1-7文件各四个)但是下一次“fenkuailianjieqizhi.txt”里面可能是8行(说明ha1-7和f1-7文件各8个)
2015-01-11 11:24
ZMX900507
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2015-1-8
收藏
得分:0 
回复 18楼 砖家的谎言
这是我编写的代码  由于初学 所以用的都是简单的代码  编译通过了 但是占用的内存太大了
当 q的值很小时 运行就出差错了  显示内存无法读
想改进的方法是   把文本文件中相同的行数去掉(这一段代码想了好久没有编出来)
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include<string.h>
#define m 7
#define q 0.003
void main()
{
    FILE *fp,*fp1;
    int i,j=0,Individual=0,SNP=0,x,t,k,p,g,h1;
    int a[100][5]={0};
    char str1[700][200]={0};
    char str2[700][200]={0};
    char str3[700][200]={0};
    char mid,fname[20],finame[20];
    double fr[700]={0},fr1[700]={0},fr2[700]={0};
    int b[500]={0},c[100]={0};
    //int
    if((fp=fopen("fenkuailianjieqizhi.txt","r"))==NULL)/*确定每一个文本文件的起止字符*/
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        for(i=0;i<m;i++)
            for(j=0;j<2;j++)
                fscanf(fp,"%d",&a[i][j]);
            fclose(fp);
    }
    for(i=1;i<=m;i++)/*确定每个文本文件有多少行*/
    {
        Individual=0;
        sprintf(fname, "ha%d.txt", i);
        if((fp=fopen(fname,"r"))==NULL)
        {
            printf("Can not open the file!\n");
        }
        while(!feof(fp))
        {
            mid=fgetc(fp);
            if(mid=='\n')
                Individual++;
        }
        c[i-1]=Individual;
    }
    for(i=1;i<=m;i++)
        printf("%d\t",c[i-1]);
    printf("\n");
    if ((fp = fopen("ha1.txt","r"))==NULL)/*将每个文本文件的内容赋给数组*/
        {
            printf("cannot open this file\n");
            exit(0);
        }
    else
    {
        for(i=0;i<c[0];i++)
            for(j=0;j<a[0][1]-a[0][0]+2;j++)
                fscanf(fp,"%c",&str1[i][j]);
            fclose(fp);
    }
    /*for(i=0;i<c[0];i++)
    {
        for(j=0;j<a[0][1]-a[0][0]+1;j++)
            printf("%c",str1[i][j]);
            printf("\n");
    }*/
    if ((fp = fopen("f1.txt","r"))==NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        for(i=0;i<c[0];i++)
            fscanf(fp,"%lf",&fr[i]);
        fclose(fp);
    }
    //for(i=0;i<c[0];i++)
            //printf("%lf",fr[i]);
    t=c[0];
    h1=a[0][1]-a[0][0]+1;
    for(i=2;i<=m;i++)
    {
        sprintf(fname, "ha%d.txt", i);
        if ((fp = fopen(fname,"r"))==NULL)
        {
            printf("cannot open this file\n");
            exit(0);
        }
        else
        {
            for(x=0;x<c[i-1];x++)
                for(j=0;j<a[i-1][1]-a[i-1][0]+2;j++)
                    fscanf(fp,"%c",&str2[x][j]);
                fclose(fp);
            /*for(x=0;x<c[i-1];x++)
            {
                for(j=0;j<a[i-1][1]-a[i-1][0]+1;j++)
                    printf("%c",str2[x][j]);
                printf("\n");
            }*/
            sprintf(fname, "f%d.txt", i);
            if ((fp = fopen(fname,"r"))==NULL)
            {
                printf("cannot open this file\n");
                exit(0);
            }
            else
            {
                for(x=0;x<c[i-1];x++)
                    fscanf(fp,"%lf",&fr1[x]);
                fclose(fp);
            }
            k=0;
            for(x=0;x<t;x++)
            {
                for(j=0;j<c[i-1];j++)
                {
                    if(fr[x]*fr1[j]>q)
                    {
                        fr2[k]=fr[x]*fr1[j];
                        for(p=0;p<h1;p++)
                        {
                            str3[k][p]=str1[x][p];
                            //printf("%c\t",str3[k][p]);
                            //str3[k][2+t]=str2[j][t];   
                        }
                        for(g=0;g<a[i-1][1]-a[i-1][0]+2;g++)
                            str3[k][h1+g]=str2[j][g];
                        //printf("%c\t",str3[k][a[0][1]-a[0][0]+1+g]);
                        k++;
                    }
                }
            }
            t=k;
            for(x=0;x<t;x++)
            {
                for(j=0;j<h1+a[i-1][1]-a[i-1][0]+2;j++)
                    str1[x][j]=str3[x][j];
            }
            for(x=0;x<t;x++)
            {
                for(j=0;j<h1+a[i-1][1]-a[i-1][0]+2;j++)
                    printf("%c",str1[x][j]);
            }
            //printf("%d\t",k);
            for(x=0;x<k;x++)
            {
                fr[x]=fr2[x];
            }
            /*for(x=0;x<k;x++)
            {
                printf("%lf\t",fr[x]);
            }*/
            sprintf(finame, "h%d.txt", i);
            if ((fp1 = fopen(finame,"w"))==NULL)
            {
                printf("the file can not open..");
            }
            else
            for(x = 0;x < t;x++)
            {
                for(j= 0;j < h1+a[i-1][1]-a[i-1][0]+2;j++)
                {
                    fprintf(fp1,"%c",str1[x][j]);
                }
            }
         fclose(fp1);
         h1=h1+(a[i-1][1]-a[i-1][0])+1;
         printf("%d\t",h1);
        }
    }
}
2015-01-11 20:59
快速回复:多个文件的链接问题
数据加载中...
 
   



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

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