Newsgroup: it.comp.lang.visual-basic
Titolo: Lettura file txt

Buonasera, stavo facendo un programmino per la gestione dei numeri del 
lotto e quindi ho scaricato i file dello storico dal sito ufficiale 
lottomatica. La cosa strana è che se questo file lo apro con l'edit 
risulta ben formattato e con il carattere di spaziatura (tab) "pulito", 
mentre aprendolo con notepad è tutto scomposto. Salvando il file 
dall'edit, riaprendolo con notepad si formatta correttamente. Se il 
problema fosse solo questo, non mi interesserebbe più di tanto, ma 
l'inghippo me lo ritrovo quando lo leggo da codice. Se leggo il file 
"risalvato" dall'edit, tutto va bene, mentre se leggo l'originale, 
ottengo un'unica gigantesca riga..
Il codice che uso (semplice, pulito e perfettamente funzionante se apro 
e salvo il file in edit da prompt di msdos) è questo:
(collegato all'evento click di un pulsante)
Dim Riga() As Variant
Dim Campo As Variant
Dim X As Integer
Open "c:\lotto\lotto.txt" For Input As #1
X = 0
While Not EOF(1)
     ReDim Preserve Riga(X)
     Line Input #1, Riga(X)
     X = X + 1
Wend
Campo = Split(Riga(123), Chr(9))
Text1.Text = Campo(2)
'il risultato è 7!
Close #1
Non riesco capire perchè dal file originale proprio non va... Avete 
qualche idea?
Grazie...

 ha scritto nel messaggio 
news:49935daa$0$11384$5fc...@news.tiscali.it...


 
Ok, va bene. Però il fatto è che volevo riuscire leggere il file 
originale che danno loro (lottomatica) senza nessuna modifica. Ho capito 
che sono file di testo con interruzione di paragrafo CR o LF. Però così 
come sono non riesco leggerli da codice. Mentre se si salva come file di 
testo senza interruzione il problema non si pone.
Grazie

 testo senza interruzione il problema non si pone.
Sei sicuro che sia 13/10?
Prova con un editor esadecimale.
Altrimenti puoi leggere tutto con l'istruzione di vb6
Input$
E leggi tutto il contenuto in una stringa e poi fai quel che serve.

 E leggi tutto il contenuto in una stringa e poi fai quel che serve.
Si, sicuro. Perň non funziona. Devo importarlo in un array, ma 
formattato cosě viene creata una sola riga con tutti i dati. Mentre se 
lo formatto come testo normale funziona bene.
Con questo ciclo il file originale lo vede come un'unica riga
While Not EOF(F)
     ReDim Preserve Righe(R)
     Line Input #F, Righe(R)
     R = R + 1
Wend
Stesso ciclo con un file di testo normale, riesco interrogare ad 
esempio, riga 10 colonna 3.

 riga 10 colonna 3.
Secondo me Andrea ci ha azzeccato.
é possibile avere copia del file incriminato?
-- 
Ciao
Geppo 

 esempio, riga 10 colonna 3.
Hai provato con un editor esadecimale a vedere l'interruzione di riga,
*come ti avevo detto prima*?
Per risparmiarti il tempo l'ho fatto io. Il problema sta lě.
A te il piacere di andare avanti... si risolve con 4 righe di codice e la
funzione Input, come ti avevo piů o meno detto prima.

 
E' 13/10 l'ho letto ancora adesso con l'editor esadecimale. I file li 
trovi nel sito della lottomatica nella sezione "gioco del lotto" -> 
"archivio storico"
Prova il codice che ho messo nel post iniziale e vedi che lo legge tutto 
in una volta. Lo risalvi dall'edit del prompt e lo legge in ordine.
Ma in effetti nella guida di vb c'è scritto in line input:" L'istruzione 
Line Input # consente di leggere tutti i caratteri in un file un 
carattere per volta, fino al ritorno a capo (Chr(13)) o alla sequenza 
ritorno a capo–avanzamento riga (Chr(13) + Chr(10)). Le sequenze ritorno 
a capo–avanzamento riga vengono ignorate e non aggiunte alla stringa di 
caratteri."
Quindi non vorrei sia questo il problema...

 é possibile avere copia del file incriminato?
Confermo io, c'è solo LF, "standard" peraltro in roba che viene da php e
simili, se non erro.

 ha scritto nel messaggio 
news:4995524d$0$11375$5fc...@news.tiscali.it...

come dice andrea, prova ad aprirlo con un hex ed tipo questo
http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm
e guarda che carattere/i usa per separare le righe (facile sia solo 13 o 
solo 10 stile unix/mac).
dovresti poter fare lo split su quello per avere le singole righe.
questo era per sapere solo quante righe ci sono in un txt
    Open strFullFileName For Input As intNFile
    j = 1 + UBound(Split(Input$(LOF(intNFile), intNFile), vbCrLf))
    Close
se al posto di vbcrlf/vbnewline metti il tuo separatore, dovresti saltarci 
fuori.
ciao
ciao 

 Quindi non vorrei sia questo il problema...
Quel file ha solo chr(10) e lo risolvi (righe è il tuo array):
Dim fIn As Integer, rr As String
    rr = Input(LOF(fIn), #fIn)          'LEGGO TUTTO IL FILE INSIEME
    Righe = Split(rr, Chr$(10))         'senza chr$(13)
O se vogliamo essere più sicuri:
    rr = Input(LOF(fIn), #fIn)          'LEGGO TUTTO IL FILE INSIEME
    If InStr(rr, vbNewLine) > 0 Then
      Righe = Split(rr, vbNewLine)
    Else
      Righe = Split(rr, Chr$(10))       'senza chr$(13)
    End If

 Grazie...
Si io ne avrei una anche contro-corrente:
for n=1 to 5
Randomize
msgbox(cstr(int(rnd*90)))
next
Ha la solita validità del file che ti scarichi!....ed è più veloce!
esiste anche la variante per il superenalotto:
for n=1 to 6
Randomize
msgbox(cstr(int(rnd*90)))
next
..... Saluti!
p.s.
Calcolare la statistica sul lotto...è come calcolare la disposizione
delle piramidi....ci puoi vedere tutto quello che ci VUOI vedere!
bye man!

Andrea [Work] ha scritto:

Così funziona e ti ringrazio, ma ora devo capire perchè dall'editor 
leggo "0D" "0A" che sta per 13-10...

    j = 1 + UBound(Split(Input$(LOF(intNFile), intNFile), vbCrLf))
dimenticavo: puoi anche fare
f=replace(f,chr(10),chr(13) & chr(10))
salvarlo e poi leggere il tuo appena fatto con line input.
ciao 

 leggo "0D" "0A" che sta per 13-10...
Dipende dall'editor uno lo faceva pure a me.
Prova con Nodepad++, con quello lo vedi bene.

 salvarlo e poi leggere il tuo appena fatto con line input.
Dal momento che hai tutto su variabile, a quel punto meglio fare
direttamente la split. Il limite mi pare sia sui 2Gb, ma penso che il lotto
non esisterà più quel giorno, e di sicuro noi no... :)

 non esisterà più quel giorno, e di sicuro noi no... :)
:)
sì, pensavo anch'io, poi mi sono detto che se il pc non è ben stazzato può 
diventare pesante.
comunque, basta provare, anche per i tempi.
ciao
questa degli editor che fanno la conversione automatica e silenziosa a volte 
può essere spiacevole. alcuni danno l'opzione fra quelle di salvataggio.
qual'era l'hex che non diceva niente?