동적 레코드 길이 이진 파일을 읽으려고합니다.perl 스크립트의 성능
field1field2field3field4vector1vector2
지금 FIELD3 전직 FIELD3위한
은 & 2 본 것 vector1 후, 2 벡터의 선두로부터 정의 및 값이 3이면 & 3 vector1,2 것 아래 같은 데이터를 갖는다 선물.
나는 아래 코드를 작성했지만 잘 작동하지만 매우 나쁜 성능을 제공합니다.
는 field1-4 고정라고하자 길이는 2,652이며, 각 벡터의 길이는 301 FIELD3 내가 펄에 새로운 오전으로 2396
my $string;
my $rep_factor;
my $size;
open (FILE, $ARGV[0]) or die $!;
my $re = 2396;
my $rec = 0;
while (<FILE>) {
seek(FILE,$re,0);
read(FILE,$rep_factor,2);
my $rep_fact = undefined2defined(convert2ascii_decimal($rep_factor,0));
$size = ($rep_fact * 301) + 2652;
seek(FILE,$rec,0);
read FILE,$string,$size;
filewrite ($ARGV[1], recordparse($string));
$rec = $size + $rec;
$re = $size + 2396;
}
코드와 함께 도와주세요 위치에서 3 바이트이다 , 그리고 여기에 아무것도 생각할 수 없었다. 는 입력 레코드 분리의 값 (\n
-$/
보통 기본값) 또는 EOF를 발견 할 때까지
덕분에, 인 Ashish는
경우, [코드 검토 (하지를 HTTP : //codereview.stackexchange.com/)이 질문을 할 수있는 적절한 곳입니까? – Reti43
'언팩 '을 본 적이 있습니까? –
바이너리 형식을 읽으려면 [pack] (http://p3rl.org/pack)과 [unpack] (http://p3rl.org/unpack)이 보통 사용됩니다.'/'템플릿 문자를 확인하십시오. – choroba