Come leggere un file

di il
7 risposte

Come leggere un file

Salve, volevo creare una piccola applicazione che legge un file .txt e restituisce un risultato...
ho provato con questo codice ma da solo errori

   Dim StreamReader As New IO.StreamReader("C:\Provolone.txt")
   Dim Index As integer = 0    
   Dim Contenuto() As String
             
             ' conta quante righe ci sono in un file di testo e nel mentre carica le informazioni per ciascuna righa nella stringa 
            Do While StreamReader.Peek() >= 0
                StreamReader.ReadLine()
                Index += 1
                Contenuto(Index) = StreamReader.ReadLine
            Loop
      sr.Close()
         ' stama il contenuto nella console
         Console.WriteLine($" Quantita' righe: {Index}")
            For i As Integer = 0 To Index
                Console.WriteLine(Contenuto(i))
            Next
                                             

Mi da sempre errori, ho provato a usare come array ma da ulteriori problemi...

7 Risposte

  • Re: Come leggere un file

    Daniel KR ha scritto:


    Mi da sempre errori, ho provato a usare come array ma da ulteriori problemi...
    A parte che non hai indicato gli errori, ci sono una marea di cose che non vanno.
    
       Dim StreamReader As New IO.StreamReader("C:\Provolone.txt")
    
    Perché usare una variabile con lo stesso nome della classe?
    
       Dim Contenuto() As String
    
    Non hai dato una dimensione iniziale all'array, ammesso che sia possibile determinare con certezza il numero esatto di righe nel file.
    
       Dim Index As integer = 0    
    
    Parti con l'indice a zero, ma poi incrementi Index prima di accedere all'array, quindi di fatto salti il primo elemento.
    
    StreamReader.ReadLine()
    Index += 1
    Contenuto(Index) = StreamReader.ReadLine
    
    A che serve la prima chiamata a ReadLine() se non assegni il testo a una variabile?

    L'impressione è quella che tu stia andando completamente a caso: meglio leggere la documentazione prima, senza scrivere codice come viene, a meno di non andarlo poi a debuggare passo per passo per capire cosa non va e/o come si comportano le singole istruzioni.

    Ciao!
  • Re: Come leggere un file

    L'errore mi da:
    System.NullReferenceException: 'Riferimento a un oggetto non impostato su un'istanza di oggetto.
    poiché, si è vero vado a caso, o meglio vado a tentoni perché insomma mi piace anche provare
    
     Dim Contenuto() As String
     
    Non hai dato una dimensione iniziale all'array, ammesso che sia possibile determinare con certezza il numero esatto di righe nel file.
    e come faccio ad assegnare una dimensione se è variabile?
    
      Dim Index As integer = 0   
      

    Parti con l'indice a zero, ma poi incrementi Index prima di accedere all'array, quindi di fatto salti il primo elemento.
    in questo caso come mi devo comportare? devo partire:
    
      Dim Index As integer =1
      oppure
        Dim Index As integer 
    
    
    StreamReader.ReadLine()
    Index += 1
    Contenuto(Index) = StreamReader.ReadLine
    
    A che serve la prima chiamata a ReadLine() se non assegni il testo a una variabile?
    perché volevo che contasse quante righe ci sono in quel file
    L'impressione è quella che tu stia andando completamente a caso: meglio leggere la documentazione prima, senza scrivere codice come viene, a meno di non andarlo poi a debuggare passo per passo per capire cosa non va e/o come si comportano le singole istruzioni.
    ma poi, levami una curiosità: come fate a trovare le documentazione giuste? ogni volta che cerco è un incubo
    comunque grazie per la documentazione
  • Re: Come leggere un file

    Per imparare a cercare devi "abituarti" a cercare , parti da google e vai sulle fonti più autorevoli ovvero msdn ,libri,articoli ,
    per lettura scrittura file prova a vedere anche qua https://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_dotNET/Input_e_Output_su_file/
    in fondo al capitolo trovi anche un esempio sulla steganografia
  • Re: Come leggere un file

    Daniel KR ha scritto:


    poiché, si è vero vado a caso, o meglio vado a tentoni perché insomma mi piace anche provare
    Non è il modo corretto di imparare un linguaggio, una libreria, un framework in generale, a meno che tu non abbia una esperienza tale da aver visto altre soluzioni analoghe e ti possa quindi permettere di "tentare la sorte" cercando di riprodurre tecniche o conoscenze già acquisite in altre occasioni per vedere se si applicano anche all'ambito che stai approfondendo.

    Se così non è, ovviamente non potrai ottenere risultati buoni con questo tipo di approccio, e anche per chi è disposto ad aiutare non è particolarmente stimolante correggere codice scritto a caso senza alcun tipo di logica (o con una logica non riconoscibile).

    Daniel KR ha scritto:


    e come faccio ad assegnare una dimensione se è variabile?
    Le soluzioni sono due: o sai già quale è la dimensione da assegnare, sebbene variabile, oppure utilizzi una struttura dati che non preveda di dover necessariamente stabilire la dimensione in anticipo, ad esempio una lista (di stringhe in questo caso, quindi List<string>), in cui puoi inserire le righe una per una aumentando gradualmente le dimensioni del contenitore.
    in questo caso come mi devo comportare? devo partire:
    
      Dim Index As integer =1
      oppure
        Dim Index As integer 
    
    Il problema è che inizializzando a zero (che è il corretto indice di partenza) e incrementando di uno prima della lettura, vai a scrivere nell'elemento con posizione "1", ossia il secondo. Dovrai quindi adottare due strade: o parti da "-1" in modo da arrivare al valore corretto - "0" - al primo incremento della variabile, oppure incrementi la variabile indice *dopo* che hai acceduto all'elemento, quando l'indice vale ancora "0".

    In realtà, se fai uso di una lista di stringhe (come suggerito prima), al termine della lettura ti basterà leggere la proprietà Count() della lista per sapere quanti elementi (ossia quante righe) hai letto dal file.

    A meno che non sia per esercizio, sappi comunque che l'oggetto StreamReader ti consente di leggere anche l'intero file (con il metodo ReadAllText()) restituendoti una unica stringa, oppure di leggere tutte le righe suddivise già in base ai ritorni a capo (con ReadAllLines()), che restituisce invece l'array delle righe di testo acquisite dal file.
    A che serve la prima chiamata a ReadLine() se non assegni il testo a una variabile?
    perché volevo che contasse quante righe ci sono in quel file
    Quando esegui ReadLine(), la riga viene letta e quindi ti posizioni alla riga successiva; con il codice che hai scritto quindi, la prima volta leggi una riga senza salvarla e incrementando il contatore, poi vai a leggere la riga successiva... in pratica, stai leggendo "una riga sì e una no" e al termine del ciclo avrai contato la metà delle righe che ci sono nel file.
    ma poi, levami una curiosità: come fate a trovare le documentazione giuste? ogni volta che cerco è un incubo
    Direi che l'uso di un motore di ricerca qualsiasi è fondamentale per trovare le cose che servono, giusto?
    Alla peggio, basta scrivere il nome della classe/metodo/libreria su Google e fare clic su INVIO.
  • Re: Come leggere un file

    Prova anche con
    
    Dim Contenuto = IO.File.ReadAllLines("C:\Provolone.txt")
  • Re: Come leggere un file

    http://nasfernandez.myqnapcloud.com:8080/share.cgi?ssid=0BF6WZj
    Primo link, libro Free... "A Scuola Con Visual Basic" ci sono molte cose interessanti specie per chi inizia.....

    http://nasfernandez.myqnapcloud.com:8080/share.cgi?ssid=0Anze7b
    Secondo Link, "Manuale Visual Basic" ci sono molte ma molte meno cose ma sempre utile

    Dovrebbero funzionare i link perchè sono sul mio Nas, spero ti siano utili.
  • Re: Come leggere un file

    Ragazzi, veramente grazie per l'aiuto

    orione1976 ha scritto:


    http://nasfernandez.myqnapcloud.com:8080/share.cgi?ssid=0BF6WZj
    Primo link, libro Free... "A Scuola Con Visual Basic" ci sono molte cose interessanti specie per chi inizia.....

    http://nasfernandez.myqnapcloud.com:8080/share.cgi?ssid=0Anze7b
    Secondo Link, "Manuale Visual Basic" ci sono molte ma molte meno cose ma sempre utile

    Dovrebbero funzionare i link perchè sono sul mio Nas, spero ti siano utili.
    Grazie ^^ funziona, almeno un manuale decente in italiano per neofita!

    Alka ha scritto:


    Daniel KR ha scritto:


    poiché, si è vero vado a caso, o meglio vado a tentoni perché insomma mi piace anche provare
    Non è il modo corretto di imparare un linguaggio, una libreria, un framework in generale, a meno che tu non abbia una esperienza tale da aver visto altre soluzioni analoghe e ti possa quindi permettere di "tentare la sorte" cercando di riprodurre tecniche o conoscenze già acquisite in altre occasioni per vedere se si applicano anche all'ambito che stai approfondendo.
    Lo so, intanto mi baso sui tutorial yt in inglese ma non comprendo bene il funzionamento
    Se così non è, ovviamente non potrai ottenere risultati buoni con questo tipo di approccio, e anche per chi è disposto ad aiutare non è particolarmente stimolante correggere codice scritto a caso senza alcun tipo di logica (o con una logica non riconoscibile).
    ma poi, levami una curiosità: come fate a trovare le documentazione giuste? ogni volta che cerco è un incubo
    Direi che l'uso di un motore di ricerca qualsiasi è fondamentale per trovare le cose che servono, giusto?
    Alla peggio, basta scrivere il nome della classe/metodo/libreria su Google e fare clic su INVIO.
    Beh per chi sa cercare, trova

    gian82 ha scritto:


    Per imparare a cercare devi "abituarti" a cercare , parti da google e vai sulle fonti più autorevoli ovvero msdn ,libri,articoli ,
    per lettura scrittura file prova a vedere anche qua https://www.pierotofy.it/pages/guide/G ... t_su_file/
    in fondo al capitolo trovi anche un esempio sulla steganografia
    Grazie, almeno ho compreso una buona parte del funzionamento
    Dunque la prossima volta non pubblico tentando la sorte poiché sto imparando seriamente grazie al sig. orione1976
Devi accedere o registrarti per scrivere nel forum
7 risposte