Newsgroup: it.comp.lang.perl
Titolo: Fine riga

come' la differenza che non mi permette di usare  :
$NumArray=$#entries0;
$riga=$ref->[$kk];
my $ref = \@entries0;
Forse una questione Win- Linux  vero?
Come dovrebbe essere il fine riga per funzionare?
Grazie

Come dovrebbe essere il fine riga per funzionare?
Se si riuscisse a capire che cosa c'entrano le righe nel codice che hai
postato.... a meno che non si tratti appunto delle righe che NON hai
postato.
Ciao.

 che cosa?
non o dimenticato nulla... se sai il significato di quel codice... chiedevo
perche' con certi array non funziona!
Siccome l'array in questione viene prelevato da un server  Win e siccome so
che ci sono differenze nel carattere di fine riga... pensavo fosse dovuto a
quello.
Cmq @entries0 e' un file di testo che io dovrei prendere una riga alla
volta... come faccio normalmnte sui miei file... ma su quello prelevato non
funziona!
Il file c'e' (se lo stampo tutto lo vedo) ma quando cerco di scorrere le
righe anche usando  foreach $riga(@entries)
mi riporta una sola riga e si ferma!
Ciao

mi riporta una sola riga e si ferma!
E allora probabilmente il problema non e` il fine riga, perche' dovrebbe
stamparti comunque tutto il file. Nell'array puo` anche esserci un solo
elemento ma se, come dici, E` un file di testo, in quell'elemento ci
dev'essere tutto il file.
Sicche', ripeto, invece di romperci la testa per tentare di capire quello
che non dici, posta quelle stramaledette righe che mancano, che vediamo
finalmente se possiamo aiutarti.
Ciao.

 finalmente se possiamo aiutarti.
ecco il file lo leggo cosi' :
////////////////////////////
use LWP::Simple;
    use URI::URL;
     $pagina = "www.xxx.xx";
     $url = url($pagina);
    @entries = get($url);
    $fileCZ="temp".rand();
    open (FC,">$fileCZ");  print FC @entries;  close  FC;#  queste prima
facevano funzionare il sistema
    open (FC,$fileCZ);  @entries0=<FC>;  close  FC;  #   ma ora non va
nemmeno cosi'!
    #  se lo stampo con print @entries0  lo vedo!
    $ref = \@entries0;
    $NumArray=$#entries0+1,$go= 0;
    for($kk=$go;$kk<$NumArray; $kk++)     {
       $riga=$ref->[$kk];
      .....#  in $riga non c'e' un tubo!
    }
ma non funziona nemmeno cosi:
 foreach $riga(@entries){
}
nel primo caso non vedo proprio nulla..
nel secondo solo la prima riga... ora non sono sicuro ma  come dici
probabilmente e' tutto su una riga...
//////////////////////
premesso che di Perl ne so ben poco... piu' che altro viaggio ad esempi
:)...
dunque generalmente il programma legge i file (  open (FC,$file);
@entries=<FC>;  close  FC; )
dal mio server migliaia di volte al giorno e funziona perfettamente!
Ma poi ho avuto necessita' di prenderli da un altro server nel modo indicato
sopra...  gia' prima non andava, allora ho aggiunto la scrittura del file
sul mio server che poi vado a rileggere... non so il perche' ma cmq aveva
sempre funzionato...  ora non mi funziona piu' nemmeno cosi'!
Mi spieghi cosa puo' essere se non il carattere di fine riga???
Ciao e grazie per l'interessamento :)

 ha scritto nel messaggio
news:0tac9.130955$lu5.3...@twister1.libero.it...


    @entries = get($url);
Quantunque la documentazione sia un po' risicata, io capisco che
LWP::Simple::get ritorni una stringa, non un array.
Se vuoi dividerlo in righe, dovrai fare uno split:
   $documento = get($url);
   @entries0 = split(/\n/, $documento);
Prova cosi' e poi magari vediamo se e' necessario anche aggiustare lo split
per la questione dei fine riga.
In alternativa, usa i metodi getprint o getstore.
Ciao.

 ha scritto nel messaggio
news:p686nu4lh591t66s9...@4ax.com...

non credo sia il caso di usare lo split, si tratta di files che possono
essere anche di un mega!
e nemmeno foreach  in quanto dovrei scorrerle tutte per prenderne magari
solo 10...
nessuno pero' mi ha ancora detto perche' prima funzionava e ora no, questo
e' il punto!...
Cmq ora mi sostituiscono \r con \n  nel file e vediamo, io dico che e'
quello.
Se "getprint getstore" ora  non dico nulla... non so a cosa servono.
Ps. scusami  l'email inviata per errore...
Ciao e grazie:)

 Forse è questo?
il primo caso non e' adatto, (vedi l'altra risposta) e il secondo  lo
provero'!
Ps join non lo mai usato, a cosa serve?
Ciao e grazie

    $fileCZ="temp".rand();
Ci sono modi un po' piu' ragionevoli e sicuri per creare un file
temporaneo. Dai un'occhiata al modulo File::Temp.
Ciao.

Se "getprint getstore" ora  non dico nulla... non so a cosa servono.
A fare con un comando solo quello che stai cercando di fare con 30 righe.
MA LA LEGGI LA DOCUMENTAZIONE??
   getstore($url, $file)
   Gets a document identified by a URL and stores it in the file. The
   return value is the HTTP response code. 
   getprint($url)
   Get and print a document identified by a URL. The document is printed
   to STDOUT as data is received from the network. If the request fails,
   then the status code and message are printed on STDERR. The return
   value is the HTTP response code. 
Ciao.

LWP::Simple::get ritorni una stringa, non un array.
In ogni caso, siamo sempre li': se l'assegni ad un array, dovresti avere
tutto il contenuto del file nel primo elemento dell'array. Se poi stampi
l'array su un file, dovresti avere tutto il contenuto dell'array (cioe', il
primo elemento, cioe' il file originale) sul nuovo file. Se quindi leggi il
nuovo file, dovresti avere il contenuto del nuovo file (questa volta diviso
in righe) nel nuovo array. Come che sia la questione dei fine riga, quando
stampi questo nuovo array dovresti di nuovo avere tutto il file originale
(al piu', tutto su una riga).
Una possibilita' e' che nel file originale ci sia qualche carattere di
controllo (un ^Z) che ferma la lettura del file. Prova a mettere un
  binmode FC;
dopo l'operazione di apertura.
Anche, prova a controllare che le operazioni che fai siano andate a buon
fine:
  ...
  $documento = get($url);
  die if (not defined($documento));
  ...
  open FC, ">$fileCZ" or die;
ecc.
Ciao.

 ha scritto nel messaggio
news:5eg6nuc4t42q9hp4i...@4ax.com...

si,si, il file viene scritto... tutto su una riga con un carattere
illeggibile tra quelle che dovrebbero essere le singole righe... binmode FC;
 il tizio dice che ci mette \r...   secondo me e' tutto li il prob. infatti
io uso \n e funziona perfettamente!... Sto aspettando che lo cambi... poi
vediamo.
Cmq facciamo un passo indietro... io ho un file che puo' essere piuttosto
grosso dovo leggere tot righe... e metterle in un array qual'e' secondo te
il modo piu' veloce e meno stressante per il server?
Io usavo il riferimento alla riga pensando che fosse meglio che scorrerle
tutte con un foreach, sbaglio?
Ciao grazie:)

    getprint($url)
non fa al caso mio, le righe le devo prima rielaborare... altrimenti mi
sarebbe bastato print @entries
grazie
ciao

tutte con un foreach, sbaglio?
Se conosci la riga (l'elemento) che ti interessa, certo che e` meglio
riferirla direttamente, invece che scorrere tutto l'array. Se, usando il
riferimento alla riga, comunque scorri tutto l'array, i due modi sono
esattamente equivalenti.
  print $array[10];
