Newsgroup: it.comp.lang.perl
Titolo: Selezione multipla di record su piu' campi

Ciao a tutti!
Ho un file che ha come record il seguente:
stringa1,stringa2,stringa3,stringa4,stringa5
Devo leggere il file partendo da una pagina HTML che ha 5 campi di
input che  operano sulle 5 stringhe del mio file, selezionando e
visualizzando sulla pagina html di risposta solo i record che
risolvono uno o piu' dei cinque campi. Il discorso vale anche se viene
fornita in input una stringa che poi si rivela essere contenuta in
quella del file. 
Per esempio, se fossero anagrafiche il mio file sarebbe:
Rossi,Mario,Via Milano,Torino,Italia
Bianchi,Luca,Via Mazzini,Milano,Italia
Verdi,Giovanni,Via Garibaldi,Milano,Italia
Io avro' sulla mia pagina html di input i campi:
Cognome
Nome
Via
Citta'
Nazione
Sulla base della valorizzazione di questi campi devo mostrare in
output in HTML i record che vengono selezionati. Per esempio posso
mettere Citta' = Milano come pure devo poter mettere Via = Mazz
Nel primo caso avrei come risposta i record 2 e 3. Nel secondo caso
deve rispondermi con il record 2 che contiene Mazz in Mazzini.
Tutto cio' devo prepararlo entro domani altrimenti mi becco una mega
cazziata dal mio capo.
Il problema e' che non so nemmeno da dove iniziare per fare una cosa
cosi' incasinata in cosi' poco tempo.
HEEEELLLPPP  :))

HEEEELLLPPP  :))
Eccotelo al volo, scritto ma non testato (BTW dovrebbe andare) e gira
anche sull'IIS di NT senza nessun modulo aggiunto.
Comunque un'altra volta ti becchi la lavata di testa, se non altro
perche' non ci hai detto su che sistema sei, che server Web usi e se
hai gia' installato il Perl ;-)
###############################################################
#### Etichette con lo stesso ordine del file dati #############
@labels= qw( Cognome Nome Via Citta Nazione );
#### Path per il file di testo con i dati comma delimited #####
$srcfile='C:/mypath/myfile.txt';
print "HTTP/1.0 200 OK\nContent-Type: text/html\n
<HEAD>
  <TITLE>prova</TITLE>
</HEAD>
<BODY BGCOLOR=\"#FFFFFF\">\n";
%FORM=FORM_POST();
open(ORIG,"<$srcfile");
while ($riga=<ORIG>) {
  $riga=~s/[\n\r]//g; # Non so se ne hai o meno...
  @dati=split(/,/,$riga);
  $vabene=0;
  foreach $label (@labels) {
    $dato=shift(@dati);
    $cfr=$FORM{$label};
    $vabene++ if $cfr && ($dato=~/$cfr/i) }
  print "\n$riga<BR>" if $vabene;
  }
close(ORIG);
print "</BODY></HTML>";
exit;
sub FORM_POST { my($pair);
  my (@pairs,$nome,$valore,%FORM);
  read(STDIN,$paur,$ENV{'CONTENT_LENGTH'});
  @pairs = split(/&/,$pair);
  if ($#pairs ne -1) {
    foreach $pair (@pairs) { ($nome,$valore) = split(/=/,$pair);
      $valore =~ s/%([a-zA-Z0-9][a-zA-Z0-9])/pack("C",hex($1))/eg;
      $valore =~ s/[\+\t\r\n]/ /g; $FORM{$nome} = $valore; } }
  return %FORM }
###############################################################
------
bale...@dada.it
 
http://zap.to/balestra
  ICQ#:14303012
" Ora mai che i baci tuoi piu' non mi sazian
  cerchero' un'altra donna dentro ai sogni di Tarzan... "

On Tue, 20 Jul 1999 11:10:46 GMT, 
bale...@antispam.dada.it
 (Marco
Balestra) wrote:
| print "HTTP/1.0 200 OK\nContent-Type: text/html\n
| <HEAD>
|   <TITLE>prova</TITLE>
| </HEAD>
| <BODY BGCOLOR=\"#FFFFFF\">\n";
evita le prime due virgolette in body oppure usa apici semplici per
raccogliere la print
Oha

raccogliere la print
In genere e' certamente buona norma, anche se in questo caso funziona
comunque (visto che le virgolette di colore le quoto con il \).


Prima di tutto grazie mille per il PRONTO INTERVENTO.
Ho copiato il tuo source modificando soltanto i  nomi dei campi e il
path del file.
In esecuzione mi da questi errori:
syntax error in file 
convenzioni.pl
 at line 3, next 2 tokens "qw("
syntax error in file 
convenzioni.pl
 at line 12, next 2 tokens
"FORM_POST("
syntax error in file 
convenzioni.pl
 at line 28, next 2 tokens "my("
A proposito: lo script gira sotto Perl 5.004 su una macchina BSD
(Unix).
L'ho provato sintatticamente facendo:
perl nomeprogramma

perl nomeprogramma
Devi usarlo come cgi, chiedi qui nel ng come impostare il tuo Web
Server (ancora non dici qual'e'...)


Grazie di tutto.
Ho dovuto apportare qualche modifica per adattarlo al mio scopo
specifico, ma mi sei stato di grandissimo aiuto.
Ciao