[d]C语言程序以perl语言实现
本帖最后由 fibbery 于 2012-10-05 18:16:58 编辑 * Note:Your choice is C IDE */
#include "stdio.h"
#include<stdio.h>
#include <stdlib.h>
#include <iostream.h>
int point[4][14] =
{{36,0,112,200,0,112,18,18,22,0,0,0,200,112},
{0,0,0,0,200,0,9,0,0,0,0,0,0,0},
{0,0,0,0,0,22,0,9,0,200,0,0,0,22},
{72,200,22,0,0,0,27,27,112,0,200,200,0,0}};
void main()
{
FILE *fp,*fp1,*buk;
int i=0;
int j=0;
int score=0;
int count=0;
int len=0;
char *pBuf;
char c;
system("cmd /c md d:\\lixinyue");
if((fp=fopen("d:\\listeria.fasta","rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
if((fp1=fopen("d:\\lixinyue\\result.txt","wt+"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
if((buk=fopen("d:\\lixinyue\\buk.txt","wt+"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
while((c=fgetc(fp))!=EOF)
{
if(c=='A'||c=='T'||c=='G'||c=='C')
fputc(c,buk);
}
fclose(fp);
fclose(buk);
if((buk=fopen("d:\\lixinyue\\buk.txt","rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
fseek(buk,0,SEEK_END);
len = ftell(buk);
pBuf = (char *)malloc(sizeof(char)*(len+1));
pBuf[len] = 0;
rewind(buk);
fread(pBuf,1,len,buk);
fclose(buk);
while(pBuf[i++]!='T');
while(pBuf[i+++15]!=0)
{
score=0;
for(j=0;j<14;j++)
{
if(pBuf[i+j]=='A')
score+=point[0][j];
else if(pBuf[i+j]=='C')
score+=point[1][j];
else if(pBuf[i+j]=='G')
score+=point[2][j];
else
score+=point[3][j];
if(score>1820)
{
fwrite(pBuf+i,sizeof(char),14,fp1);
count++;
fputc('\n',fp1);
break;
}
}
}
fwrite("Totel count:",sizeof(char),sizeof("Totel count:"),fp1);
fputc(count/1000+'0',fp1);
fputc(count/100+'0',fp1);
fputc(count/10+'0',fp1);
fputc(count%10+'0',fp1);
system("explorer D:\\lixinyue\\result.txt");
printf("Totel count:%d \n",count);
printf("Mission Success");
fclose(fp1);
free(pBuf)
return;
}
这是C语言的程序,怎么用perl实现呢?
-----------------------------
Double行动:
原帖分数:40
[解决办法]
没看明白程序要干嘛,大致可以按 perl 思路:
#!/usr/bin/perl
use strict;
use warnings;
my @point = (
[36,0,112,200,0,112,18,18,22,0,0,0,200,112],
[0, 0,0,0,200,0,9,0,0,0,0,0,0,0],
[0, 0,0,0,0,22,0,9,0,200,0,0,0,22],
[72,200,22,0,0,0,27,27,112,0,200,200,0,0],
);
my $in_file_name = 'd:\listeria.fasta';
my $out_file_name = 'd:\lixinyue\result.txt';
my $buk_file_name = 'd:\lixinyue\buk.txt';
open my $in, '<', $in_file_name or die "$!: $in_file_name";
open my $out, '>', $out_file_name or die "$!: $out_file_name";
open my $buk, '>', $buk_file_name or die "$!: $buk_file_name";
while my $line (<$in>) {
my @chars = split //, $line;
for my $char (@chars) {
if () {
}
}
}
close $buk;
close $out;
close $in;