Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2a вопроса, подсчет строк, работа с файломи.... 
:(
    Опции темы
DiverD
Дата 23.11.2005, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



(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;

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


Заранее благодарен:)
PM MAIL   Вверх
korob2001
Дата 23.11.2005, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Код

#!/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);


Это сообщение отредактировал(а) korob2001 - 23.11.2005, 21:19


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
DiverD
Дата 24.11.2005, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



zenx
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.