Newsgroup: it.comp.lang.perl
Titolo: Archivio Dati

Una domandina.. avevo scritto in post precedenti che il programma che
avevo realizzato funzionava..mi ero fatta prendere troppo
dall'emozione!Purtroppo c'č qualcosa che non va.. ho provato di tutto..
ma ci deve essere un errore che non riesco ad individuare.
In pratica il programma mi realizza un archivio (arch.dat) in cui va a
memorizzare "soprannome"(info[0]), nome&cognome(info[1]) ed
email(info[2])..Attraverso un comando richiedo la visualizzazione
dell'archivio,e fin qui, tutto č ok!
Il problema nasce quando, attraverso la funzione elimina nominativo
dall'archivio, il programma dovrebbe effettuare una ricerca con il
"soprannome"..visualizzare solo la stringa relativa a quel soprannome ed
eliminarla..
while (<FILE>) {
  @info=split(/:/,$_);
if ($info[0]=~/$file/i) {
   print "\t$info[0]\t$info[1]\t$info[2]\n";
...
}
Ho notato che scomponendo e stampando singolarmente info0, info1 ed
info2 (con altrettante "print").. il programma non me le considera come
variabili separate..cioč, include tutta la stringa dati
(soprannome,nome&cognome,mail) "solo" nella var info[0].. mentre mi
considera nulle le altre due!!Come č possibile??
In teoria dovrebbe, sempre,andare ad attribuire ad:
info[0]--> soprannome;
info[1]--> nome e cognome;
info[3]--> mail;
..dov'č č l'errore?!
Grazie
Ciao 
Dany
(spero di essere stata chiara..:( )
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao Daniela,
ci mandi le routine che hai utilizzato per l'inserimento? Cercheremo di
aitarti...
Ciao,
Salvatore

Dopo la procedura di inserimento dati :
$sopr --> soprannome;
$noco --> nome&cognome;
$mail -->mail
inserisco i dati in archivio:
...
    open (FILE,">$DIREC\\arch.dat");
    print FILE ("$sopr:$noco:$mail\n");
...
Poi quando devo eliminare un nominativo:
- Inserisco il soprannome
- ("dovrebbe") ricerca nell arc.dat il soprannome :
         while (<FILE>) {
        @info=split(/:/,$_);
         if ($info[0]=~/$file/i) {
               print "\t$info[0]\t$info[1]\t$info[2]\n";
         .........
- Visualizzare la stringa trovata
- Chiedere conferma
- e poi eliminarla..
Il problema è che attribuisce ad "Info[0]" tutta la stringa di dati....
mentre le altre due sono nulle!


Ciao Daniela,
l'ho provato ora ed a me funziona!
Posta un pezzetto del tuo file arch.dat
molto probabilmente l'errore è o nel formato del file (quindi quando lo
scrivi) o nell'uso dello split (ma ti ripeto, a me ha funzionato)
Ciao,
Salvatore


Semplicemente perché non splitta la stringa... credo...
prova cosi':
          while (<FILE>) {
         @info=split(/\:/,$_);
          if ($info[0]=~/$file/ig) {
                print "\t$info[0]\t$info[1]\t$info[2]\n";
non si puo' mai sapere........
Ciao!

Allora.. sembra che tutto funzioni.. almeno spero!!è 0:54.. e sono un
po' fusa.. è tutto il pom che cercavo di capire dove stava l'errore!
In pratica il problema era... una "}" messa al posto sbagliato!!Ora va
alla perfezione..
Cmq, domattina.. riproverò!
Guido, nel caso.. proverò a seguire il tuo consiglio!
Grazie.. Grazie...Grazie.. ;)
Ciao
Baci
Dany


 @info=split(\:,$_);
Cosi' qui ottieni un bel syntax error...
-- 
Saluti,
Giancarlo

Ho riprovato a far funzionare il programma!il problema precedente sono
riuscita a risolverlo..
ma ne č nato uno nuovo..
Perchč non funziona questa routine??
In teoria, il programma dovrebbe leggere l'archivio base(arch.txt), e
visualizzare in un file.txt temporaneo, tutte le stringhe ad eccezione
di quella esclusa attraverso l'individuazione del soprannome (inserito
in precedenza, $file).
La routine funziona nell'individuazione delle altre stringhe, "ma"
quando deve andare a riportare in nuovo archivio nel file temporaneo
(prova.txt), non me le stampa!
Se invece elimino il "FILE2" nel "print".. e le visualizzo su schermo,
funziona!!
Perchč??
....
open (FILE,"<$DIREC\\FTL\\Ark\\arch.txt");
open (FILE2,">$DIREC\\FTL\\Ark\\prova.txt");
while (<FILE>) {
@info=split(/:/,$_);
unless ($info[0]=~/$file/i) { 
print  "$info[0]:$info[1]:$info[2]"; 
}
}
close(FILE);
close (FILE2);


 funziona!!
1) Hai provato a controllare che il file di scrittura sia effettivamente 
disponibile?
<code>
	open FILE,"$DIREC/FTL/Ark/arch.txt" or
	  die "$DIREC/FTL/Ark/arch.txt: $!";
	open FILE2,">$DIREC/FTL/Ark/prova.txt" or
	  die "$DIREC/FTL/Ark/prova.txt: $!";
	while(<FILE>) {
	  @info=split /:/;
	  print FILE2 "$info[0]:$info[1]:$info[2]" if $info[0]!~/$file/i
	}
	close FILE;
	close FILE2;
</code>
2) Sei sicura che la RE individui la stringa da te ricercata? Avevo 
visto che, suggerendoti /$file/ig, qualcosa era cambiato...
-- 
Baci,
Mony

 ha scritto nel messaggio
news:aaj53p$29uq$1...@stargate1.inet.it...


Mony.. tutto risolto!!! :)))
Ce l'ho fatta!!ora tutto funziona alla perfezione..l'ho anche
trasformato in eseguibile!
GRAZIE di nuovo a tutti x la disponibilitą!
A presto
Ciao Baci
Dany


 
Se devi modificare/aggiungere/togliere linee da un file di testo, ti
consiglio di utilizzare il modulo Tie::File, che ti permette di vedere un
file come un vettore di linee.
 
-- 
Leo TheHobbit  |   One Ring to rule them all.    |
IRCnet #roma2  |       One Ring to find them,    |
ICQ 56656060   |   One Ring to bring them all    |
               |   and in the darkness bind them |
               |      In the Land of Mordor      |
               |       where the Shadows lie.    |  p.d. Kal. Mai. MMDCCLV AUC

 perchè io ho scritto: @info=split(/\:/,$_);
Hai ragione, chiedo scusa.
-- 
Saluti,
Giancarlo