вывод функции

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

вывод функции

Непрочитанное сообщение ProFTP » 2009-01-23 21:16:26

вообщем странный кол нашелЮ очень часто идеи такое:

Код: Выделить всё

read( $file, $buf, $r );
read( $file, $buf, $r );
read( $file, $buf, $r );
$oc = tell( $file );
куда записывается вывод певрй функции?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: вывод функции

Непрочитанное сообщение zg » 2009-01-23 23:06:18

Код: Выделить всё

     ssize_t
     read(int d, void *buf, size_t nbytes);

DESCRIPTION
     The read() system call attempts to read nbytes of data from the object
     referenced by the descriptor d into the buffer pointed to by buf.

RETURN VALUES
     If successful, the number of bytes actually read is returned.  Upon read-
     ing end-of-file, zero is returned.  Otherwise, a -1 is returned and the
     global variable errno is set to indicate the error.
man 2 read

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: вывод функции

Непрочитанное сообщение ProFTP » 2009-01-23 23:18:08

подожди, а что должно быть? я вижу что оно возвращает 0 или -1

а если 2 функции в подрят, то что тогда? смысла не пойму?

в данном коде который я показал роль играет только последняя функция, а предыдущие на всякий случай?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: вывод функции

Непрочитанное сообщение hizel » 2009-01-24 0:10:14

да тупняк, пропускает какуюто часть, нет чтобы seek сделать :no:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: вывод функции

Непрочитанное сообщение Syward » 2009-01-24 1:17:22

ProFTP писал(а):вообщем странный кол нашелЮ очень часто идеи такое:

Код: Выделить всё

read( $file, $buf, $r );
read( $file, $buf, $r );
read( $file, $buf, $r );
$oc = tell( $file );
куда записывается вывод певрй функции?
По логике - никуда:
читаем раз - всосали
читаем два - уже было - всосали заново
читаем три - всосали еще раз в переменную - обозначили $oc - вывели.
ЗЫ. в перле не уверен (может оно каждый вывод пишет куда-нить), но в пыхе отработало бы только последнее условие...
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: вывод функции

Непрочитанное сообщение ProFTP » 2009-01-24 8:44:09

вот эта функцию

Код: Выделить всё

sub rec_shift {
my( $file, $dir ) = @_;
my( $buf, $ofs );
while( 1 ) {
$ofs = tell( $file );
if( !$dir ) {
read( $file, $buf, $read_block_size );
my $o = index( $buf, "\x0a" );
if( $o >= 0 ) {
seek( $file, $ofs + $o + 1, 0 );
return;
} elsif( eof( $file ) ) {
return;
}
} else {
my $r = $ofs > $read_block_size ? $read_block_size : $ofs;
seek( $file, -$r, 1 );
read( $file, $buf, $r );
seek( $file, -$r, 1 );
my $o = rindex( $buf, "\x0a" );
if( $o >= 0 ) {
seek( $file, $o + 1, 1 );
return;
} elsif( $r == $ofs ) {
seek( $file, 0, 0 );
return;
}
}
}
}
что return выводит?

чтобы много не писать, вот кусок функции как она вызывается:

Код: Выделить всё

seek( $file, $oc, 0 );
rec_shift( $file, 1 );
$oc = tell( $file );
и куда она записывается

или полностью пример привести, просто не в тему будет,ну вот полностью:

Код: Выделить всё

#!/usr/bin/perl -w
my $read_block_size = 256;
sub rec_shift {
my( $file, $dir ) = @_;
my( $buf, $ofs );
while( 1 ) {
$ofs = tell( $file );
if( !$dir ) {
read( $file, $buf, $read_block_size );
my $o = index( $buf, "\x0a" );
if( $o >= 0 ) {
seek( $file, $ofs + $o + 1, 0 );
return;
} elsif( eof( $file ) ) {
return;
}
} else {
my $r = $ofs > $read_block_size ? $read_block_size : $ofs;
seek( $file, -$r, 1 );
read( $file, $buf, $r );
seek( $file, -$r, 1 );
my $o = rindex( $buf, "\x0a" );
if( $o >= 0 ) {
seek( $file, $o + 1, 1 );
return;
} elsif( $r == $ofs ) {
seek( $file, 0, 0 );
return;
}
}
}
}
sub rec_read {
my( $file ) = @_;
my $ln = '';
my $buf;
while( 1 ) {
my $ofs = tell( $file );
read( $file, $buf, $read_block_size );
my $o = index( $buf, "\x0a" );
if( $o >= 0 ) {
seek( $file, $ofs + $o + 1, 0 );
$ln .= substr( $buf, 0, $o );
return split( /\t/, $ln );
}
$ln .= $buf;
}
}
sub filebinsearch {
my( $file, $fkey, $beg, $end ) = @_;
return undef if $beg == $end;
my $oc = int( ( $beg + $end ) / 2 ); # ( $beg + $end ) >> 1 -- 32bit :-(
seek( $file, $oc, 0 );
rec_shift( $file, 1 );
$oc = tell( $file );
my( $key, $value ) = rec_read( $file );
return $value if $key eq $fkey;
if( $key lt $fkey ) {
filebinsearch( $file, $fkey, tell( $file ), $end );
} else {
filebinsearch( $file, $fkey, $beg, $oc );
}
}
sub findinfile {
my( $filename, $key ) = @_;
my $value = undef;
my $filesize = 0;
return undef if !-f $filename;
return undef if !-r $filename;
return undef if !($filesize = -s $filename);
return undef if !open( $file, '<', $filename );
return filebinsearch( $file, $key, 0, $filesize );
}
print findinfile( $ARGV[0], $ARGV[1] ) . "\n";
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: вывод функции

Непрочитанное сообщение ProFTP » 2009-01-26 10:30:52

:shock:
оказывается что эту функцию можно написать, так:

Код: Выделить всё

perl -MData::Dumper -0x0a -lne '%hash = ( %hash, split "\t" ); END { print Dumper \%hash }' file 
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение