C# Listából csv-be

C# Listából csv-be
2018-11-25T12:52:44+01:00
2018-11-26T14:37:23+01:00
2022-08-11T08:25:29+02:00
VTamas2
Tehát egy listából akarok generálni egy csv-t amibe elmenti a bevitt adatokat egy gomb megnyomására.
De valamiért nem generálja a csv-t ,valahogy így képzeltem el.

namespace WindowsFormsApp1 { public partial class Form1 : Form { List<Autok> aLista = new List<Autok>(); public Form1() { InitializeComponent(); } private void label1_Click(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { Autok a = new Autok(); a.Gyarto = tbGyarto.Text; a.Tipus = tbTipus.Text; a.Szin = tbSzin.Text; a.Felszereltsegiszint = tbFelsz.Text; aLista.Add(a); using (var file = File.CreateText(@"C:\Users\Tamás\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debugt")) { foreach (var arr in aLista) { file.WriteLine(string.Join(",", arr)); } } } } }
Mutasd a teljes hozzászólást!
A WriteLine az adott objektum ToString metódusát hívja meg, ezért lesz "System.Collections.Generic.List`1[WindowsFormsApp1.Autok]"

3 dolgot tehetsz (biztos van még más opció, nekem hirtelen ezek futottak át az agyamon):
1.: Az autók osztálynak csinálsz egy public override string ToString() metúdust, ahol visszaadsz egy vesszőkkel elválasztott string-et.

foreach (var a in aLista) sw.WriteLine(a); sw.Close(); //Fontos, hogy a for loop-on kívül csukd be a stream-et!
2.: Ugyanaz, mint az első - csak az olvashatóság okán public string ToCsvLine() metódust csinálsz.

foreach (var a in aLista) sw.WriteLine(a.ToCsvLine()); sw.Close(); //Fontos, hogy a for loop-on kívül csukd be a stream-et!
3.: A for loopban rakod össze a vesszőkkel elválasztott sort, pl.:

foreach (var a in aLista) { List<string> tmp = new List<string>(); tmp.Add(a.Termekkod); tmp.Add(a.Gyarto); tmp.Add(a.Mittomen); sw.WriteLine(tmp.Aggregate((i,k)=> i+","+k)); } sw.Close(); //Fontos, hogy a for loop-on kívül csukd be a stream-et!
Mutasd a teljes hozzászólást!

  • Hibaüzenet?

    Ez az elérési útvonal gyanús nekem:
    @"C:\Users\Tamás\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debugt"
    Mutasd a teljes hozzászólást!
  • Tovább haladtam már bele írja csv.be,de csak ennyit ír : System.Collections.Generic.List`1[WindowsFormsApp1.Autok]

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace WindowsFormsApp1 { public partial class Form1 : Form { List<Autok> aLista = new List<Autok>(); Autok a = new Autok(); public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { string NewGUID = System.Guid.NewGuid().ToString(); tbTermekkod.Text = NewGUID.ToString(); } private void button1_Click(object sender, EventArgs e) { a.Termekkod = tbTermekkod.Text; a.Gyarto = tbGyarto.Text; a.Tipus = tbTipus.Text; a.Szin = tbSzin.Text; a.Felszereltsegiszint = tbFelsz.Text; a.Ar = Convert.ToInt32(tbAr.Text); aLista.Add(a); } private void button3_Click(object sender, EventArgs e) { using (StreamWriter sW = new StreamWriter(@"C:\Users\Tamás\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debug\rainbow.csv", false, Encoding.Default)) { foreach (var a in aLista) { sW.WriteLine(aLista); sW.Close(); } } } } }
    Mutasd a teljes hozzászólást!
  • Ennek így nem sok értelme van:
    string NewGUID = System.Guid.NewGuid().ToString(); tbTermekkod.Text = NewGUID.ToString();
    Ez bőven elég helyette:

    tbTermekkod.Text = System.Guid.NewGuid().ToString();
    illetve a foreachben az aLista-t adod a writeLine-nak, nem az a-t.
    Nem tudom, hogy megy a csv-be írás, de szerintem ha az "a"-t adod, akkor is csak az a típusa lesz kiírva, szerintem ott konkrétan az "a" property-eit kell írnod
    Mutasd a teljes hozzászólást!
  • A WriteLine az adott objektum ToString metódusát hívja meg, ezért lesz "System.Collections.Generic.List`1[WindowsFormsApp1.Autok]"

    3 dolgot tehetsz (biztos van még más opció, nekem hirtelen ezek futottak át az agyamon):
    1.: Az autók osztálynak csinálsz egy public override string ToString() metúdust, ahol visszaadsz egy vesszőkkel elválasztott string-et.

    foreach (var a in aLista) sw.WriteLine(a); sw.Close(); //Fontos, hogy a for loop-on kívül csukd be a stream-et!
    2.: Ugyanaz, mint az első - csak az olvashatóság okán public string ToCsvLine() metódust csinálsz.

    foreach (var a in aLista) sw.WriteLine(a.ToCsvLine()); sw.Close(); //Fontos, hogy a for loop-on kívül csukd be a stream-et!
    3.: A for loopban rakod össze a vesszőkkel elválasztott sort, pl.:

    foreach (var a in aLista) { List<string> tmp = new List<string>(); tmp.Add(a.Termekkod); tmp.Add(a.Gyarto); tmp.Add(a.Mittomen); sw.WriteLine(tmp.Aggregate((i,k)=> i+","+k)); } sw.Close(); //Fontos, hogy a for loop-on kívül csukd be a stream-et!
    Mutasd a teljes hozzászólást!
  • Már csak annyi érdekelne hogy hogyan lehet splitelni őket azaz mindegyik adatot külön cellába rakja.
    Sajnos c# más mint javaba ahogy látom.
    Mutasd a teljes hozzászólást!
  • Ha úgy írtad a CSV-be, ahogy DeaRnaycleS javasolta, akkor szerintem a hiba, hogy az Excel/Calc progidban nem ',' a szeparátor, hanem valami más, pl. ';'.
    Mutasd a teljes hozzászólást!
  • Igen ez volt a hiba,köszönöm!
    Mutasd a teljes hozzászólást!
abcd