使用C#将标头添加到CSV文件程序

时间:2017-06-08 05:59:58

标签: c# csv

 InitializeComponent();

 conDB = new csvfile();
 conDB.Path = "E:\\BR_AttendanceDownloadLogs" + 
 DateTime.Today.ToString("yyyyMMdd") + ".csv";

 fillCombo();

作为编程的初学者,第一次在c#中对csv文件进行CRUD。我指的是这个链接:https://social.msdn.microsoft.com/Forums/en-US/27a98772-2dc6-4197-9f75-6cc119d4a88a/how-to-edit-a-line-from-a-text-file-using-c?forum=Vsexpressvcs我找到了我的源代码,对我的程序非常有用。但它并不满足我的特殊满意度。我想从中添加标题。是的,我使用此代码成功添加了标题。

   String newFileName = "E:\\BR_AttendanceDownloadLogs" +
   DateTime.Today.ToString("yyyyMMdd") + ".csv";

        string clientHeader = "\"EmployeeCode\"" + ",\"" + "Date" + "\",\""+
        "Time" + "\",\"" + "Type" + "\",\"" + "Remarks" + "\"" +
        Environment.NewLine;

        File.WriteAllText(newFileName, clientHeader);

        conDB.InsertEntrie(txtidno.Text, DatePicker.Text, TimePicker.Text, 
        cmbtype.Text, txtremarks.Text);
            //txtID.Text = Convert.ToString(conDB.Entries()-1);
            txtvalue = Convert.ToString(conDB.Entries() - 1);

        fillCombo();
        txtidno.Text = "";
        DatePicker.Text = "";
        TimePicker.Text = "";
        cmbtype.Text = "";
        txtremarks.Text = "";

但是在成功添加我的标题之后: “EmployeeCode”, “日期”, “时间”, “类型”, “备注” 代码流被标头中的这种类型的字段感染。注意!我改变格式就像我的标题形式一样。读取csv文件中的行的其余函数受我的标题影响。它返回到不需要的错误。希望有人能救我到我的错误之岛。

2 个答案:

答案 0 :(得分:1)

您可以使用更简洁的File.AppendAllText替换所有StreamWriter代码,并将您的字符串连接替换为interpolated string
这些更改将导致更干净的InsertEntry方法

public bool InsertEntry(string idnumber, string date, string time, string type, string remarks)
{
    try
    {
        string line = $"\"{idnumber}\",\"{date}\",\"{time}\",\"{type}\",\"{remarks}\"{Environment.NewLine}";
        File.AppendAllText(data_path, line);
        return true;
    }
    catch (Exception ee)
    {
        string temp = ee.Message;
        return false;
    }
}

当然,button1单击应该只写一次标题,而不是每次单击它。为避免这种情况发生,您需要在编写标题之前检查文件是否存在。

String newFileName = @"E:\BR_AttendanceDownloadLogs" + 
                     DateTime.Today.ToString("yyyyMMdd") + ".csv");
if(!File.Exists(newFileName))
{
    string clientHeader = $"\"EmployeeCode\",\"Date\",\"Time\",\"Type\",\"Remarks\"{Environment.NewLine}";
    File.WriteAllText(newFileName, clientHeader);
}

答案 1 :(得分:0)

我在史蒂夫的帮助下解决了这个问题。 首先,我将此代码添加到表单中。

  InitializeComponent();
  conDB = new csvfile();
  conDB.Path = "E:\\BR_AttendanceDownloadLogs" + 
  DateTime.Today.ToString("yyyyMMdd") + ".csv";

  String newFileName = "E:\\BR_AttendanceDownloadLogs" + 
  DateTime.Today.ToString("yyyyMMdd") + ".csv";

  if (!File.Exists(newFileName))
  {
    string clientHeader = "\"EmployeeCode\"" + ",\"" + "Date" + "\",\"" +
    "Time" + "\",\"" + "Type" + "\",\"" + "Remarks" + "\"" +
    Environment.NewLine;
    File.WriteAllText(newFileName, clientHeader);
  }
  fillCombo();

然后到我的其他类我添加此函数以从用户输入添加条目。感谢史蒂夫。

  public bool InsertEntrie(string idnumber, string date, string time, string 
  type, string remarks)
    {            
        CreateConfigFile();
        try
        {
           string line = $"\"{idnumber}\",\"{date}\",\"{time}\",\"
            {type}\",\"{remarks}\"{Environment.NewLine}";
            File.AppendAllText(data_path, line);                
            return true;
        }
        catch (Exception ee)
        {
            string temp = ee.Message;
            return false;
        }
    }

然后我在按钮点击事件中将此代码添加到我的表单中。

    private void button1_Click(object sender, EventArgs e)
    {          
       conDB.InsertEntrie(txtidno.Text, DatePicker.Text, TimePicker.Text, 
       cmbtype.Text, txtremarks.Text);
       txtvalue = Convert.ToString(conDB.Entries() - 1);
    }