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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравнить содержание 2 файлов и записать в 3, help 
V
    Опции темы
LisaST
Дата 18.4.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите начинающему, что я делаю не верно, в 3 файл записывается только первая строка из первого и почему-то 5 раз


Код

open (INPUT, "test1.txt") or die  "cannot open file \n $!";
open (INPUTO, "test2.txt")or die  "cannot open file \n $!";
open (ERG,"> ausgabe.txt");
$w=<INPUT>;
$wo=<INPUTO>;
while (<INPUT>, <INPUTO>) {
if ($w eq $wo) {print ERG $w} 
if ($w ne $wo) {print "eine zeile in t2 ist nicht gleich"}};


 
PM MAIL   Вверх
nitr
Дата 18.4.2006, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 84



=) немецкий ? smile

Пример моего скрипта ;)
вот  один из первых моих скриптов smile (знающим не смеяться, это одна из первых прог smile и тем более без книжек )
Код
#!/usr/bin/perl
print "Comparing $ARGV[0] $ARGV[1]...\n";
if ($ARGV[0] && $ARGV[1])
{
  open(C1, $ARGV[0]);
  open(C2, $ARGV[1]);
  open(C3, ">result.txt");
  @f1=<C1>;
  @f2=<C2>;
  seek(C1, 0, 0);
  seek(C2, 0, 0);
  print C3 "\*length not\*\n" if(length("@f1") !=length("@f2"));
  while(($line1=<C1>) && ($line2=<C2>))  {
      $line_c++;
      $linem1=$line1;
      $linem2=$line2;
      $linem1=~s/(.)/unpack('H', $1).unpack('h', $1)/ge;
      $linem2=~s/(.)/unpack('H', $1).unpack('h', $1)/ge;
      if($linem1!=$linem2 || $linem1 ne $linem2) {
        print C3 "row$line_c \{\n";
        @a_line1=split("", $line1);
        @a_line2=split("", $line2);
        if(length($line1)==length($line2))  {
          for($i=1;$i<=length($line1);$i++)  {
            $a_l1 = substr($line1, $i, 1);
            $a_l2 = substr($line2, $i, 1);
            print C3 "\x09\'$a_l1\' <--> \'$a_l2\'\n" if($a_l1 != $a_l2 || $a_l1 ne $a_l2);
          }
        }
        else {
          if(length($line1)>=length($line2)) {
            $max_len = length($line1);
          }
          else {
            $max_len = length($line2);
          }
          for($i=1;$i<=$max_len;$i++)  {
            $a_l1 = substr($line1, $i, 1);
            $a_l2 = substr($line2, $i, 1);
            if(($a_l1 != $a_l2 || $a_l1 ne $a_l2))  {
              print C3 "\x09\'$a_l1\' <--> \'$a_l2\' - ".($i+1)." simbol\n";
              goto metka;
            }
          }
          metka:          
        }
        print C3 "-->$ARGV[0]:\n\x09$line1-->$ARGV[1]:\n\x09$line2\*\*\*\*\*\*\*\*\*\n\n";
      }
  }
  print C3 "\}";
  close(C1);
  close(C2);
  close(C3);
}
else {
   print 'Error! Input 2 files';
}
 
"косметики" не помешало бы ;) 

А так рекомендую модуль File::Compare (стандартный c Perl 5.8)
пример для тебя 
Код

#!/usr/bin/perl
use File::Compare;
use strict;

my $file1 = "test1.txt";
my $file2 = "test2.txt";
if (compare($file1, $file2)  == 0) {
    #если совпадает содержимое
}
else {
    #если нет
}


Если нужны подробности в различиях содержимого, то можно использовать модуль Text::Diff  

Это сообщение отредактировал(а) nitr - 18.4.2006, 01:42


--------------------
PM   Вверх
LisaST
Дата 18.4.2006, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



угу, немецкий smile
да, длинно, я несколько вещей не понимаю и не нашла в гугле, например знак <->?
Вообще, я думала, можно ли это сделать проще без @, ведь из файла HANDLE всегда читает построчно, т.е. сравнивать просто строчки?
То, в чем не разобралась? Знаю @array = unpack("C*", $string)
что обозначает в этом случе "H"?
Код

~s/(.)/unpack('H', $1).unpack('h', $1)/ge


Код

"\x09\'$a_l1\' <--> \'$a_l2\'\n" 



Код

"-->$ARGV[0]:\n\x09$line1-->$ARGV[1]:\n\x09$line2\*\*\*\*\*\*\*\*\*\n\n"
 
PM MAIL   Вверх
nitr
Дата 18.4.2006, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 84



Цитата
<-->

просто символы smile

H означает hex smile - шестнадцатеричная строка 
читать: perldoc perlfunc

Мой пример очень прост smile Его можно настолько модернизировать... что "аж жуть" ;)
Но зачем "велосипед"? Есть два модуля... очень даже неплохих ;) (см. выше)  

Это сообщение отредактировал(а) nitr - 18.4.2006, 02:23


--------------------
PM   Вверх
LisaST
Дата 18.4.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо за модули...это можно сказать моя первая программа, не считая каких-то мелочей,т.е. не удивляйтесь, если я что-то очень простое спрашиваю.  
PM MAIL   Вверх
nitr
Дата 18.4.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 84



никто не удивляется, стараемся наоборот, помочь всем чем можем smile и некоторые даже рады тому, что помогли ;) 


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


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

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


 




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


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

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