2014-02-18 1 views
3

프로그램에 대한 입력을해야합니다. 프로그래밍에 대한 실력 밖에 있으므로, 아무 것도 시도하지 않은 것입니다. 당신이 나를 도울 수 있기를 바랍니다.2000 자마다 문자를 추출하고 파일을 저장하십시오.

나는 모든 샘플에 대해 ">"기호로 시작하여 줄 바꿈을 한 다음 0과 1의 데이터로 많은 텍스트 파일을 가지고 있습니다.

데이터는 (훨씬 더 큰 사실은) 다음과 같습니다

>SampleName_ZN189A 
01000001000000000000100011100000000111000000001000 
00110000100000000000010000000000001100000010000000 
00110000000000001110000010010011111000000100010000 
00000110000001000000010100000000010000001000001110 
>SampleName_ZN189B 
00110000001101000001011100000000000000000000010001 
00010000000000000010010000000000100100000001000000 
00000000000000000000000010000000000010111010000000 
01000110000000110000001010010000001111110101000000 

참고 : 줄 바꿈이 모든 50 자 후를. 내가해야 할 일은

은 다음과 같습니다

내 파일의 모든 샘플 데이터의 첫 번째 2000 개 문자를 추출하고 창 번호 다음에 같은 이름으로 저장합니다. 이 파일이 선정됐다 예를 들어 :

>SampleName_ZN189A 
01000001000000000000100011100000000111000000001000 
>SampleName_ZN189B 
00110000001101000001011100000000000000000000010001 

그리고이 파일을 다음과 같이 지정해야합니다 :

Testfile_1_window1.txt

을은 다음과 같아야합니다 Testfile_1.txt (I 데이터의 처음 50 개 문자를 추출) 이제 두 번째 창은 문자 1500에서 문자 3500으로 시작해야합니다.이 파일은 Testfile_1_window2.txt이고, 세 번째 파일은 3000 문자에서 5000 이름으로 Testfile_1_window3.txt 등등 ...하지만 마지막 창이 2000보다 작은 경우 문자 이러한 문자는 마지막 창에 추가되어야합니다.

즉, 500 자의 겹침이있는 2000 자의 윈도우로.

미리 감사드립니다.

NOTE2 :

이 문제는 답변을 게시하시기 바랍니다 펄이나 파이썬을 사용하여 해결 될 수 있다고 생각하는 경우.

+0

첫 번째 2000자를 추출하는 경우 두 번째 파일 '캐릭터 1500을 캐릭터 3500에 어떻게 오습니까?' – anubhava

+0

겹칠 것 같아요. – DeVadder

+0

예, 나는 모든 샘플의 데이터를 500 문자 씩 오버랩하여 2000 자마다 추출해야합니다.이 때문에 첫 번째 창은 0에서 2000까지, 다음 창은 1500에서 3500까지입니다. – JM88

답변

1

Perl에서 이렇게 할 수는 있지만 그렇게 효과적이지는 않지만 op 시스템이 파일을 캐시하기 때문에 작동 할 수 있습니다.

use strict;use warnings; 
local $/='>'; 
open(my $fh,'<','filename') or die $!;  
while (my $chunk = <$fh>){ 
    chomp($chunk); 
    $chunk =~ s!^(.+?)\n+!!is; 
    my $samplename = $1; 
    ### how many should be a constant or should be calculated on the fly, currently I set it to 50 
    for(my $i=0;$i<50;$i++){   
     my $data = substr($chunk,$i*1500,$i*1500+2000); 
     next if ! $data;##skip if there is not data 
     my $filename = "Testfile_".$samplename."_window".$i.".txt"; 
     open(my $ofh,'>',$filename) or die $filename,$!; 
     print $ofh "<$samplename\n$data\n"; 
     close($ofh); 
    } 
} 
close($fh);  
+0

좋은 해결책 . 그러나'$ ofh '를 열었을 때 추가하는 것을 잊어 버렸거나 마지막 덩어리의 창으로 끝나기를 잊었을 것입니다. 또한, 만약 op가 뉴 라인을 제거하기를 원하는지 확실하지 않습니다. 그러나 나는 거기에서 틀릴지도 모른다. – DeVadder

+0

답변 주셔서 감사합니다. 나는 그것을 실행했지만이 오류가 발생했습니다 : 글로벌 기호 "$ i"는 sites_window에 명시 적 패키지 이름이 필요합니다.pl 줄 11 – JM88

+0

for 루프에 오타가 있었는데 pls 다시 시도하십시오 – user1126070

관련 문제