Oppure

Loading
24/07/08 15:41
alpi39
Ciao Totem.
Ho provato ad utilizzare il codice che tu mi hai postato nel Topic "2 domande apparentemente facili ma per me difficili" per costruire il mio Calendario, ma data la mia scarsa conoscenza del Visual Basic .NET, non sono stao in grado di farne un buon uso.
Questo Calendario che vorrei programmare lo vorrei realizzare per mio figlio che vive e lavora a Roma (io, ti ricordo che vivo in Brasile) presso una Casa Editrice e dovrebbe servire a distribuire (nell’arco dell’anno) tutte le fasi di lavorazione dei giornali che la Casa produce.
Questo Calendario dovrebbe, per prima cosa, registrare una cartella con il nome dell’anno da programmare e, all’interno di questa, 12 cartelle ognuna con il nome di un Mese all’interno delle quali tante cartelle quanti sono i giorni di ogni mese contenente ciascuna un file di testo dove saranno registrate le fasi di lavorazione che sono previste per quel giorno.
So che è un’impresa molto ardua per me che sono alle prime armi con il VB.NET ma ho provato a scrivere questo codice che ti invio, perché mi da un errore alla riga che ti segnalo. Errore che non so risolvere e mi rivolgo a te che sono certo vorrai aiutarmi.
Ti anticipo i miei doverosi ringraziamenti.


