Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C#] leggere numeri da file di testo

    ho scritto un metodo programmino di poche righe che acquisisce una matrice da un file di testo, ma mi sono poco chiari dei passaggi (ho già cercato chiarimenti sul sito di msdn ma dannazione è troppo complicato per me )

    codice:
    // sono nel Main
    StreamReader myReader = new StreamReader("file.txt");
    string line = "";
    
    // scorro il file fino alla fine e leggo una linea alla volta (c'è scritta una sola matrice) 
    while(line != null)
    {   line = myReader.ReadLine();
         if(line != null)
         {     Elementi(line); // leggo tutti i numeri scritti nella linea letta
                Console.WriteLine();
         }
    }
    myReader.Close();
    
    // metodo
    public static void Elementi(string line)
    {     int n = 0;
           foreach(string sottostringa in line.Split(' '))
           {
                  n = int.Parse(sottostringa);
                  Console.Write(n + "\t");
           }
    }
    non mi è ben chiaro cosa sto facendo con line.Split(' ') all'interno del foreach

    AGGIORNAMENTO:
    avevo usato int.Parse(sottostringa) convinto di poter leggere soltanto i numeri ed evitare le lettere ma mi da errore; se per sbaglio scrivo 1 2 3 4A come faccio a evitare di leggere la A?
    Ultima modifica di mastodilu; 28-02-2015 a 15:10

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    ho scritto un metodo programmino di poche righe che acquisisce una matrice da un file di testo, ma mi sono poco chiari dei passaggi (ho già cercato chiarimenti sul sito di msdn ma dannazione è troppo complicato per me )

    codice:
    // sono nel Main
    StreamReader myReader = new StreamReader("file.txt");
    string line = "";
    
    // scorro il file fino alla fine e leggo una linea alla volta (c'è scritta una sola matrice) 
    while(line != null)
    {   line = myReader.ReadLine();
         if(line != null)
         {     Elementi(line); // leggo tutti i numeri scritti nella linea letta
                Console.WriteLine();
         }
    }
    myReader.Close();
    
    // metodo
    public static void Elementi(string line)
    {     int n = 0;
           foreach(string sottostringa in line.Split(' '))
           {
                  n = int.Parse(sottostringa);
                  Console.Write(n + "\t");
           }
    }
    non mi è ben chiaro cosa sto facendo con line.Split(' ') all'interno del foreach
    Ma hai provato a far girare il codice?
    In ogni caso la funzione split accetta come parametro in ingresso un carattere che verrà usato come "separatore" e restituisce un array di string. Nel tuo caso, split divide la linea letta usando lo spazio (" ") come carattere separatore e restituisce un array di parole, spezzando la frase parola x parola.

  3. #3
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Ma hai provato a far girare il codice?
    certo che ho provato, infatti funziona...
    siccome ho trovato su internet del metodo stringa.Split() volevo capire bene cosa stava facendo.

    praticamente potevo fare la stessa cosa facendo:
    codice:
    string[] parole = line.Split(' ');
    foreach(string sottostringa in parole)
    ......
    giusto?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    certo che ho provato, infatti funziona...
    siccome ho trovato su internet del metodo stringa.Split() volevo capire bene cosa stava facendo.

    praticamente potevo fare la stessa cosa facendo:
    codice:
    string[] parole = line.Split(' ');
    foreach(string sottostringa in parole)
    ......
    giusto?
    Si è la stessa cosa. Crei un oggetto array di string e poi lo usi per il ciclo.

  5. #5
    perfetto grazie mille!!
    per quanto riguarda la seconda domanda:
    " avevo usato int.Parse(sottostringa) convinto di poter leggere soltanto i numeri ed evitare le lettere ma mi da errore; se per sbaglio scrivo 1 2 3 4A come faccio a evitare di leggere la A? ", come faccio? non ho idee

  6. #6

  7. #7
    grazie

  8. #8
    Quote Originariamente inviata da escocat Visualizza il messaggio
    data per esepio la matrice 3x3:
    1 2 3
    2 3 4
    3 4A 5
    per controllare che la sottostringa sia un numero ho usato la funzione IsDigit(sottostringa, i) dentro ad un ciclo for che controlla se ogni carattere della sottostringa è appunto una cifra, è giusto o ci sono modi più intelligenti di controllare una parola (stringa senza spazi) per intero??

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    data per esepio la matrice 3x3:
    1 2 3
    2 3 4
    3 4A 5
    per controllare che la sottostringa sia un numero ho usato la funzione IsDigit(sottostringa, i) dentro ad un ciclo for che controlla se ogni carattere della sottostringa è appunto una cifra, è giusto o ci sono modi più intelligenti di controllare una parola (stringa senza spazi) per intero??
    Un modo alternativo potrebbe essere prendere una riga alla volta (1 2 3), usare la funzione String.Replace per togliere gli spazi e ottenere 123 e poi con la funzione IsNumeric verificare se sono solo numeri (tale funzione restituire false se la stringa in analisi contiene lettere, tipo 34A5)

  10. #10
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Un modo alternativo potrebbe essere prendere una riga alla volta (1 2 3), usare la funzione String.Replace per togliere gli spazi e ottenere 123 e poi con la funzione IsNumeric verificare se sono solo numeri (tale funzione restituire false se la stringa in analisi contiene lettere, tipo 34A5)
    ma eliminando gli spazi non sono più in grado di distinguere i numeri
    1 2 3
    12 3
    1 23 ecc...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.