Forum Webscript.Ru

Программирование => Perl => Тема начата: nobody от 12 Сентября 2001, 19:25:52

Название: Помогите плиzzzzzz....
Отправлено: nobody от 12 Сентября 2001, 19:25:52
Народ помогите я уже совсем запарился:
1 Нужно прочитать файлу построчно...
2 Потом найти строки удовлетворяющие одвум или более параметров
3 Записать в переменную все эти строки
Ну вроде и все...
:confused: :confused:
Помогите плиз...
А затем разобрать каждую строкус разделителем \'>>\' на слова и вывести в HTML форму :rolleyes:
Название: Помогите плиzzzzzz....
Отправлено: AliMamed от 12 Сентября 2001, 23:35:14
в чем затруднение или ты хош чтоб за тебя это все написали?
Название: Помогите плиzzzzzz....
Отправлено: lodevar от 13 Сентября 2001, 09:31:08
http://www.webscript.ru/stories/01/03/12/7989628
http://www.webscript.ru/stories/01/03/12/1019777
Название: Да не ненадо
Отправлено: nobody от 13 Сентября 2001, 17:27:00
Да не, за меня писать ненадо... :D Я уже сам решил проблему, :o у меня теперь новая - мне нужно создать временный файл из которого потом можно было бы прочитать построчно, а после его закрытия он удалялся (при нормальном и сбойном завершение программы)
А да у меня еще после заполнения формы новая страница не открываеться а появляеться на той же странице что и форма, только сверху.:eek:
Название: Помогите плиzzzzzz....
Отправлено: Ilya от 13 Сентября 2001, 17:33:01
Нефига не понял :confused:
Название: Вроде понятно пишу...
Отправлено: nobody от 13 Сентября 2001, 17:35:14
Какая именно часть моей писанины тебе непонятна?:D
Название: Помогите плиzzzzzz....
Отправлено: Ilya от 13 Сентября 2001, 18:02:30
Ты код сюда пиши, понятней будет о чем разговариваем.
Название: Хмммм....
Отправлено: nobody от 13 Сентября 2001, 23:26:00
Если бы я знал код я бы неспрашивал....:cool:
Название: Вот вам и код.....
Отправлено: nobody от 14 Сентября 2001, 08:52:41
:D
open IN,">new.lst";
@wrmess = ;
print IN $test;
close IN;
   
    open IN, "new.lst";
    my @mess=$test;
    my @mess=;
   close IN;

во вот вместо этого new.lst должен быть временный файл, который потом откроеться. А когда с ним закончат работать или будет прервана работа он удалялься . Да имя у него далжно быть уникальным  :mad:
Название: Re: Вот вам и код.....
Отправлено: Ilya от 14 Сентября 2001, 12:23:34
open (IN,">new.lst");
@wrmess = ; # Не получится, файл открыт только для записи, вернее для перезаписи.
print IN $test; # Заменяешь содержимое файла на $test
close IN;

# Теперь ты имеешь файл в котором находится содержимое $test и пустой масив @wrmess

open (IN, "new.lst");
my @mess=$test; # Зачем это :confused:
my @mess=; # В @mess содержимое твоего файла
close IN;

# Теперь ты имеешь:
Пустой масив @wrmess
Переменную $test
Файл в котором хранится переменная $test

Короче, ты сделал вот это:

@mess = $test;
open (IN,">new.lst");
print IN $test;
close(IN);

Опиши свою программу. Для чего она? Что это?
Мне кажеться, что все можно сделать намного проще;)
Название: вот тебе и сома программа...
Отправлено: nobody от 14 Сентября 2001, 14:13:20
#!c:/usr/local/bin/bin/perl.exe
###########################
# Аренда v1.0b            #
# Copyright 2001, nobody  #
# contacts:               #
#   meni@mail.ru          #
#   ICQ 71461805          #
###########################
print "Content-Type: text/html\\nPragma: no-cache\\nExpires: Tue, 1 Jan 1980 00:00:00 GMT\\n\\n";
print "\\n";
$config="conf";
&ReadCfg;
&getFORM;
&Check;

