Forum Webscript.Ru
Программирование => Perl => Тема начата: nobody от 12 Сентября 2001, 19:25:52
-
Народ помогите я уже совсем запарился:
1 Нужно прочитать файлу построчно...
2 Потом найти строки удовлетворяющие одвум или более параметров
3 Записать в переменную все эти строки
Ну вроде и все...
:confused: :confused:
Помогите плиз...
А затем разобрать каждую строкус разделителем \'>>\' на слова и вывести в HTML форму :rolleyes:
-
в чем затруднение или ты хош чтоб за тебя это все написали?
-
http://www.webscript.ru/stories/01/03/12/7989628
http://www.webscript.ru/stories/01/03/12/1019777
-
Да не, за меня писать ненадо... :D Я уже сам решил проблему, :o у меня теперь новая - мне нужно создать временный файл из которого потом можно было бы прочитать построчно, а после его закрытия он удалялся (при нормальном и сбойном завершение программы)
А да у меня еще после заполнения формы новая страница не открываеться а появляеться на той же странице что и форма, только сверху.:eek:
-
Нефига не понял :confused:
-
Какая именно часть моей писанины тебе непонятна?:D
-
Ты код сюда пиши, понятней будет о чем разговариваем.
-
Если бы я знал код я бы неспрашивал....:cool:
-
: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:
-
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);
Опиши свою программу. Для чего она? Что это?
Мне кажеться, что все можно сделать намного проще;)
-
#!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/</g;
$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;
};
};;)
-
Файл конфигураций можно подключать так:
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\' отдельно, а после проверки включать его в основной код.
-
Она рабочая, там только есть пара маленьких глюков и все....
Например когда нажимаешь субмит в форме, то она не открывает HTML с отчетом, а выводит его наверх...
http://www.razgulay.ru/cgi/leaze/info.pl :confused: Вот где этот глюк....
-
У меня getFORM выдает Internal Server Error.
Это означает, что твой скрипт не может получить и обработать переданные ему данные!
-
Но он ведь работает....:rolleyes:
-
Айм сори :) getFORM работает.
Программа твоя запутанная очень, много ненужных действий.
Да и я не супер-программер :), в чужом коде мне сложнее копаться, чем новый написать (я имею в виду скрипты по сложности типа твоего).
-
:p Вот сдесь гдето ошибка, ну я имею ввиду не открываеться номально страница результатов (смотри выше)
По коду ето гдето сдесь:o
open IN, $CFG{\'infohtml\'};
my @rhtml = ;
close IN;
foreach (@rhtml){
$_ =~ s//$raitr/g;
print $_;
};
};
:p Если не сдесь то весь текст чуть выше....
-
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
В принципе, могу усеченный вариант скрипта прислать для ознакомления (есть и перл и пхп, одинаковые по работе).
-
Конечно давай...
И если можешь скажи что там урезано.....