如何在 C# 中更改 CSV 文件中的任何列和行?

How can I change any columns and rows from a CSV file in C #?

所以在我的程序中,用户可以选择一个带有 OpenFileDialog 的文件,如果他想用 SaveFileDialog 保存文件,csv 文件的列和行应该改变。为此,我已经尝试过 SaveFileDialog:

 List<String> liste = new List<string>();
        
        SaveFileDialog dialog = new SaveFileDialog();
        dialog.Filter = "CVS (*.cvs)|*.csv|All files (*.*)|*.*";

        if (dialog.ShowDialog() == true)
        {
            int counter = 0;
            string line;

            // Read the file and display it line by line.  
            try
            {
                System.IO.StreamReader file = new System.IO.StreamReader(path);
                while ((line = file.ReadLine()) != null)
                {
                    if (counter == 0)
                    {
                        line += ",column1,column2";
                        liste.Add(line + "\n");
                    }
                    else
                    {
                        line += $",{"fg"},{"gg"}";
                        liste.Add(line + "\n");                      
                    }

                    counter++;
                }

                File.WriteAllLines(dialog.FileName, liste);
                file.Close();
            }
            catch
            {
                MessageBox.Show("Der Gewählte Prozess wird bereits von einem anderen verwendet,\n " +
                    " bitte versuchen sie es erneut");
            }

但是,我无法以这种方式更改任何列或单元格,因为它总是将新行附加到行的末尾。那么我如何在后面的代码中管理它我有这样的 Csv 文件:

Picture1

更改后:

Picture2

如果我没有正确理解你的问题。您需要逐行解析 csv 文件以访问每个单元格,然后您可以修改每个单元格并创建另一个 csv 文件。

例如,此代码更改第二列(如果存在)。

        while ((line = file.ReadLine()) != null)
        {
            var cellArray = Regex.Split(line, "[\t,](?=(?:[^\"]|\"[^\"]*\")*$)")
            .Select(s => Regex.Replace(s.Replace("\"\"", "\""), "^\"|\"$", "")).ToArray();

            if (counter == 0)
            {
                if (cellArray.Length > 1)
                    cellArray[1] = "Changed Header";
            }
            else
            {
                if (cellArray.Length > 1)
                    cellArray[1] = "Changed Value";
            }

            liste.Add(string.Join(",", cellArray) + "\n");

            counter++;
        }

@aquinas 在

的回答中归功于正则表达式