ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

15.09.2007, 21:17
|
|
Новичок
Регистрация: 08.09.2007
Сообщений: 3
Провел на форуме: 10440
Репутация:
0
|
|
работа с файлами
Сорри за тупой вопрос. Нужно удалить из файла все строки, начинающиеся со "*". Делаю кривым путём
Код:
open (MYFILE, 'p.txt');
open(TEMP,'>>p~.txt');
while (<MYFILE>)
{
if ( substr($_, 0, 1) != "*")
{
chomp;
print TEMP "*".$_."\n";
}
}
close (MYFILE);
close(TEMP);
rename("p~.txt", "p.txt");
Файл становится пустым (p.txt). Хотя первый символ определяет правильно. Подскажите в чём прикол?
P.S. Я понимаю, что вся эта байда с двумя файлами вообще не нужна, но, по возможности, объясните в чём трабл, а не придумывайте простые решения. Заранее спасибо 
|
|
|

15.09.2007, 23:07
|
|
Banned
Регистрация: 12.01.2007
Сообщений: 113
Провел на форуме: 4094601
Репутация:
495
|
|
2 malamut
Код:
#!/usr/bin/perl -w
use strict;
use warnings;
use constant BACKUP_PREFIX => 'backup_';
use constant COMMENT => '\x2A';
use Getopt::Std;
my %options;
getopts( "f:" , \%options );
if( !exists $options{f} )
{
&usage;
}
else
{
my $m_file = $options{f};
&sort( $m_file );
}
sub sort
{
my $m_file = shift;
my $b_file = BACKUP_PREFIX."$m_file";
my $comment = COMMENT;
my @save = undef;
my @backup = undef;
open( my $file_m, "+<", $m_file ) || exit print "ERROR:Cant\'t open $m_file";
open( my $file_b, ">", $b_file ) ;
my $i = 0;
my $b = 0;
my $g = 0;
while( <$file_m> )
{
if( substr($_, 0, 1) =~/$comment/ )
{
$b++;
}
else
{
$save[$g] = $_;
$g++;
}
$backup[$i] = $_;
$i++;
}
foreach ( @save )
{
print $file_m "$_";
}
close( $file_m );
foreach ( @backup )
{
print $file_b "$_";
}
close( $file_b );
&stats( $i,$b,$g,$m_file,$b_file );
}
sub stats
{
my $comment = COMMENT ;
my( $all,$good,$bed,$file_m,$b_file ) = ( shift,shift,shift,shift,shift );
printf "\t In all the lines : %.3d \n".
"\t Lines Containing '%.4s' : %.3d \n".
"\t Lines not Containing '%.4s' : %.3d \n\n".
"\t Lines, Containing is stored in : %s \n".
"\t A back-up copy is stored in : %s \n",$all,$comment,$good,$comment,$bed,$file_m,$b_file ;
}
sub usage
{
print "\t Usage : $0 -f <file> \n".
"\t Example : $0 -f file.txt \n";
exit 1;
}
Мой файл : file.txt
Код:
*line1
line2
line3
*line4
запускаем : Статистика :
Код:
In all the lines : 005
Lines Containing '\x2A' : 002
Lines not Containing '\x2A' : 003
Lines, Containing is stored in : file.txt
A back-up copy is stored in : backup_file.txt
Смотрим файл:file.txt
бекап в файле backup_file.txt
Последний раз редактировалось demonoid; 20.09.2007 в 10:04..
|
|
|

15.09.2007, 23:09
|
|
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме: 6144796
Репутация:
1095
|
|
malamut
Код:
open (MYFILE, 'p.txt');
open(TEMP,'>>p~.txt');
while (<MYFILE>) {
print TEMP '*'.$_ if substr($_, 0, 1) ne '*'; ## тут надо использовать ne, т.к. строка
## как вариант можно использовать регексп:
## print TEMP '*'.$_ if not /^\*/;
## кстати незачем делать chomp, а затем снова добавлять перенос строки...
}
close (MYFILE);
close(TEMP);
rename('p~.txt', 'p.txt');
|
|
|

15.09.2007, 23:12
|
|
Новичок
Регистрация: 08.09.2007
Сообщений: 3
Провел на форуме: 10440
Репутация:
0
|
|
Всем спасибо, разобрался
|
|
|

16.09.2007, 01:42
|
|
Постоянный
Регистрация: 09.07.2006
Сообщений: 937
Провел на форуме: 1948091
Репутация:
1686
|
|
Код:
#!/usr/bin/perl -w
use strict;
# use File::Copy; ## это не нужно
my $num=0;
my $dir="/path/to/dir/";
opendir(DIR, $dir) or die $!;
my @files=readdir(DIR);
foreach my $file (@files) {
# $_ =~ m/([a-zA-Z])\d+?/g; # <= вот сдесь у меня проблема! ## про регексп я написал, исходя из того, что в дире с файлами, которые надо переименовать, могут находиться те, которые переименовывать не надо.. если это не так, то можно и без регулярного выражения обойтись.. но, допустим, файлы, которые надо переименовывать оканчиваются на 'JPG' (как у тебя написано), тогда мы переименовываем, проверяя на это:
rename $dir.$file, $dir.++$num.'.jpg' if $file =~ /JPG/; ## ну понятное дело ренейму надо знать в какой дире файлы эти лежат )
}
closedir(DIR);
использование strict; и как следствие my -- тут не совсем целесообразно тк скрипт маленький и я думаю имена всех переменных можно и самому запомнить - я это к тому чтобы новички не вбили себе что надо всегда юзать стрикт и все переменные объявлять через my - вот вообще никогда его не юзаю и пишу - нормально работающие скрипты -- тут есть выбор
|
|
|

16.09.2007, 02:44
|
|
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме: 6144796
Репутация:
1095
|
|
>> вот вообще никогда его не юзаю и пишу - нормально работающие скрипты
ну так ты серьезных скриптов никогда не писал.. :P
я согласен, что в небольших скриптах использование strict вовсе не обязательно, тем не менее как тока размер твоих скриптов начинает увеличиваться, начинает увеличиваться и количество ошибок, число которых strict помогает сократить.. имхо, новичкам как раз рекомендуется юзать strict..
кроме того, например, разработка веб-приложений под modperl, обязует программера использовать strict..
|
|
|

20.09.2007, 21:35
|
|
Новичок
Регистрация: 20.06.2007
Сообщений: 6
Провел на форуме: 29067
Репутация:
5
|
|
есть перл скрипт эксплоита для wordpress как его привести в рабочее положение,только если можно подробнее
|
|
|

20.09.2007, 21:40
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
perl mega_xek_0day_odept_ploet.pl
Вообще поиск по форуму рулит
|
|
|

22.09.2007, 18:43
|
|
Участник форума
Регистрация: 14.08.2007
Сообщений: 150
Провел на форуме: 686641
Репутация:
205
|
|
Помогите пожалуйста, можете сказать где здесь ошибка:
printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n",
|
|
|

22.09.2007, 18:51
|
|
Постоянный
Регистрация: 09.07.2006
Сообщений: 937
Провел на форуме: 1948091
Репутация:
1686
|
|
printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n"); мб так?
|
|
|
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Вопросы по Ipb 2.0
|
Voodoo_People |
Сценарии/CMF/СMS |
26 |
15.02.2005 22:57 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|