LINUX.ORG.RU
ФорумTalks

[вещества][мерится]Быдлокод или сделанно через одно место

 


0

0

Давайте, что ли, смеху ради, постить примеры собственного кода,
 где нечто сделано через известное место. 

Например сей код на awk считает checksum для eep фала:


{for (i = 1; i <= NF; i++) $i = 0 - $i}
{result = 0}
{for (i = 1; i <= NF; i++) result += $i}
{printf "%2X\n", result}

Используется как то так :

 CKSM=$(echo "$1" | sed 's/../&; /g' | sed 's/^/ibase=16; /' | bc -l | tr "\n" " " | awk -f chksum.awk | cut -b 15-

З.Ы. Я сам, когда увидел - несколько охренел. Интересно, что я тогда
 курил?

сейчас этого куска нет, раньше в одной утилитки получал время от date, исходники на Си были.

phasma ★☆
()
Ответ на: комментарий от amoralyrr

> в смысле через шелл? 0o

ну да, я тогда еще от наркоза не совсем отошел :)

phasma ★☆
()

#!/usr/bin/perl -w

use strict;
use Net::FTP;
use IPC::Open2;

our ($ftp);
our $host = '192.168.0.15';

our $spam_dir = 'spam';
our $ham_dir = 'ham';
our $local_d = '/tmp/sa_work';

#our $sa_learn = `which sa-learn`;
#chomp($sa_learn);
our $sa_learn = '/usr/local/bin/sa-learn';


sub connec_n {
$ftp = Net::FTP->new("$host", Debug => 0,Timeout => '20') or die "Cannot connect to $host: $@";

$ftp->login("ftp",'anonymous') or die "Cannot login ", $ftp->message;
$ftp->pasv;
}


EX_CODE: {
unless (-f "$local_d") {
mkdir("$local_d");
}
unless (-f "$local_d/$spam_dir") {
mkdir ("$local_d/$spam_dir");
}
unless (-f "$local_d/$ham_dir") {
mkdir ("$local_d/$ham_dir");
}
}

# step 1 spam
SPAM_CODE: {
&connec_n;
$ftp->cwd("/$spam_dir") or redo SPAM_CODE;
chdir ("$local_d/$spam_dir");
my @files = $ftp->ls();
foreach my $i (@files) {
$ftp->get("/${spam_dir}/$i") or redo SPAM_CODE;
$ftp->delete("/${spam_dir}/$i");
}
}

# step 2 ham
HAM_CODE: {
&connec_n;
$ftp->cwd("/$ham_dir") or redo HAM_CODE;
chdir ("$local_d/$ham_dir");
my @files = $ftp->ls();
foreach my $i (@files) {
$ftp->get("/${ham_dir}/$i") or redo HAM_CODE;
$ftp->delete("/${ham_dir}/$i");
}
}

$ftp->quit;

system("exec $sa_learn --spam ${local_d}/${spam_dir}");
system("exec $sa_learn --ham ${local_d}/${ham_dir}");

CLEAN_DIR: {
CLEAN_HAM: {
opendir(MDIR, "${local_d}/${spam_dir}") or die "can't opendir ${local_d}/${spam_dir}: $!";
my @files = grep { -f "${local_d}/${spam_dir}/$_" } readdir(MDIR);
closedir(MDIR);
next CLEAN_HAM if (($#files) < -1);
foreach my $i (@files) {
unlink ("${local_d}/${spam_dir}/$i") or warn "can't unlink ${local_d}/${spam_dir}/$i: $!\n";
}
}
CLEAN_SPAM: {
opendir(MDIR, "${local_d}/${ham_dir}") or die "can't opendir ${local_d}/${ham_dir}: $!";
my @files = grep { -f "${local_d}/${ham_dir}/$_" } readdir(MDIR);
closedir(MDIR);
next CLEAN_HAM if (($#files) < -1);
foreach my $i (@files) {
unlink ("${local_d}/${ham_dir}/$i") or warn "can't unlink ${local_d}/${ham_dir}/$i: $!\n";
}
}
rmdir("${local_d}/${spam_dir}");
rmdir("${local_d}/${ham_dir}");
rmdir("$local_d");
}

paranormal ★★
()
Ответ на: комментарий от paranormal

Скрипт недоделанный и кривой, :)

Метки пришлось реализовывать, так как, IIS с которого я тянул спам, - рвал соединение произвольным образом...

paranormal ★★
()

Было впадлу курить доки как правильно получить размер файла, пошел извращенным путем 8)

int file_GetSize( void* FileHandle )
{
int i, tmp;
tmp = ftell( FileHandle );
fseek( FileHandle, 0, SEEK_END );
i = ftell( FileHandle );
fseek( FileHandle, tmp, SEEK_SET );
return i;
}

ЗЫ: или таки другого способа нет? %)

Andru ★★★★
()
Ответ на: комментарий от Andru

можно ещё более извращённым способом. Через шелл и du. %)

