Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
24/08/08 15:26
alpi39
Buongiorno a tutti gli iscritti al Forum ed a Totem in testa a tutti.
Il mio problema di oggi è questo:
Ho registrato, in un calendario, tanti file di testo per quanti sono i giorni dell'anno.
Ogni file è situato all'interno di una cartella che ha, come titolo, il giorno ed il mese corrispondente.
Queste cartelle sono contenute, in numero uguale ai giorni di ogni mese, dentro una cartella che ha per nome, il mese che le contiene.
Es.
Gennaio contiene 31 cartelle una per ogni giorno.
Febbraio contiene 28 o 29 cartelle a seconda se è o no un anno bisestile e una per ogni giorno.
Marzo contiene 31 cartelle una per ogni giorno.
E così via fino a Dicembre.
Ora, ho attivato un'altra Form con due TextBox. una per inserire la data che io desidero controllare e, l'altra dove dovrebbe apparire il testo contenuto nel file.txt relativo al giorno di quella data.
Allego il listato di questa Form.
Ho copiato integralmente, per la lettura del file, il codice riportato alla pag. 30 della guida di Piero Tofy, per leggere un file di testo, ma alla riga:
____________________________________________________
Dim r As New IO.StreamReader("C:\Anno\Mese\Giorno\Giorno.txt";)
___________________________________________________-
mi da questo errore evidenziando la riga con un fondino giallo ed una finestra che recita:
DirectoryNotFoundException non è stata gestita
e di seguito:

"Impossibile trovare una parte del percorso 'C:\Anno\Mese\Giorno\Giorno.txt' ".

dove Anno è 2009
Mese è Gennaio
Giorno è 5 Gennaio
e Giorno.txt è 5 Gennaio

Inspiegabile (per me) l'errore segnalato perché il percorso è giusto ed esatto


ImportsSystem.IO
______________________________________________________
Public Class Form3
    Public Data As String = ""
    Public Giorno As String = ""
    Public Mese As String = ""
    Public Anno As String
___________________________________________________
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim NumTextBox As Integer = 2
        Dim TextBox(NumTextBox)


        For Each MyControl In Me.Controls
            If MyControl.Name = ("TextBox" & (1)) Then

                MyControl.Text = Mid$((Date.Now), 1, 10)

            End If
        Next

    End Sub
___________________________________________________
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim RecordLine As String = ""
        Dim NumTextBox As Integer = 2
        Dim TextBox(NumTextBox)
        Dim MyControl As Control = Nothing
        Dim Mesi(12) As String
        Dim Giorni(12) As String 'Sono la quantità dei Giorni che hanno i Mesi
        Dim GiornoDellaSettimana(7) As String
        Dim I As Integer
        Dim G As Integer
        Dim M As Integer

        'Legge la data inserita nella TextBox N°1
        For Each MyControl In Me.Controls
            If MyControl.Name = ("TextBox" & (1)) Then
                Data = Me.Controls("TextBox" & 1).Text
            End If
        Next

        'controlla che la data sia stata digitata correttamente
        If Len(Data) <> 10 Then
            Dim messaggio As String = MsgBox("Inserire la Data correttamente con GG/MM/AAAA")
            Data = ""
            Return
        End If

        'controlla che non siano state digitate lettere 
        For I = 1 To Len(Data)
            If Asc(Mid$(Data, I, 1)) < 47 Or Asc(Mid$(Data, I, 1)) > 59 Then
                Dim messaggio As String = MsgBox("Inserire la Data correttamente con GG/MM/AAAA")
                Data = ""
                Return
            End If
        Next

        Giorno = Mid$(Data, 1, 2)
        Mese = Mid$(Data, 4, 2)
        Anno = Mid$(Data, 7, 4)

        'assegna i valori a Mesi e ad ogni Mese la quantità relativa di Giorni
        For I = 1 To 12
            If I = 1 Then Mesi(I) = "Gennaio" : Giorni(I) = 31
            If I = 2 Then Mesi(I) = "Febbraio" : Giorni(I) = 28
            If I = 3 Then Mesi(I) = "Marzo" : Giorni(I) = 31
            If I = 4 Then Mesi(I) = "Aprile" : Giorni(I) = 30
            If I = 5 Then Mesi(I) = "Maggio" : Giorni(I) = 31
            If I = 6 Then Mesi(I) = "Giugno" : Giorni(I) = 30
            If I = 7 Then Mesi(I) = "Luglio" : Giorni(I) = 31
            If I = 8 Then Mesi(I) = "Agosto" : Giorni(I) = 31
            If I = 9 Then Mesi(I) = "Settembre" : Giorni(I) = 30
            If I = 10 Then Mesi(I) = "Ottobre" : Giorni(I) = 31
            If I = 11 Then Mesi(I) = "Novembre" : Giorni(I) = 30
            If I = 12 Then Mesi(I) = "Dicembre" : Giorni(I) = 31
        Next I

        'Forma la stinga Giorno Per andare a leggere il file di quel giorno
        G = Val(Giorno)
        M = Val(Mese) : Mese = Mesi(M)
        Giorno = Str(G) + " " + Mese
        Anno = Val(Anno)

        'Legge il file C:\Giorno.txt
        Dim r As New IO.StreamReader("C:\Anno\Mese\Giorno\Giorno.txt")

        'Fintanto che non si è raggiunta la fine del file...
        While Not r.EndOfStream
            'Si aggiunge la nuova linea letta al testo di una textbox
            TextBox2.Text += r.ReadLine
        End While

        'Finita l'operazione di lettura, si chiude il file
        r.Close()
    End Sub
_____________________________________________________
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Close()
    End Sub
End Class
_____________________________________________________