e` certamente piu` veloce che:
 
  foreach $riga (@array) {
    print $riga;
  }
Ma
  for ($n = 0; $n <= $#array; ++$n) {
     print $array[$n];
  }
e` esattamente uguale a:
  foreach $riga (@array) {
    print $riga;
  }
Delle due, c'e` caso che il secondo possa essere piu` efficiente.
Ciao.

non cambia nulla!
Be', cambia che ti stressi un bel po' di meno che a fare:
     $documento = get($url);
     open hFile, "un_file";
     print hFile, $documento;
     close hFile;
Inoltre, con un po' di fortuna, c'e` caso che getstore sia implementato
bene, cioe` in modo da tenere in memoria solo un bufferino di 1Kbyte alla
volta, e scriverlo subito su file. Sicche' risparmieresti l'occupazione di
memoria per il buffer temporaneo.
Ciao.

 Ciao.

 memoria per il buffer temporaneo.
grazie:)

allora ho gia'  provato e non funziona :-(
Non e' possibile. Se funziona cambiando \r in \n nel file, funziona anche
impostando $/ ad \r e non cambiando nulla nel file. Poi, se riesci a farti
scrivere i file come piace a te, e' senz'altro meglio (soprattutto se
questo fa lavorare un po' qualche mac-inista), ma questo e' un altro
discorso.
Ciao.

l'esempio nel problema LWP.
In ogni caso non c'e' differenza fra riferire un elemento di un array
direttamente tramite l'indice, o all'interno di un ciclo foreach, al di la'
dell'opportunita' di usare l'uno o l'altro metodo: non c'e' nessun motivo
perche' una cosa funzioni e l'altra no. Infatti il problema non era questo.
Ciao.

 Ciao.

puo' adattare!
Un modulo molto bello per fare questo genere di cose e` Tie::File.
Se ne e` parlato qui:
http://groups.google.com/groups?safe=images&ie=UTF-8&oe=UTF-8&as_umsgid=fPHk8.68843%24_u5.1976642%40news1.tin.it&lr=&hl=en
spero possa essere utile
ciao
Stefano

 spero possa essere utile
Se e' come sembra...enso proprio i si!!!!... Ora sono in emmergenzam, ma
appena risolvo.. credo che riscrivero' molti programmini basandomi su quel
modulo :)
Grazie!!!
Ciao

 file.
Si può fare con HTTP/1.1 (il reply del server è "206 Partial Content"), a
partire da un GET con il range field impostato.
La RFC è la 2616: 
 
http://www.w3.org/Protocols/rfc2616/rfc2616.html
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4