2015-02-05 2 views
0

perl의 for 루프에 문제가 있습니다. 데이터베이스 (SQLite)의 DNA 시퀀스의 시작과 끝을 알기를 원하고 내 유기체의 전체 게놈이 들어있는 파일에서 데이터베이스에 시퀀스를 추가하려고합니다. 그래서 기본적으로 텍스트 파일의 텍스트를 원하고 조각의 시작 위치와 종료 위치를 알고 있습니다. 그래서 제가 한 것은 글자로 된 텍스트를 분해하여 배열에 넣고 시작과 끝 지점의 모든 요소를 ​​선택하여 새 배열을 구성하는 것입니다. 그리고 어떤 이유로 데이터베이스에서 가져 오는 모든 행에 대해 그렇게하지 않습니다. 지금까지 문제를 해결하기 위해 수행 한 작업 : 모든 변수가 존재하는지 살펴 본다. 내 지식은 데이터베이스 문제가 아니며 입력 파일에 문제가있는 것입니다. 그렇다면 왜 스케치는 for 루프를 통과하지 못합니까? 그것의 얼굴에perl이 종종 패턴없이 루프를 건너 뜁니다.

#!/usr/bin/perl 
use strict; 
use warnings; 
use DBI; 

#... connecting to db, array @all defined etc. works all fine 

while(@row= $sth-> fetchrow_array){ 
     $start=$row[0]; #works, is always defined 
     $end=$row[1]; #works, is always defined 
     $id=$row[2]; #works, is always defined 
     print OUT $id; #works 
     for ($i=$start;$i<$end;$i++){ #seems that this loop is sometimes ignored (without any pattern)? 
      $count++; 
      print OUT $count; #is printed out continuously, but not for every $id, some lines in the OUT file are just empty after the $id 
      $line=$all[$i]; #this is what I actually want to do 
      push (@prom, $line); 
     } 
     print OUT "\n"; #works 
#and then go on and do things with @prom   
} 
+1

실제 코드가 아닌 것 같습니다. 멋지게 엄격한/경고가 있지만, 변수를 선언하지 않아도됩니다. 이러한 스크립트는 실행할 수 없습니다. –

+0

그리고. 배열'@ all'을 가지고 있지 않지만 그것을 읽으려고합니다. 코드에서 실제 strict/warnings을 사용하면 이러한 오류를 놓칠 수 없습니다. –

+0

어 죄송합니다. 나는 단지 doenst work 코드만을 게시하기로되어 있다고 생각했습니다. 물론 전체 스크립트를 게시 할 수 있습니다 – Knix

답변

1

, 당신의 for 루프를 건너 뛸 수있는 유일한 이유는 경우 $end <= $start입니다.

난 당신이

for my $i ($start .. $end-1) 

for 루프를 변경 제안하고 즉시이

warn "Line being skipped: $start ... $end" if $end <= $start 

당신이 당신의 잘못된 데이터를 볼 수 있습니다 그 방법을 쓰기 이전.

관련 문제