写入CSV

时间:2015-04-11 14:02:25

标签: c# csv

起初我是新手,我学习的只有两个月。 (对不起我的英文,我希望你能理解。) 问题是: 我正在尝试使用控制台应用程序创建一个小型数据库。我有student.csv,其中包含有关学生的所有信息。当我启动应用程序时,来自此.csv的所有信息将保存到列表中。像这样:

    List<Student> zoznam = new List<Student>();
    List<string> inicZac = new List<string>();
    List<string> ID = new List<string>();
    List<string> Meno = new List<string>();
    List<string> Priezvisko = new List<string>();
    List<string> Adresa = new List<string>();
    List<string> DatumNarodenia = new List<string>();
    List<string> Heslo = new List<string>();
    List<string> Login = new List<string>();
    List<string> inicKon = new List<string>();
    private int id;

    StreamReader reader = new StreamReader(File.OpenRead("student.csv"));  

    public databazaStudentov()
    {
        while (!reader.EndOfStream) 
        {
            var line = reader.ReadLine();
            var values = line.Split(';');

            inicZac.Add(values[0]);
            ID.Add(values[1]);
            Meno.Add(values[2]);
            Priezvisko.Add(values[3]);
            Adresa.Add(values[4]);
            DatumNarodenia.Add(values[5]);
            Heslo.Add(values[6]);
            Login.Add(values[7]);
            inicKon.Add(values[8]);
            zoznam.Add(new Student(values[1], values[2], values[3], values[4], values[5], values[6], values[7]));
        }

    }

效果很好。但是,当我在正在运行的应用程序中创建一个新学生时,我希望安全地轻松写入.csv。这个功能正在创建一个新学生:

    public void addStudent(string meno, string priezvisko, string adresa, string datum)
    {
        string tempID = generujID(); //random gener ID
        string tempLogin = generujLogin(meno, priezvisko); //random gener Login
        string tempHeslo = generujHeslo(); //random gener password
        zoznam.Add(new Student(tempID, meno, priezvisko, adresa, datum, tempLogin, tempHeslo));
        ID.Add(tempID);
        Meno.Add(meno);
        Priezvisko.Add(priezvisko);
        Adresa.Add(adresa);
        DatumNarodenia.Add(datum);
        Login.Add(tempLogin);
        Heslo.Add(tempHeslo);
        // I created a new student and now I want save him into the csv
    }

这是我的.csv:http://i.imgur.com/P0PnxpB.jpg?1

可能有更多方法来解决它。如果有人向我展示如何在新行上保存新学生,或者如何用list.csv覆盖列表中的所有内容,我将不胜感激。感谢您的提示和对不起我的英语。

3 个答案:

答案 0 :(得分:2)

我会创建一个新类来创建学生的csv文件。

public class CsvGen
{
  private _fileName=string.Empty;
  private StringBuilder csvRows;
  public CsvGen(string fileName)
  {
    _fileName=fileName;
    csvRows=new StringBuilder();
  }

  public void Add(Student student)
  {
    var row=String.Format("{0},{1},{2},{3}",student.Id,student.Name,student.City,
                                                                 Environment.NewLine);
    csvRows.Append(row);
  }
  public void SaveFile()
  {
    System.IO.File.WriteAllText(_fileName,csvRows.ToString());
  }
}

现在,从您的其他类开始,您可以创建此类的新实例,并在每次向列表中添加项目时调用AddStudent方法,并在循环后调用SaveFile。

CsvGen csvGen=new CsvGen(@"C:\\temp\myFile.csv"); 
// ^ any location with proper permission for .net to write files.

public void AddStudent(int id, string name, string city)
{
   Student stud=new Student();
   stud.Id=id;
   stud.Name=name;
   stud.City=city;
   csvGen.Add(stud);     
}

因此,一旦您创建了所有学生,您可以调用SaveFile方法来保存csv文件

while (!someCondition) 
{
  AddStudent(2,"scott","detroit");
}
csvGen.SaveFile();

答案 1 :(得分:1)

快速解决您的问题。

public void addStudent(string meno, string priezvisko, string adresa, string datum)
{
    //your code 
    //.........

    // I created a new student and now I want save him into the csv
    using(StreamWriter sw = new StreamWriter("student.csv", true))//true to append after the file
    {
        sw.WriteLine("{0};{1};{2};{3};{4};{5};{6};",
            tempID, meno, priezvisko, adresa, datum, tempLogin, tempHeslo);  
        sw.Close();       
    }
}

答案 2 :(得分:0)

如果你想读写csv,那么我建议你试试CsvHelper库,因为它比你目前的做法要简单得多。