Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > 2a вопроса


Автор: DiverD 23.11.2005, 19:04
(1)
#####################
Почему такой результат и как его исправить:?
Мне нужн открыть файл подсчитать строки и запихачить их в хеш,а потом допустим между 3 и 4 вставить другую строкy.. (не пользуясь wc) ! Подскажите как???
заранее благодарен..!

#!/usr/bin/perl -W
my(%hesh,@array);
open FILE, '<', '1.txt'; #где содержит 8 строк
for ($i=0;<FILE>;$i++) {
$hesh{$i} = <FILE>;
}
close FILE;
print keys(%hesh),"\n";
print values(%hesh);
#result:
1302
anonimouse
end;root
syslogd
#1.txt
user
root
admin
anonimouse
ftp
syslogd
proxy
end;
#####################
(2)
Вот еще
#!/usr/bin/perl -W
my($file,@array);
@flist = ("p.txt","p2.txt");
foreach $file (@flist) {
open FILE, '<', $file;
while (<FILE>) {
push @array, $_ unless m/PERL/i;
}
close FILE;
open WFILE, '>', "$file";
print WFILE join "",@array;
close WFILE;
}
#result :
В 1й файл удаляет строку,а со 2го удаляет но добавляет остатки с 1го...
T.е. вот:

p.txt >result:>:
start;
stop;
p2.txt >result:>:
start;
stop; start;
stop;

Как поправить???


Заранее благодарен:)

Автор: korob2001 23.11.2005, 20:37
Код

#!/usr/bin/perl -w
use strict;
my $file = "$0";
my %hash = ();
my $count = 0;
# Строка которую нужно записать между 3 и 4 строками
my $str = "Эту строку мы вставили между третей и четвёртой";

open(F, "< $file") or die $!;
while( chomp($hash{++$count} = <F>) ) {
       if ( $count == 3 ) {
            $hash{++$count} = $str;
       }
}
close(F);

print "Всего строк: $count\n";

# Выводим содержимое файла, с уже вставленной строкой
foreach ( sort {$a <=> $b} keys %hash ) {
          print "String number: $_  => $hash{$_}\n";
}

Теперь мы имеем хеш, где номер строки это ключь, а сама строка - это значение. Только в данном примере, код открывает сам себя. Просто измени значение переменной $file.
А зачем тебе нужен хеш? Для этой задачи будет достаточно и просто массива.
Код

#!/usr/bin/perl -w
use strict;
my $file = "$0";
my @full_file = ();
# Строка которую нужно записать между 3 и 4 строками
my $str = "Эту строку мы вставили между третей и четвёртой";

open(F, "< $file") or die $!;
chomp( @full_file = <F> );
close(F);

# Вставляем нашу строку в третью позицию
splice( @full_file, 2, 0, $str );

print "Всего строк: " . scalar @full_file . "\n";

# Выводим содержимое файла, с уже вставленной строкой
print join("\n", @full_file);

Автор: DiverD 24.11.2005, 19:32
zenx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)