IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Perl ? (https://www.imho.ws/showthread.php?t=45539)

MTop 09.12.2003 07:19

Perl ?
 
Есть задача:
имею два файла с разделителями ";" делаю следующюю обработку со вложенным поиском при этом вложеный поиск она обрабатывает а внешний не хочет.
=====
open outfile, "<C:/Perl/moduli/reestr/spisok1.txt" or die "не могу открыть\n" ;
open outfile2, "<C:/Perl/moduli/reestr/spisok2.txt" or die "не могу открыть\n" ;

foreach $item1 (<outfile>)
{
foreach $item2 (<outfile2>)
{
@array1=split(";",$item1);
@array2=split(";",$item2);
printf ("@array1[0]=@array2[0] \n");
if (@array1[0] eq @array2[0])
{
printf ("@array1[0]=@array2[0] \n");
}
}
}


У кого будут какие соображения. проблема проста но не могу ее решить.

Ghost 09.12.2003 08:13

Код:

open (FILE, "spisok1.txt");
my @indata1 = <FILE>;
close (FILE);
open (FILE, "spisok2.txt");
my @indata2 = <FILE>;
close (FILE);
my $i = 0;
foreach my $str1 (@indata1) {
  my @p1 = split (/;/, $str1);
  my $j = 0;
  foreach my $str2 (@indata2) {
    my @p2 = split (/;/, $str2);
    if ($p1[0] eq $p2[0]) {
      print "Line $i in File1 == Line $j in File2: $p1[0]\n";
    }
    $j++;
  }
  $i++;
}


MTop 09.12.2003 08:52

Хорошо! тогда следующий вопрос.
после проведения опытов выяснелось, что при втором вхождении список 2 уже кончился, и как возможно сделать повторное вхождение?

(понятно изъяснился)

Ghost 09.12.2003 09:00

Код:

open (FILE, "spisok1.txt");
my @indata1 = <FILE>;
close (FILE);
my $l1 = @indata1;
open (FILE, "spisok2.txt");
my @indata2 = <FILE>;
close (FILE);
my $l2 = @indata2;
for (my $i=0; $i<$l1; $i++) {
  my @p1 = split (/;/, $indata1[$i]);
  for (my $j=0; $j<$l2; $j++) {
    my @p2 = split (/;/, $indata2[$j]);
    if ($p1[0] eq $p2[0]) {
      print "Line $i in File1 == Line $j in File2: $p1[0]\n";
    }
  }
}


MTop 09.12.2003 10:04

Ну это ясно, а всетаки в чем ошибка в первом скрипте?

Ghost 09.12.2003 12:41

В ДНК. :) :) :) (это я шучу так)

Ошибка заключается в попытке циклического прохода файла - указатель сам по себе за здорово живешь на начало файла не перемещается. Вообще, при работе с файлами их нужно с перва считать в память, а потом уж обрабатывать.

MTop 10.12.2003 09:00

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

Ghost 10.12.2003 18:02

Active Perl.


Часовой пояс GMT +4, время: 19:46.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.