|
Тема |
Re: Perl problem za men [re: hipo] |
|
Автор |
pencho666 (от пенчево) |
|
Публикувано | 29.08.03 19:05 |
|
|
Проблема ти е елементарен. Затова започвам да обяснявам:
open ( FILE, 'temp.db' ) or die "Couldn't open file temp.db, $!";
binmode( FILE );
$AC=chr(0x3A).chr(0x22);
$/="$AC"; Тука казваш - като чета през стриим искам да се спира на 0x3A22
while ( <FILE> )
{
Тука (поради <FILE>) вече си прочел от файла байтове до първият 0x3A22
read( FILE, $header, 6 ); а тука четеш следващите 6, но има игра с буферирането на стриимовете, така че резултата не е много предвидим
@frame=split(//,$header);
print "@frame - $frame[5] \n" ; дъра-бъра
}
close FILE;
Какво трябва да направиш за да оправиш бъга:
Първи вариянт:
open ( FILE, 'temp.db' ) or die "Couldn't open file temp.db, $!";
binmode( FILE );
while ( !eof(FILE) )
{
read( FILE, $header, 6 ); @frame=split(//,$header);
print "\@frame - $frame[5] \n" ;
}
close FILE;
Втори вариянт:
open ( FILE, 'temp.db' ) or die "Couldn't open file temp.db, $!";
binmode( FILE );
$AC=chr(0x3A).chr(0x22);
$/="$AC";
while ( <FILE> )
{
@frame=split(//); print "\@frame - $frame[5] \n" ;
}
close FILE;
Трети вариянт, как бих го написал аз:
open(F,"temp.db"); ако си под Unix нямаш нужда от binmode
$/=chr(0x3A).chr(0x22);
printf "байт номер 5 от този ред е: %s\n",((split)[5]) while <F>;
close(F);
Ако разбира се трябва да вадиш всеки 5-ти пореден байт на всеки завършващ на $/ ред.
|
| |
|
|
|