Как мне скопировать определенные строки из csv-файла в новый файл с помощью C #?

#c# #csv

#c# #csv

Вопрос:

Я использую C # для создания небольшого приложения, которое автоматизирует некоторые ручные процессы. У меня есть CSV-файл, я должен выполнить поиск во втором столбце (который имеет название «Статус»), если статус «очищен», то мне не нужна эта строка, иначе мне нужно скопировать эту строку в другой файл и сохранить агрегированный файл. Кроме того, я также хотел бы знать, как удалить (автоматически) определенные столбцы CSV-файла в c #. Вот что у меня есть на данный момент: (Первая кнопка — «Показать оригинал», а вторая — «Изменить и сохранить»

 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)
    {

    }
}
}
  

Ответ №1:

Вы можете просто выполнить (если ваш файл не очень большой: в этом случае вам придется работать с программой streamreader)

 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")));