csv C#在现有行下面写新行

ux6nzvsh  于 2023-04-27  发布在  C#
关注(0)|答案(2)|浏览(172)

假设我有一个csv文件,其中包含一个数据列表,看起来像这样:

"1111", "-2222", "3333"
"-4444", "5555", "-6666"

在弄乱数据后,我把它们变成了负数/正数,并返回到字符串中

"-1111", "2222", "-3333"
"4444", "-5555", "6666"

我想用这两组数据写一个新的csv文件,新数据在原始数据的下面

"1111", "-2222", "3333"
"-4444", "5555", "-6666"

"-1111", "2222", "-3333"
"4444", "-5555", "6666"

我还是C#的新手,在编写逻辑代码方面我真的不是最聪明的。我试着用数组列表来做:

var arrList = new ArrayList();
foreach (string line in File.ReadLines(currFile))
{
    string newLine = line;
    writer.WriteLine(line);
    //I'm gonna spare you the trouble to read through my terrible lines of codes to mess with the data, newLine is the string where I store the altered data
    newLine = num;
    arrList.Add(newLine);

    if (lineCount == currFile.Length-1)
    {
        writer.WriteLine("/n");
        foreach (var element in arrList)
        { 
            writer.WriteLine(element);
        }
    }
    lineCount = lineCount + 1;
}

但是新的数据并没有被写入。
我能不能检测到它是原始数据的结尾,以便我可以开始写新的数据?我用lineCount == currFile.Length-1写错了吗?有没有更好的方法来实现这一点?
先谢谢你。

jv4diomz

jv4diomz1#

接下来要写的部分需要在你原来的循环之外。假设writer是你要写新文件的地方:

var arrList = new ArrayList();
foreach (string line in File.ReadLines(currFile))
{
    writer.WriteLine(line);
    // I'm gonna spare you the trouble to read through my terrible lines of codes to mess with the data, 
    // newLine is the string where I store the altered data
    arrList.Add(newLine);

}
writer.WriteLine("/n");
foreach (var element in arrList)
{ 
     writer.WriteLine(element);
}
roejwanj

roejwanj2#

CSV文件只是文本文件。CSV指的是它们的内容-它们包含逗号分隔的值。您可以向它们添加行,就像您将它们添加到任何文本文件一样。

追加文本文件

一种方法是使用Fille.AppendAllLines将行附加到现有文件的末尾:

var lines=new string[]{
  "1,2,3",
  "4,5,6"
};

File.AppendAllLines(pathToFile,lines);

在内部,AppendLines使用在Append模式下打开的StreamWriter。您可以在代码中执行相同的操作,将行直接写入文件,而不是将所有行存储在内存中:

using(var writer=new StreamWriter(pathToFile,true))
{
    for(......)
    {
        var line=CalculateNewLine(...);
        writer.WriteLine(line);
    }
}

您的代码将不得不生成每一行字符串,并确保每一行都是有效的,每行中具有相同数量的字段,并正确引用包含逗号的任何字段。

使用CSV库

你可以使用像CsvHelper这样的库来从你的应用程序的数据中生成字符串,注意正确地引用和分隔值。CsvHelper也可以追加到现有的文件中。Appending to an Existing File示例展示了如何做到这一点。
假设你有一个Foo唱片公司的名单

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

records = new List<Foo>
{
    new Foo { Id = 2, Name = "two" },
};

您可以轻松地将它们追加到现有文件中

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    // Don't write the header again.
    HasHeaderRecord = false,
};
using (var stream = File.Open("path\\to\\file.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, config))
{
    csv.WriteRecords(records);
}

您可以在配置中指定不同的分隔符、引用规则、日期和数字格式。

相关问题