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

    [c#] popolare lista da file di testo

    ciao, sto provando a fare un'applicazione console con visual c# (con il quale sono alle prime armi) e ho questo problema:
    devo inserire dei valori in una lista di un tipo di dato creato con una struct.
    la struct è questa:
    codice:
    public struct calciatore { 
    public int code; 
    public string nome; 
    public string squadra; 
    public float voto; 
    public int gol; 
    public int rig; 
    public int amm; 
    public int esp; 
    public int ax;
    public float pm; 
    }
    di seguito dichiaro una variabile temp di tipo calciatore dove inserire i valori letti corrispondenti ad una sola riga del file di testo e la mia lista:
    codice:
    calciatore temp;
    List<calciatore> voti = new List<calciatore>();

    una riga del file di testo è composta in questa maniera:
    codice:
    101   ABBIATI Christian   MIL    0,00   0   0   0   0   0    6,00
    quindi ogni valore (separato da un tab) deve finire nel relativo campo della variabile temp di tipo calciatore che poi verrà aggiunta alla lista per poi passare alla riga sucessiva del file di testo fino alla fine: come fare? il problema non è tanto come popolare la lista o come fare il ciclo per arrivare alla fine del file di testo ma bensì inserire i valori giusti nei campi giusti.

    ero partito con
    codice:
    temp = sr.ReadLine();
    dove
    codice:
    StreamReader sr = File.OpenText(miofile.txt");
    ma poi la scritta Impossibile convertire implicitamente il tipo 'string' in 'calciatore' mi ha messo paura.
    so che devo convertire il tipo string restituito da Readline() in int o double con per esempio int.parse(sr.readline()) quando serve, ma come? la readline legge tutta la riga giusto? dovrei fare una conversione per ogni valore?
    per esempio
    codice:
    temp.code = int.parse(sr.Readline());
    in c con una paio di %d, %lf, %s me la cavavo ma qui proprio non ho capito come fare.
    ciao e grazie.

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Diciamo che non è proprio così ovvio.

    Innanzitutto la tua applicazione deve leggere riga per riga il file di testo. Quando hai letto una riga, usi la funzione .Split() della classe String che divide una stringa in base al carattere passato per parametro. Ora hai un array di stringhe in cui l'elemento zero sarà il codice, l'elemento 1 il nome e così via. D'ora in poi dovresti saper proseguire(basta riempire la lista con i valori trovati).



    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    grazie stavo lavorando proprio in questa direzione...

  4. #4
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Buon Lavoro

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  5. #5
    allora ho fatto:
    codice:
    foreach (string lineacorr in File.ReadAllLines("miofile.txt"))
                    {
                        if (lineacorr != null)
                        {
                            String[] val = lineacorr.Split('\t');
                            temp.code = int.Parse(val[0]);
                            temp.nome = val[1];
                            temp.squadra = val[2];
                            temp.voto = float.Parse(val[3]);
                            temp.gol = int.Parse(val[4]);
                            temp.rig = int.Parse(val[5]);
                            temp.amm = int.Parse(val[6]);
                            temp.esp = int.Parse(val[7]);
                            temp.ax = int.Parse(val[8]);
                            temp.pm = float.Parse(val[9]);
                            voti.Add(temp);
                         }
    sembra funzionare, se avete suggerimenti per migliorare li accetto ben volentieri. comunque il problema sembra risolto! grazie.

  6. #6
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Ok, il code va bene così.

    Ciao ciao.

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

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.