Qualcuno può aiutarmi a risolvere questo mio problema?
Infiniti ringraziamenti.
alpi39 (Alberto)
Ultima modifica effettuata da alpi39 24/08/08 15:44
aaa
24/08/08 16:49
pierotofy
Dim r As New IO.StreamReader(@"C:\Anno\Mese\Giorno\Giorno.txt") 


Hai dimenticato la chiocciola davanti alla stringa... senza di quella i backslashes vengono interpretati come caratteri diversi in base alla lettera che li succede. (Ad esempio \n è il carattere per il New line, \r è il carriage Return e così via).
Ultima modifica effettuata da pierotofy 24/08/08 16:49
Il mio blog: piero.dev
24/08/08 20:25
alpi39
Grazie PieroTofy per la tempestività con la quale hai risposto alla mia richiesta di aiuto.
Pensavo, a causa della mia senilità, di aver dimenticato la chiocciola.
Sono tornato alla pag.30 della guida e ho notato che nel listato li riportato, non esiste nessuna chiocciola.
D'altra parte avendo io fatto il "copia e incolla" non potevo aver tralasciato un elemento così importante come tu lo definisci.
Ho comunque apportato la modifica al mio codice come tu mi dici di fare, ma il programma non parte perché mi segnala due errori:
Il primo, sottolineando la chiocciola mi avverte
"Prevista espressione"
Il secondo.sottolineandomi la "r" di

While Not r.EndOfStream
'Si aggiunge la nuova linea letta al testo di una textbox
TextBox2.Text += r.ReadLine
End While

mi dice: Errore    2    Nome 'r' non dichiarato

Io non capisco, visto che è dichiarato alla riga

Dim r As New IO.StreamReader(@"C:\Anno\Mese\Giorno\Giorno.txt";)

Ti ringrazio nuovamente per il tuo messaggio di aiuto e spero ancora di leggerti;
alpi39 (Alberto)
aaa
30/08/08 10:08
Il Totem
In vb.net non serve @.

Forse volevi scrivere:
 'Legge il file C:\Giorno.txt
Dim r As New IO.StreamReader("C:\" & Anno & "\" & Mese & "\" & Giorno & "\" & Giorno & ".txt") 
aaa
01/09/08 1:03
alpi39
Postato originariamente da Il Totem:

In vb.net non serve @.

Forse volevi scrivere:
 'Legge il file C:\Giorno.txt
Dim r As New IO.StreamReader("C:\" & Anno & "\" & Mese & "\" & Giorno & "\" & Giorno & ".txt") 


Grazie, grazie infinite Totem. Oggi mi sono accorto ancora di più quanto grande sia la mia ignoranza in VB.NET.
E pensare che la stessa riga di codice l'ho usata per registrare i dati che ora desidero leggere ed inserire all'interno di una TextBox.
C'è solo un problema che ora ti espongo pregandoti di aiutarmi a risolvere:
Nel File .txt ci sono tre o più righe di testo ed ognuna ha, come carattere finale il chr(13) ovvero il ritorno a capo.
Ed in effetti, se apro il file con Word Pad, vedo le tre o quattro righe tutte che sono con il ritorno carrello e quindi tutte tornano a capo, mentre se le carico con il programma nel quale ho inserito la riga di codice che tu mi hai segnalato, queste righe mi appaiono collegate una dietro l'altra come se facessero parte di un'unica riga. E inoltre, se vado a leggere un altro file, questo si accoda a quello precedente, mentre io vorrei che il file precedente sparisse per poter visionare solo il secondo file.
Puoi, per favore, aiutarmi?
Grazie
alpi39 (Alberto)
Ultima modifica effettuata da alpi39 01/09/08 1:06
aaa
01/09/08 8:37
Il Totem
Il mio codice serve solo per l'apertura. Quello che ti serve modificare non è quello che ti ho suggerito, ma questo pezzo:
While Not r.EndOfStream
  'Si aggiunge la nuova linea letta al testo di una textbox
   TextBox2.Text += r.ReadLine
End While

Infatti la funzione ReadLine legge una riga di testo, ma la restituisce senza il carattere a capo alla fine. Quindi devi aggiungerlo tu.
Inoltre, hai usato l'operatore +=, che ogni volta aggiunge il testo alla textbox, ma senza cancellare prima il contenuto.
Questo è il codice giusto:
TextBox2.Text = ""
While Not r.EndOfStream
  'Si aggiunge la nuova linea letta al testo di una textbox
  TextBox2.Text += r.ReadLine + vbCrLf
End While
aaa
01/09/08 11:11
alpi39
Postato originariamente da Il Totem:

Il mio codice serve solo per l'apertura. Quello che ti serve modificare non è quello che ti ho suggerito, ma questo pezzo:
While Not r.EndOfStream
  'Si aggiunge la nuova linea letta al testo di una textbox
   TextBox2.Text += r.ReadLine
End While

Infatti la funzione ReadLine legge una riga di testo, ma la restituisce senza il carattere a capo alla fine. Quindi devi aggiungerlo tu.
Inoltre, hai usato l'operatore +=, che ogni volta aggiunge il testo alla textbox, ma senza cancellare prima il contenuto.
Questo è il codice giusto:
TextBox2.Text = ""
While Not r.EndOfStream
  'Si aggiunge la nuova linea letta al testo di una textbox
  TextBox2.Text += r.ReadLine + vbCrLf
End While

Grazie Totem.
Grazie infinite.
Ieri sera ho inserito il messaggio (da me erano le 20 di domenica e in Italia era già l'una di lunedì;) e questa mattina (da ma sono le otto e in Italia sono le 13) ho trovato il tuo messaggio con la soluzione ai due problemi che ti avevo esposto.
Grazie nuovamente.
alpi39(Alberto)
aaa
02/09/08 9:22
Il Totem
Ok, allora chiudo.
aaa