Imports System.IO

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim AnnoDigitato As String = ""
        Dim Anno As String = ""
        Dim Mesi(12) As String
        Dim Mese As String = ""
        Dim Giorni(12) As Integer
        Dim Giorno As String = ""

        'qui, raccoglie il dato scritto nella TextBox
        'per stabilire di quale anno deve formare il Calendario(che NON è obbligatoriamente l'anno corrente)
        AnnoDigitato = AnnoDigitato + Me.Controls("TextBox" & 1).Text

        'trasforma l'anno digitato nella TextBox (che è una stringa) in  un’altra stringa per la variabile anno
        Anno = AnnoDigitato

        'qui evidenzia, con un messaggio l'anno che è stato digitato
        Dim risp As Integer = MsgBox(L'anno del quale formare il calendario è il " & Anno)

        'Crea il percorso per arrivare alla Directory 
        'che chiamerà  con il nome dell'anno del quale formare il calendario
        Dim Percorso As String = "C:\" & Anno

        '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

        'Controlla se l'anno digitato è un anno bisestile
        'in caso positivo, aumenta di uno i giorni di Febbraio
        If Int(Val(Anno / 4 * 4)) = Val(Anno) Then Mesi(2) = 29

        'Crea la stringa Mese
        For I = 1 To 12
            Mese = Mesi(I)
            'Crea la stringa Giorno
            For X = 1 To Giorni(I)
                Giorno = Str(X) & " " & Mese

                'Crea il percorso che deve fare per creare le cartelle e sottocartelle
                'ognuna con il proprio nome
                Dim PercorsoFile As String = ""
                PercorsoFile = "C:\" & Anno \ Mese \ Giorno <--------Qui mi segnala l’errore, evidenziandomi la riga con un fondino giallo ed una finestra, con un filo indirizzato verso la riga dove è scritto: (in carattere grassetto)  InvalidCAstException non è stata gestita e, (in carattere normale) Cast non valido dalla stringa "Gennaio" al tipo 'Long'.

                                 System.IO.Directory.CreateDirectory(PercorsoFile)

                'È possibile utilizzare Metodo My.Computer.FileSystem.WriteAllText per scrivere del testo all'interno dei file.
                'Se il file specificato non esiste, viene creato automaticamente.
                My.Computer.FileSystem.WriteAllText(PercorsoFile, Giorno, True)

            Next X

        Next I

        Close()

    End Sub

End Class



Ultima modifica effettuata da alpi39 24/07/08 16:12
aaa
24/07/08 17:09
crash outside control
Ciao, prova con:
                'Crea il percorso che deve fare per creare le cartelle e sottocartelle
                'ognuna con il proprio nome
                Dim PercorsoFile As String = ""
                PercorsoFile = "C:\" & Anno & "\" & Mese & "\" & Giorno


P.S. scusa se mi sono intromesso 8-|
Ultima modifica effettuata da crash outside control 24/07/08 17:38
aaa
24/07/08 19:28
alpi39
Postato originariamente da crash outside control:

Ciao, prova con:
                'Crea il percorso che deve fare per creare le cartelle e sottocartelle
                'ognuna con il proprio nome
                Dim PercorsoFile As String = ""
                PercorsoFile = "C:\" & Anno & "\" & Mese & "\" & Giorno
P.S. scusa se mi sono intromesso 8-| 

Ciao crash outside control e grazie per esserti "intromesso" perché la tua intromissione è riuscita a farmi andare avanti nel progetto. Purtoppo, però, si è ribloccato alla riga sucessiva che ti posto, segnalandomi l'errore con il solito fondino giallo e la solita finestra che recita:
(in carattere grassetto)
"unauthorizedAccessException non è stata gestita"
ed (in carattere normale)
"Accesso al percorso 'C:09\Gennaio\ 1 Gennaio' negato".
Debbo forse spiegarti che all'interno della cartella "1 Gennaio",dovrebbe essere inserito un file .txt con lo stesso titolo "1 Gennaio" e nel file, dovrebbe essere scritto (come prima riga), lo stesso "1 Gennaio".
Pensi di potermi ancora aiutare?
                'È possibile utilizzare Metodo My.Computer.FileSystem.WriteAllText per scrivere del testo all'interno dei file.
                'Se il file specificato non esiste, viene creato automaticamente.
                My.Computer.FileSystem.WriteAllText(PercorsoFile, Giorno, True)<------questa è la riga dove mi viene segnalato l'errore

Grazie nuovamente
alpi39 (Alberto)
Ultima modifica effettuata da alpi39 24/07/08 19:34
aaa
24/07/08 19:48
crash outside control
Prova con:
My.Computer.FileSystem.WriteAllText(PercorsoFile & "\" & Giorno & ".txt", Giorno, True)
aaa
25/07/08 9:13
Il Totem
Crash ha ragione. Nel metodo WriteAllText, tu non hai specificato il percorso del file, ma quello della CARTELLA.

Inoltre... trascurando tutte le piccole cose del tuo codice che si potrebbero correggere, io ti suggerirei un approccio più Object Oriented, visto che si programma di .net.
Questa soluzione spreca invero molte risorse, quando basterebbe una riga di codice per dichiarare un contenitore che possa gestire tutto autonomamente:
Dim Lista As New Dictionary(Of Date, String)

Questo dizionario associa ad ogni chiave (di tipo Date), un valore (di tipo String). In questo modo basta aggiungere una chiave e il corrispondente impegno nella stringa per memorizzare tutto nel dizionario. Esempio:
Dim Data As Date = Date.Parse("18/01/2009")
Lista.Add(Data, "Impegno per questa data")

E il salvataggio non è un problema. Infatti puoi inserire questa lista in My.Settings e l'applicazione si occuperà di salvare e caricare da sola l'oggetto ad ogni avvio/chiusura del programma. Non ti sembra più facile e meno oneroso?
aaa
25/07/08 10:25
alpi39
Postato originariamente da Il Totem:

Crash ha ragione. Nel metodo WriteAllText, tu non hai specificato il percorso del file, ma quello della CARTELLA.

Inoltre... trascurando tutte le piccole cose del tuo codice che si potrebbero correggere, io ti suggerirei un approccio più Object Oriented, visto che si programma di .net.
Questa soluzione spreca invero molte risorse, quando basterebbe una riga di codice per dichiarare un contenitore che possa gestire tutto autonomamente:
Dim Lista As New Dictionary(Of Date, String)

Questo dizionario associa ad ogni chiave (di tipo Date), un valore (di tipo String). In questo modo basta aggiungere una chiave e il corrispondente impegno nella stringa per memorizzare tutto nel dizionario. Esempio:
Dim Data As Date = Date.Parse("18/01/2009")
Lista.Add(Data, "Impegno per questa data")

E il salvataggio non è un problema. Infatti puoi inserire questa lista in My.Settings e l'applicazione si occuperà di salvare e caricare da sola l'oggetto ad ogni avvio/chiusura del programma. Non ti sembra più facile e meno oneroso?


Ciao Totem
Sono contento di leggerti e volevo prima di ogni cosa, ringraziare Crash per ciò che lui ha chiamato 'INTROMISSIONE", perché con la sua "intromissione", ho risolto i miei problemi che, la mia scarsa padronanza del linguaggio non mi faceva vedere.
Grazie infinite Crash.
Vedi Totem, i tuoi consigli sono sicuramente ottimi e migliorerebbero sicuramente il codice rendendolo più leggero e meno farraginoso, ma io, poichè conosco ben poco del VB.NET, mi rivolgo alle mie conoscenze del vecchio Basic cercando di adattarle a questo nuovo linguaggio e così come ha fatto Crash (che ha preso una parte del mio codice apportandovi le dovute correzioni) il programma funziona benissimo (grazie a lui).
Ciò che tu mi suggerisci di fare inviandomi righe di codice, io non saprei dove posizionarle.
Forse, dimentichi la mia incapacità e pensi di comunicare con uno esperto e bravo come te. Per questo io ti ringrazio, ma apprezzo di più la spiegazione che tu mi hai dato per le correzioni che mi ha indicato Crash, perché così ho capito dove erano gli errori ed un'alta volta saprò dove e come intervenire.
Rispettosamente ti ringrazio e sicuramente mi piacerà rileggerti ancora in un prosimo futuro.
alpi39 (Alberto)
aaa
26/07/08 9:23
Il Totem
Certo lo capisco, ma non sarebbe male se facessi qualche passo in più in questo linguaggio. Ad ogni modo, i miei sono suggerimenti e non obblighi. Se preferisci continuare così, fai pure.

E, giusto per l'occasione, ricordo che questo è un forum e che se anche indirizzate le discussioni a me perchè sono il moderatore, non è detto che qualcuno prima di me le legga e, avendo il diritto di rispondere (e la soluzione al problema), risponda. Sebbene mi dispiacia dirlo, sarebbe meglio togliere clausole del tipo "Per totem" nel titolo della discussione, sostituiendole con qualcosa di più significativo.
aaa