Удаление указанного текста из файла CSV - PullRequest
2 голосов
/ 08 марта 2019

это моя первая попытка сделать это, и я понятия не имею, нахожусь ли я на правильных строках.

В основном я хочу удалить текст из файла CSV, который содержит определенное ключевое слово, но я не могуразберись, как убрать строку.

  static void Main(string[] args)
    {
        var searchItem = "running";

        var lines = File.ReadLines("C://Users//Pete//Desktop//testdata.csv");

        foreach (string line in lines)
        {
            if (line.Contains(searchItem))
            {
                //Remove line here?
            }
        }
    }

Ответы [ 4 ]

1 голос
/ 08 марта 2019

Попробуйте, чтобы удалить одно или несколько слов.

static void sd(string[] args)
{
    string contents = File.ReadAllText("C://Users//Pete//Desktop//testdata.csv");

    string output = contents.Replace("running", string.Empty).Replace("replaceThis", string.Empty).Replace("replaceThisToo", string.Empty);
    //string output = contents.Replace("a", "b").Replace("b", "c").Replace("c", "d");
}

Чтобы удалить несколько строк, вы можете использовать это ...

static void Main(string[] args)
{
    string[] removeTheseWords = { "aaa", "bbb", "ccc" };

    string contents = File.ReadAllText("C://Users//Pete//Desktop//testdata.csv");
    string output = string.Empty;

    foreach (string value in removeTheseWords)
    {
        output = contents.Replace(value, string.Empty);
    }
}

Подробнее: https://docs.microsoft.com/en-us/dotnet/api/system.string.replace

0 голосов
/ 08 марта 2019

, если вы используете foreach и удаляете из строк его волю через исключение, называемое измененным исключением коллекции, так что переходите к

for(int i=lines.Count - 1; i > -1; i--)
{
 if (lines[i].Contains(searchItem))
  {
    lines.RemoveAt(i);
  }
}
0 голосов
/ 08 марта 2019

Простой способ удалить целую строку:

    var searchItem = "running";
    var pathToYourFile = @"C://Users//Pete//Desktop//testdata.csv";
    var lines = File.ReadAllLines(pathToYourFile);
    lines = lines.Where(line => !line.Contains(searchItem)).ToArray();
    File.WriteAllLines(pathToYourFile, lines);

Для нескольких элементов поиска:

    var searchItems = "running;walking;waiting;any";
    var pathToYourFile = @"..\..\items.csv";
    var lines = File.ReadAllLines(pathToYourFile);
    // split with your separator, actually is ';' character
    foreach(var searchItem in searchItems.Split(';'))
        lines = lines.Where(line =>!line.Contains(searchItem)).ToArray();

    File.WriteAllLines(pathToYourFile, lines);
0 голосов
/ 08 марта 2019

Вам не нужно удалять строки, просто пропустите те строки, которые содержат ваш поисковый запрос

foreach (string line in lines)
{
    if (!line.Contains(searchItem))  //<= Notice here I added exclamation mark (!)
    {
        //Do your work when line does not contains search term
    }
    else
    {
        //Do something if line contains search term
    }
}

Или альтернативой является фильтрация ваших строк, которые не содержат ваш поисковый запрос перед циклом, как

lines = lines.Where(line => !line.Contains(searchItem));

foreach (string line in lines)
{
    //Here are those line that does not contain search term                
}

Если поисковый запрос содержит несколько слов, разделенных запятой (,), вы можете пропустить эти строки на

lines = lines.Where(line => searchItem.Split(',').All(term => !line.Contains(term)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...