Inizializzare un dictionary da file

di il
7 risposte

Inizializzare un dictionary da file

Ho un file di testo "Dolci" così fatto :
sorbetto_limone 3.50
tiramisu 5.00
cheesecake 5.00
tortino_al_cioccolato 4.50

Dove accanto ad ogni dolce c'è il prezzo.
Vorrei inserire queste informazioni in un Dictionary, così da associare ad ogni dolce il relativo prezzo, ma come posso fare?
StreamReader srPrimi   = File.OpenText(filePath);
while (!srPrimi.EndOfStream)
           this.listaPrimi[srPrimi.ReadLine()] = ???;
Come faccio ad associare il prezzo? ReadLine legge l'intera linea, c'è magari qualche metodo che mi permette di fare questa cosa?
Grazie mille

7 Risposte

  • Re: Inizializzare un dictionary da file

    Memorizzi ogni riga in una stringa s = srPrimi.ReadLine(), poi con s.Split(' ') hai un array di due stringhe (se nei file ci sono sempre gli underscore), la seconda stinga la puoi convertire a double
  • Re: Inizializzare un dictionary da file

    Il tuo file di testo segue qualche regola?
    ad esempio
    1) i nomi non contengono mai spazi?
    2) tra nome e prezzo c'è sempre uno spazio?
    3) non ci sono mai spazi prima del nome?

    se queste 3 condizioni sono vere potresti dividere la riga in due stringhe separate dallo spazio
  • Re: Inizializzare un dictionary da file

    Weierstrass ha scritto:


    Memorizzi ogni riga in una stringa s = srPrimi.ReadLine(), poi con s.Split(' ') hai un array di due stringhe (se nei file ci sono sempre gli underscore), la seconda stinga la puoi convertire a double
    ok ci provo grazie
  • Re: Inizializzare un dictionary da file

    gian82 ha scritto:


    Il tuo file di testo segue qualche regola?
    ad esempio
    1) i nomi non contengono mai spazi?
    2) tra nome e prezzo c'è sempre uno spazio?
    3) non ci sono mai spazi prima del nome?

    se queste 3 condizioni sono vere potresti dividere la riga in due stringhe separate dallo spazio
    Si vengono rispettate tutte e tre le regole
  • Re: Inizializzare un dictionary da file

    Weierstrass ha scritto:


    Memorizzi ogni riga in una stringa s = srPrimi.ReadLine(), poi con s.Split(' ') hai un array di due stringhe (se nei file ci sono sempre gli underscore), la seconda stinga la puoi convertire a double
    
    while (!srPrimi.EndOfStream)
                {
                    stringaPrimi    = srPrimi.ReadLine();
                    string[] parole = stringaPrimi.Split(' ');
                    this.listaPrimi[parole[0]] = double.Parse(parole[1]);
                }
    
    Così dovrebbe funzionare. Grazie mille
  • Re: Inizializzare un dictionary da file

    Weierstrass ha scritto:


    Memorizzi ogni riga in una stringa s = srPrimi.ReadLine(), poi con s.Split(' ') hai un array di due stringhe (se nei file ci sono sempre gli underscore), la seconda stinga la puoi convertire a double
    
    // apro il file primi.txt
                srPrimi   = File.OpenText(args[0]);
                string[] rigaSplittata = new string[2];
    
                while (!srPrimi.EndOfStream)
                {
                    stringaPrimi    = srPrimi.ReadLine();
                    // divido ogni riga in due parti : la prima contiene il nome, la seconda il prezzo
                    rigaSplittata = stringaPrimi.Split(' ');
                    // associo al nome di ogni piatto del menu il prezzo, il quale viene convertito in double
                    this.listaPrimi.Add(rigaSplittata[0], double.Parse(rigaSplittata[1]));
                }
                Console.WriteLine(listaPrimi["carbonara"]);
                // chiudo il file primi.text
                srPrimi.Close();
    
    A quanto pare questo codice non funziona perchè non dice che la parola "carbonara" non è presente come chiave nel dizionario.
    Cosa ho sbagliato?
  • Re: Inizializzare un dictionary da file

    Frank2000 ha scritto:


    Weierstrass ha scritto:


    Memorizzi ogni riga in una stringa s = srPrimi.ReadLine(), poi con s.Split(' ') hai un array di due stringhe (se nei file ci sono sempre gli underscore), la seconda stinga la puoi convertire a double
    
    // apro il file primi.txt
                srPrimi   = File.OpenText(args[0]);
                string[] rigaSplittata = new string[2];
    
                while (!srPrimi.EndOfStream)
                {
                    stringaPrimi    = srPrimi.ReadLine();
                    // divido ogni riga in due parti : la prima contiene il nome, la seconda il prezzo
                    rigaSplittata = stringaPrimi.Split(' ');
                    // associo al nome di ogni piatto del menu il prezzo, il quale viene convertito in double
                    this.listaPrimi.Add(rigaSplittata[0], double.Parse(rigaSplittata[1]));
                }
                Console.WriteLine(listaPrimi["carbonara"]);
                // chiudo il file primi.text
                srPrimi.Close();
    
    A quanto pare questo codice non funziona perchè non dice che la parola "carbonara" non è presente come chiave nel dizionario.
    Cosa ho sbagliato?
    Nulla, risolto
Devi accedere o registrarti per scrivere nel forum
7 risposte