Scrivere file .csv

di il
3 risposte

Scrivere file .csv

Ciao a tutti, devo creare un'applicazione windows form che mi permetta di scrivere informazioni in un file .csv, riesco a scriverci sopra ma solo per colonna, vorrei scrivere le informazioni su un'unica riga ma diversa colonna. (Le informazioni sono prese attraverso una textbox e "splittate" attraverso il carattere ',') Potete aiutarmi?
public partial class Form1 : Form
    {
        StreamWriter file = new StreamWriter("studenti.csv");

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DateTime data = DateTime.Today;
            lblData.Text = Convert.ToString(data);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] array = new string[11];
            string stringa = txtInformazioni.Text;
            string[] line = stringa.Split(',');
            for(int i=0;i<11;i++)
            {
                array = line;
            }
            for(int i=0;i<11;i++)
            {
                file.WriteLine(array[i]);
            }
            file.Close();
        }
    }

3 Risposte

  • Re: Scrivere file .csv

    Devi mostrare il codice che usi, e se c'è un errore devi indicare QUALE e DOVE si verifica (quale linea).
    Le immagini sono assolutamente inutili, perché totalmente incomprensibili.
    Ma non te ne sei accorto?
  • Re: Scrivere file .csv

    Ho messo il codice, ma non ho chiesto di risolvere errori.
  • Re: Scrivere file .csv

    Ciao, dovresti specificare meglio quali sono i dati di partenza che devono essere scritti nel file CSV.
    Vedendo il tuo esempio sembra che i dati nella textbox siano già in un formato CSV (Comma Separated Values) e che il file risultante avrà sempre una sola riga.
    Se così fosse ti basterebbe scrivere in un file il contenuto della textbox.

    Volendo fare ulteriore passaggio, potresti seguire le regole che trovi qua: https://en.wikipedia.org/wiki/Comma-separated_values#RFC_4180_standard

    Di seguito trovi un esempio per creare un file CSV composto da una sola riga.
    Se dovessi scriverne più di una, ti consiglio di creare una lista di righe e adattare l'esempio per elaborarne sempre una alla volta.
    
    // Array che rappresenta una riga di un file CSV.
    var line = new[] { "Simone", "Marco", "Francesca", "Roberto" };
    
    // Array che rappresenta una riga di un file CSV inizializzato con alcuni casi "particolari".
    //var line = new[] { "col1", "", "\"col3\"", "col\n4", "col;5" };
    
    var stringBuilder = new StringBuilder();
    
    for (int i = 0; i < line.Length; i++)
    {
        // Recupero l'i-esimo elemento dell'array e raddoppio eventuali doppi apici presenti.
        var value = line[i].Replace("\"", "\"\"");
        
        // Aggiungo l'elemento corrente tra doppi apici al contenuto del CSV.
        stringBuilder.Append($"\"{value}\"");
        
        // Se sono arrivato all'ultimo elemento della riga, aggiungo un "ritorno a capo" altrimenti un punto e virgola.
        if (i == line.Length - 1)
        {
            stringBuilder.AppendLine();
        }
        else
        {
            stringBuilder.Append(";");
        }
    }
    
    // Scrivo il file su disco.
    File.WriteAllText("Studenti.csv", stringBuilder.ToString());
    
    Utilizzando LINQ (non credo sia il tuo caso) potresti sostituire l'intero ciclo for con questo:
    stringBuilder.AppendLine(string.Join(";", line.Select(x => $"\"{x.Replace("\"", "\"\"")}\"").ToList()));
Devi accedere o registrarti per scrivere nel forum
3 risposte