|
Тема
|
Perl problem za men
|
|
Автор | hipo (Нерегистриран) |
Публикувано | 06.08.03 00:00 |
|
Ucha se da pisha na perl i stignah do edna zadynena ulica. Ako moje nqkoi da mi pomogne shte sym mu blagodaren. Situaciqta e slednata. Otwarqm edin fail dwoichen. Smenqm razelitelq za zapisi i se mucha da obrabotq wseki zapis. Dobre, no problema e tam, che towa koeto sym napisal i tam kydeto izwejdam na ekrana, celiq masiv mi wadi che e s 6 elementa, kato dam da pokaje celiq masiv go pokazwa, no otdelnite elementi ne gi pokazwa. Molq wi kajete mi kade mi e problema. Eto go i source-a
open ( FILE, 'temp.db' ) or die "Couldn't open file temp.db, $!";
binmode( FILE );
$AC=chr(0x3A).chr(0x22);
$/="$AC";
while ( <FILE> )
{
read( FILE, $header, 6 );
@frame=split(//,$header);
print "@frame - $frame[5] \n" ;
}
close FILE;
| |
Тема
|
Re: Perl problem za men
[re: hipo]
|
|
Автор | hipo (Нерегистриран) |
Публикувано | 06.08.03 09:22 |
|
Ima i razwitie. Zabelqzah che mi pokazwa s $#frame, che ima 6 zapisa w masiwa. Kogato izwikam $frame[3] mi izliza posledniqt ot @frame? Zashto e taka? Sortira li si? ili kakwo stawa, kak da mahna towa sortirane, ako ima?
| |
Тема
|
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-ти пореден байт на всеки завършващ на $/ ред.
| |
|
|
|
|