alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Buongiorno a tutto il forum.
Ho un problema del quale non capisco il perché del non funzionamento,
Ho due file.txt che nel corso del programma debbo aprire, leggere e memorizzarne il contenuto.
Posto subito il codice:
Codice sorgente - presumibilmente Delphi |
'Legge il file C:\GiorniNonLavorativi.txt 'per memorizzare i giorni di un anno nei quali l'ufficio è chiuso Dim s As New IO.StreamReader("C:\GiorniNonLavorativi.txt") While Not s.EndOfStream 'Si aggiunge un nuovo record Record = s.ReadLine + vbCrLf End While 'Finita l'operazione di lettura quanti giorni in un anno l'ufficio è chiuso, si chiude il file s.Close() 'Legge il file C:\ChiusuraFerie.txt per memorizzare i giorni di ferie di un anno Dim z As New IO.StreamReader("C:\ChiusuraFerie.txt") While Not z.EndOfStream 'Si aggiunge un nuovo record Ferie = z.ReadLine + vbCrLf End While 'Finita l'operazione di lettura dei giorni di ferie di un anno, si chiude il file z.Close()
|
Quando vado a controllare, nessuno dei due ha memorizzato niente.
Non ne capisco la ragione, anche perché un terzo, che deve leggere solo un numero salvato in un file.txt funziona perfettamente, ed ecco il suo codice:
Codice sorgente - presumibilmente Delphi |
While Not r.EndOfStream 'Va a leggere e memorizzare quanti numeri escono in un anno della Testata UscitaNumeri = Val(r.ReadLine) End While 'Finita l'operazione di lettura quanti numeri escono in un anno, si chiude il file r.Close()
|
L'unica differenza con gli altri due è nella riga
While Not r.EndOfStream
perché se anche agli altri due mettevo la "r" mi segnalava l'errore:
Codice sorgente - presumibilmente Plain Text |
Errore 1 La variabile locale 'r' è già dichiarata nel blocco corrente.
|
E il programma non partiva.
Domando:
Può essere questa la ragione?
E se sì, come posso ovviare?
Mille grazie.
alpi39 (Alberto)
Ultima modifica effettuata da alpi39 il 13/09/2008 alle 16:34 |
|
Thejuster (Admin)
Guru^2
Messaggi: 2298
Iscritto: 04/05/2008
|
da quel che leggo
praticamente e quasi sbagliato tutto.
Su cosa mi baso?
semplice
Codice sorgente - presumibilmente Delphi |
'Legge il file C:\GiorniNonLavorativi.txt 'per memorizzare i giorni di un anno nei quali l'ufficio è chiuso Dim s as New IO.StreamReader("C:\GiorniNonLavorativi.txt") while not s.EndOfStream 'Si aggiunge un nuovo record record = s.ReadLine + vbCrLf end while while not s.EndOfStream 'Si aggiunge un nuovo record record = s.ReadLine + vbCrLf end while
|
tu crei un while che vada NON ad aggiungere nuovi dati in una variabile ma che vada a sovrascrivere il valore corrente di quella variabile.
stessa cosa con tutti gl'altri esempi.
Se nel file l'ultima riga e vuota
il valore de campo sara nullo.
o l'ultimo letto.
e bene creare un array per gestire meglio i dati recuperati dal file
Codice sorgente - presumibilmente VB.NET |
'crei l'array dei giorni lavorativi dim giorninonlavorativi as new ArrayList Try Dim R As New IO.StreamReader("C:\GiorniNonLavorativi.txt") Dim Linea As String Do While Not R.EndOfStream giorninonlavorativi.add(linea) Loop R.Close() Catch End Try
|
il while va ad aggiugnere uno ad uno tutti le righe lette dal file txt
per recuperarli e semplice un ciclo for e tutto e fatto
e li metti non so, in una listview
Codice sorgente - presumibilmente VB.NET |
dim lista as listview1 dim i as integer = 0 for i = 0 To giorninonlavorativi - 1 lista.items.add(giorninonlavorativi(i)) next
|
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ti avevo già risposto per email al terzo problema:
Comunque l'errore è semplice da correggere: hai dichiarato due volte la variabile R nello stesso blocco. |
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Postato originariamente da Thejuster:
tu crei un while che vada NON ad aggiungere nuovi dati in una variabile ma che vada a sovrascrivere il valore corrente di quella variabile.
stessa cosa con tutti gl'altri esempi.
Se nel file l'ultima riga e vuota
il valore de campo sara nullo.
o l'ultimo letto.
e bene creare un array per gestire meglio i dati recuperati dal file
Codice sorgente - presumibilmente VB.NET |
'crei l'array dei giorni lavorativi dim giorninonlavorativi as new ArrayList Try Dim R As New IO.StreamReader("C:\GiorniNonLavorativi.txt") Dim Linea As String Do While Not R.EndOfStream giorninonlavorativi.add(linea) Loop R.Close() Catch End Try
|
il while va ad aggiugnere uno ad uno tutti le righe lette dal file txt
per recuperarli e semplice un ciclo for e tutto e fatto
e li metti non so, in una listview
Codice sorgente - presumibilmente VB.NET |
dim lista as listview1 dim i as integer = 0 for i = 0 To giorninonlavorativi - 1 lista.items.add(giorninonlavorativi(i)) next
|
|
Ciao Thejuster
E grazie per aver risposto allamia richiesta di aiuto.
Ho fatto come tu mi hai consigliato, ho copiato ed incollato il tuo codice nel mio, purtroppo, però mi segnalava questo errore:
Codice sorgente - presumibilmente C# / VB.NET |
Errore 1 La variabile 'R' nasconde una variabile in un blocco di inclusione.
|
Ma, forte dell'insegnamento di Totem che qui ripropongo:
Postato originariamente da Il Totem:
Ti avevo già risposto per email al terzo problema:
Comunque l'errore è semplice da correggere: hai dichiarato due volte la variabile R nello stesso blocco. |
|
Ho sostituito la variabile "R" con la variabile "S", ma a questo punto l'errore cambia e facendo riferimento a questa linea:
Codice sorgente - presumibilmente Plain Text |
giorninonlavorativi.Add(Linea)
|
recita:
Codice sorgente - presumibilmente C# / VB.NET |
Avviso 1 La variabile 'Linea' viene utilizzata prima che le sia stato assegnato un valore. È possibile che venga restituita un'eccezione dovuta a un riferimento con valore null in fase di esecuzione.
|
Ma io vedo che la variabile "Linea" è dimensionata nella riga:
Dim Linea As String
A questo punto, non sapendo come risolvere, ho preparato queste due "For"
Codice sorgente - presumibilmente VB.NET |
Dim S As New IO.StreamReader("C:\GiorniNonLavorativi.txt") Dim GiorniNonLavorativi(170) As String For MyBaseS = 1 To 170 GiorniNonLavorativi(MyBaseS) = S.ReadLine + vbCrLf Next MyBaseS 'S.Close() 'Legge il file C:\ChiusuraFerie.txt per memorizzare i giorni di ferie di un anno ' Dim z As New IO.StreamReader("C:\ChiusuraFerie.txt") Dim Z As New IO.StreamReader("C:\ChiusuraFerie.txt") Dim Ferie (35) As String For MyBaseZ = 1 To 35 Ferie (MyBaseZ) = S.ReadLine + vbCrLf Next MyBaseZ Z.Close()
|
Con il risultato però che mentre la prima "For" funziona perfettamente, con la seconda non ottengo nessun risultato.
Ho provato le due For, mettendo ad ognuna uno "Stop" dopo il rispettivo "Next" e ponendo all'interno di ciascuna delle due "FoR" dopo le rispettive righe:
GiorniNonLavorativi(MyBaseS) = S.ReadLine + vbCrLf
Stringa = GiorniNonLavorativi(20)
per la prima For
e
Ferie (MyBaseZ) = S.ReadLine + vbCrLf
Stringa = Linea(5)
per la seconda For
e mentre nella prima il risultato è:
6 Dicembre[/center]
nella seconda è:
Stringa"" |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Cancella tutto l'ultimo codice che hai scritto, perchè è inutile, e lascia invece quello di prima. Concentrati sull'analisi del messaggio di visual studio:
Avviso 1 La variabile 'Linea' viene utilizzata prima che le sia stato assegnato un valore. È possibile che venga restituita un'eccezione dovuta a un riferimento con valore null in fase di esecuzione |
Nota che dice "Avviso" e non "Errore". Gli avvisi non compromettono praticamente mai l'esecuzione di un codice, ma ti ricordano che potrebbero generare degli imprevisti. In questo caso il compilatore avverte che Linea viene utilizzata prima di aver ricevuto un valore. Infatti, se guardi bene il tuo codice, manca l'assegnamento:
Codice sorgente - presumibilmente Plain Text |
|
|