amoralyrr ★☆
()
Ответ на: комментарий от Andru

Вроде никак, без знания особенностей ОС и ФС.

Xellos ★★★★★
()

В моей программе предшественник определял пересечение двух отрезков. Отрезки могди быть 8 различных направлений (кратно 45 градусам). Так он все 8х8 вариантов расписал руками. Разумеется, из 64 случаяев два содержали ошибку. Постить не буду - пожалею сервер.

Beria1937
()

Когда не знал о date +%d%m%y -d yesterday предыдущую дату получал так:

DAY=`date +%d`
MONTH=`date +%m`
YEAR=`date +%Y`

if [ "$MONTH" -eq "1" ]
	then
		if [ "$DAY" -eq "1" ]
			then LASTYEAR=`expr $YEAR - 1`
			else LASTYEAR="$YEAR"
		fi
	else LASTYEAR="$YEAR"
fi

case $YEAR in
2007) LONGYEAR="NO"
;;
2008) LONGYEAR="YES"
;;
2009) LONGYEAR="NO"
;;
2010) LONGYEAR="NO"
;;
2011) LONGYEAR="NO"
;;
2012) LONGYEAR="YES"
;;
2013) LONGYEAR="NO"
;;
2014) LONGYEAR="NO"
;;
2015) LONGYEAR="NO"
;;
2016) LONGYEAR="YES"
;;
2017) LONGYEAR="NO"
;;
2018) LONGYEAR="NO"
;;
2019) LONGYEAR="NO"
;;
2020) LONGYEAR="YES"
;;
esac

if [ "$DAY" -eq "1" ]
	then
		if [ "$MONTH" -ne "1" ]
			then LASTMONTH=`expr $MONTH - 1`
			else LASTMONTH="12"
		fi
	else LASTMONTH="$MONTH"
fi

case $LASTMONTH in
[0-9]) LASTMONTH="0$LASTMONTH"
;;
esac

if [ "$DAY" -eq "1" ]
	then
		case $LASTMONTH in
		01) LASTDAY="31"
		;;
		02)	if [ "$LONGYEAR" = "NO" ] 
				then LASTDAY="28"
				else LASTDAY="29"
			fi
		;;
		03) LASTDAY="31"
		;;
		04) LASTDAY="30"
		;;
		05) LASTDAY="31"
		;;
		06) LASTDAY="30"
		;;
		07) LASTDAY="31"
		;;
		08) LASTDAY="31"
		;;
		09) LASTDAY="30"
		;;
		10) LASTDAY="31"
		;;
		11) LASTDAY="30"
		;;
		12) LASTDAY="31"
		;;
		esac
	else LASTDAY=`expr $DAY - 1`
fi

case $LASTDAY in
?) LASTDAY="0$LASTDAY"
;;
esac

o2inhal
()
Ответ на: комментарий от Andru

Мне почти так пришлось читать файл из каталога /proc : там у всех файлов size==0 . stat возвращал 0

KUser
()

Вычисление факториала на dc:

[d 1 - d 1 <f *] sf

пример использования:

5 lf x p 
c

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.