如何在 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 在
的回答中归功于正则表达式
所以在我的程序中,用户可以选择一个带有 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 在
的回答中归功于正则表达式