($bpath,$_) = split(/;/,$CFG{\'bpath\'});

&Step1 if $FORM{\'ac\'} eq \'s1\';
&Search;

sub Search{
   open IN, $CFG{\'search1htm\'};
    print ;
    close IN;
};
 
sub CheckForm{
   my $serr=$CFG{\'joinwrong\'};
  my @swr=split(/->/,$CFG{\'searchwrongwords\'});
  $serr = $serr . " @swr[0] " if $FORM{\'OP\'} eq \'\';
  $serr = $serr . " @swr[1] " if $FORM{\'WHAT\'} eq \'\';
  $serr = $serr . " @swr[2] " if $FORM{\'REGION\'} eq \'\';
  $serr = $serr . " @swr[3] " if $FORM{\'PRICE_1\'} eq \'\';
  if($serr ne $CFG{\'joinwrong\'}){
     undef $/;
    open cfIN, $CFG{\'search1htm\'};
    my $mess = ;
    close cfIN;
     $/="\\n";
    $mess =~ s//$serr/g;
    foreach $i (keys %FORM){
      $mess =~ s/>/ value="$FORM{$i}">/g;
    };
    print $mess;
    exit;
  }
};
sub Step1{
   &CheckForm;
   open IN,$CFG{\'infosd\'};
    while(){
   foreach $pole ($_){
     $test .= $pole if ($pole =~ /$FORM{\'OP\'}/) && ($pole =~ /$FORM{\'WHAT\'}/);
   }
   }
   close (IN);
open IN,">new.lst";
@wrmess = ;
print IN $test;
close IN;
   
    open IN, "new.lst";
    my @mess=$test;
   my @mess=;
   close IN;
      foreach (@mess){
    $spl = $CFG{\'inforec\'};
      ($mrOP, $mrWHAT, $mrREGION, $mrTD, $mrADRES, $mrN_D, $mrK_D, $mrNKOM, $mrKOM, $mrET, $mrW_ET, $mrS, $mrKH, $mrMETRES, $mrTEL, $mrLIFT, $mrBAL, $mrGW, $mrSAN, $mrSTRADDR, $mrWISH, $mrNOTE, $mrPRICE, $mrSUBJ, $mrPHONE, $mrid) = split (/>>/, $_);
    $spl =~ s/--OP--/$mrOP/g;
   $spl =~ s/--WHAT--/$mrWHAT/g;
    $spl =~ s/--REGION--/$mrREGION/g;
    $spl =~ s/--TD--/$mrTD/g;
    $spl =~ s/--ADRES--/$mrADRES/g;
   $spl =~ s/--N_D--/$mrN_D/g;
    $spl =~ s/--K_D--/$mrK_D/g;
    $spl =~ s/--NKOM--/$mrNKOM/g;
    $spl =~ s/--KOM--/$mrKOM/g;
    $spl =~ s/--ET--/$mrET/g;
    $spl =~ s/--W_ET--/$mrW_ET/g;
    $spl =~ s/--S--/$mrS/g;
    $spl =~ s/--KH--/$mrKH/g;
    $spl =~ s/--METRES--/$mrMETRES/g;
    $spl =~ s/--TEL--/$mrTEL/g;
    $spl =~ s/--LIFT--/$mrLIFT/g;
    $spl =~ s/--BAL--/$mrBAL/g;
    $spl =~ s/--GW--/$mrGW/g;
    $spl =~ s/--SAN--/$mrSAN/g;
    $spl =~ s/--STRADDR--/$mrSTRADDR/g;
    $spl =~ s/--WISH--/$mrWISH/g;
    $spl =~ s/--NOTE--/$mrNOTE/g;
    $spl =~ s/--PRICE--/$mrPRICE/g;
    $spl =~ s/--SUBJ--/$mrSUBJ/g;
    $spl =~ s/--PHONE--/$mrPHONE/g;
    $spl =~ s/--id--/$mrid/g;
    $raitr = $raitr . $spl;
};
 
  open IN, $CFG{\'infohtml\'};
  my @rhtml = ;
  close IN;
  foreach (@rhtml){
    $_ =~ s//$raitr/g;
    print $_;
  };
};

sub Check {
  my ($i);
  foreach $i (keys %FORM){
   if ($i ne \'password\'){
    $FORM{$i} =~ s/    $FORM{$i} =~ s/>/>/g;
    $FORM{$i} =~ s/\\n//g;
   }
  }
}

sub ReadCfg {
  my (@cfg, $cfg);
  open IN, $config || die "trouble open $config";
  @cfg=;
  close IN;
  foreach $cfg (@cfg){
    if (substr($cfg,0,1) ne \'#\') {
      chomp ($cfg);
      ($name,$value) = split(/=/,$cfg,2);
      $CFG{$name}=$value;
    }
  }
};

sub getFORM {
   read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
   if (length($ENV{\'QUERY_STRING\'})>0) {$buffer = $buffer . "&". $ENV{\'QUERY_STRING\'} };
  @pairs = split(/&/, $buffer);
 
  foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $FORM{$name} = $value;
  };
};;)
Название: Помогите плиzzzzzz....
Отправлено: Ilya от 14 Сентября 2001, 15:00:33
Файл конфигураций можно подключать так:
require "conf";

в sub getFORM замени на это, работать лучше будет ;)
------------------------------------------------
read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $name =~ tr/+/ /;
   $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $name =~ s///g;
   $name =~ s/<([^>]|\\n)*>//g;
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ s///g;
   $value =~ s/<([^>]|\\n)*>//g;
   $FORM{$name} = $value;}
$act = $FORM{act};
------------------------------------------------

Она у тебя кроме Internal Server Error что-нибудь покзывала?
Попробй писать каждый \'sub\' отдельно, а после проверки включать его в основной код.
Название: Она вроде как работает....
Отправлено: nobody от 14 Сентября 2001, 15:23:06
Она рабочая, там только есть пара маленьких глюков и все....
Например когда нажимаешь субмит в форме, то она не открывает HTML с отчетом, а выводит его наверх...
http://www.razgulay.ru/cgi/leaze/info.pl :confused: Вот где этот глюк....
Название: Помогите плиzzzzzz....
Отправлено: Ilya от 14 Сентября 2001, 16:48:11
У меня getFORM выдает Internal Server Error.
Это означает, что твой скрипт не может получить и обработать переданные ему данные!
Название: Странно
Отправлено: nobody от 14 Сентября 2001, 17:16:46
Но он ведь работает....:rolleyes:
Название: Помогите плиzzzzzz....
Отправлено: Ilya от 14 Сентября 2001, 17:59:59
Айм сори :) getFORM работает.
Программа твоя запутанная очень, много ненужных действий.
Да и я не супер-программер :), в чужом коде мне сложнее копаться, чем новый написать (я имею в виду скрипты по сложности типа твоего).
Название: еще чуть-чуть....
Отправлено: nobody от 14 Сентября 2001, 18:26:15
:p Вот сдесь гдето ошибка, ну я имею ввиду не открываеться номально страница результатов (смотри выше)
По коду ето гдето сдесь:o

open IN, $CFG{\'infohtml\'};
my @rhtml = ;
close IN;
foreach (@rhtml){
$_ =~ s//$raitr/g;
print $_;
};
};

:p Если не сдесь то весь текст чуть выше....
Название: Помогите плиzzzzzz....
Отправлено: Realtor from Moscow от 14 Сентября 2001, 23:25:09
2nobody: Какой-то фигней страдаешь :p

Лучше почитай книжек по mysql и жизнь будет проще;)

Посмотри у меня аренду и просто квартирную базу. В аренде около 8000 вариантов, в квартирах под 25000. Представь себе, как у тебя все будет тормозить при таком объеме :)

http://www.kbaptupa.ru/cgi-bin/mybase/arenda.pl
http://www.kbaptupa.ru/cgi-bin/mybase/formsearch.pl?type=flat


В принципе, могу усеченный вариант скрипта прислать для ознакомления (есть и перл и пхп, одинаковые по работе).
Название: А чо молчишь....
Отправлено: nobody от 14 Сентября 2001, 23:35:42
Конечно давай...

И если можешь скажи что там урезано.....