【问题标题】:How do I copy certain rows from a csv file into a new file using C#?如何使用 C# 将 csv 文件中的某些行复制到新文件中?
【发布时间】:2014-08-27 18:39:29
【问题描述】:

我正在使用 C# 制作一个小型应用程序,它可以自动执行一些手动过程。我有一个 CSV 文件,我必须搜索第二列(名称为“状态”),如果状态为“清除”,那么我不需要这一行,否则我需要将此行复制到另一个文件中并保存聚合文件。此外,我还想知道如何在 c# 中(自动)删除 csv 文件的某些列。到目前为止,这是我所拥有的:(第一个按钮是“显示原始”,而第二个按钮是“更改并保存”

namespace AppExcel
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private static List<string[]> ReadAndParseData(string path, char separator )
    {
        var parsedData = new List<string[]>();
        using (var sr = new StreamReader(path))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                string[] row = line.Split(separator);
                string[] column = line.Split('\n');
                parsedData.Add(row);
            }

        }
        return parsedData;
    }

    private void DrawGridView(List<string[]> parsedData)
    {

        dataGridView1.ColumnCount = 47;
        for (int i = 0; i < 47; i++)
        {
            var sb = new StringBuilder(parsedData[0][i]);
            sb.Replace('_', ' ');
            sb.Replace("\"", "");
            dataGridView1.Columns[i].Name = sb.ToString();


        }

        foreach (string[] row in parsedData)
        {
            dataGridView1.Rows.Add(row);

        }

        dataGridView1.Rows.Remove(dataGridView1.Rows[0]);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        List<string[]> parsedData = ReadAndParseData(@"C:/Export Data.csv", ',');


        DrawGridView(parsedData);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        List<string[]> parsedData = ReadAndParseData(@"C:/Export Data.csv", ',');
        foreach (string[] row in parsedData)
        {
            if (row != parsedData[0])
            { 
              // What to insert here??

            }
        }

    }

    private void button3_Click(object sender, EventArgs e)
    {

    }
}
}

【问题讨论】:

    标签: c# csv


    【解决方案1】:

    您可以这样做(如果您的文件不是很大:在这种情况下,您将不得不使用流式阅读器)

    var retainedLines = File.ReadAllLines(@"C:/Export Data.csv")
                        .Skip(1) // if you have an header in your file and don't want it
                        .Where(x => x.Split(',')[1] != "clear");//don't take the lines with "clear" in second column
    

    如果你想保留第一行(标题),你可以这样做

    var retainedLines = File.ReadAllLines(@"C:/Export Data.csv")
                            .Where((x, i) => i == 0 || x.Split(',')[1] != "clear");//i is the index, so the first line will have i == 0
    

    然后保存到另一个文件

    File.WriteAllLines(<targetPath>, retainedLines);
    

    如果您想删除同一文件中的行,您的 targetPath 必须是现有的...

    【讨论】:

      【解决方案2】:

      一个行来读取文件,遍历行,拆分为列,检查清除,然后写入输出。

      File.WriteAllLines(outPath, 
                      File
                      .ReadAllLines(inPath)
                      .Where(line => !line.Split(seperator)[colNum].Equals("clear")));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-26
        • 1970-01-01
        • 2019-09-30
        相关资源
        最近更新 更多