Автор Тема: Поиск, замена и сохранение результатов, НО...  (Прочитано 4510 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Здравствуйте!
Имеется файл, который я открываю, нахожу и "вырезаю" нужные строки и сохраняю эти строки в новом файле.
Подскажите, а как сохранить в новом файле не все найденные строки, а только скажем, первые пять?!

Спасибо.
Good Luck,
   Damon LSD.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск, замена и сохранение результатов, НО...
« Ответ #1 : 02 Февраля 2006, 20:17:12 »
вырезайте в массив первые 5 строк. или в хеш.
что-либо в роде for(1..5) { пишем в новый файл }
покажите эту часть кода:
Цитировать
DamonLSD:
"вырезаю" нужные строки и сохраняю эти строки в новом файле
пока-пока. :)

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Поиск, замена и сохранение результатов, НО...
« Ответ #2 : 02 Февраля 2006, 22:10:21 »
open(FILE,"$file") || print "Файл не найден!\\n";
@str=;
close FILE;
open(FILE,">$file");

for($i=0;$i<=$#{@str};$i++)
{

## если попадаются строки, содержащие " blabla XXX "
## то я их "вырезаю" из $file и сохраняю в файле tmp.txt
   if($str[$i]=~ / blabla XXX /)  {
   open (F813, ">>tmp.txt") || die print "Cannot open file: $!";
   print F813 "$str[$i]";
   close (F813);
   $str[$i]="";
   }

print FILE "$str[$i]";
}


close FILE;
close FILE;
Good Luck,
   Damon LSD.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск, замена и сохранение результатов, НО...
« Ответ #3 : 03 Февраля 2006, 14:25:46 »
самый простейший вариант, на основе вашего кода:
#!/usr/bin/perl -w
use strict;
my ($file,$destination,$k,@lines) = (\'../data/source.txt\',\'../data/destination.txt\',1,\'\');

print "\\n\\n";
open(FILE,"$file") || print "Файл не найден!\\n";
seek(FILE,0,0); my @str=<FILE>; close FILE;

open(FILE,">$file");
for(my $i=0;$i<=$#str;$i++) {
if($str[$i]=~ /blabla XXX/) {  if ($k<=5) {push @lines,$str[$i]; $k++} $str[$i]=""; }
print FILE $str[$i];
}
close FILE;

if(@lines) {
open (F813, ">>$destination") || die print "Cannot open file: $!";
print F813 @lines;
close (F813);
}

но вообще это не лучший вариант: смею надеяться, что у вас $file небольшого объёма и позволяет использовать @str=;
:)
пока-пока. :)

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Поиск, замена и сохранение результатов, НО...
« Ответ #4 : 03 Февраля 2006, 17:39:41 »
Спасибо! ... сейчас попробую
Good Luck,
   Damon LSD.

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Поиск, замена и сохранение результатов, НО...
« Ответ #5 : 03 Февраля 2006, 18:29:15 »
AnnA, спасибо тебе за подсказку ;) ... у меня заклинило, что надо через цикл делать, вот и не получалось.
Изменил свой код, смотри что получилось:

$cnt = 0;

open(FILE,"$file") || print "Файл не найден!\\n";
@str=;
close FILE;
open(FILE,">$file");
for($i=0;$i<=$#{@str};$i++)
{
## если попадаются строки, содержащие " blabla XXX "
## то я их "вырезаю" из $file и сохраняю в файле tmp.txt
if($str[$i]=~ / blabla XXX /)  {

   if ($cnt<=5) {

open (F813, ">>tmp.txt") || die print "Cannot open file: $!";
print F813 "$str[$i]";
close (F813);
$str[$i]="";

   }
   $cnt++;

}
print FILE "$str[$i]";
}
close FILE;
close FILE;


... все работает!
спасибо :)
Good Luck,
   Damon LSD.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск, замена и сохранение результатов, НО...
« Ответ #6 : 06 Февраля 2006, 12:36:33 »
на мой взгляд, когда "работает", важно еще и как работает.
зачем вы открываете/закрываете файл в режим дописывания 5 раз, когда это можно сделать 1 раз? :)
и в вашем варианте после 5-го раза найденный текст не обнуляется в исходном файле. так и нужно было?
Цитировать
DamonLSD:
close FILE; close FILE;
а это зачем? :)
пока-пока. :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28