Oppure

Loading
13/09/08 13:51
alpi39
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:

        '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:


        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:
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 13/09/08 14:34
aaa
13/09/08 22:01
Thejuster
da quel che leggo

praticamente e quasi sbagliato tutto.

Su cosa mi baso?

semplice

 '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


'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


dim lista as listview1

dim i as integer = 0

for i = 0 To giorninonlavorativi - 1

lista.items.add(giorninonlavorativi(i))

next




mire.forumfree.it/ - Mire Engine
C# UI Designer
14/09/08 7:41
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.
aaa
14/09/08 22:44
alpi39
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


'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


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:
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:
giorninonlavorativi.Add(Linea)

recita:

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"
        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

nella seconda è:
Stringa""
aaa
15/09/08 13:29
Il Totem
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:
Linea = R.ReadLine
aaa