Как найти две кавычки в строке - PullRequest
3 голосов
/ 10 февраля 2020

Я пытаюсь найти файл и посмотреть, содержит ли какая-либо строка слово Описание1 И если где-то в этой конкретной строке две кавычки появляются сразу после друг друга.

Я нашел различные способы удалить или заменить их, но я хочу сохранить их.

foreach (var line in File.ReadLines(FileName))
   {
    if (line.Contains ("Description1") )
       {
        MessageBox.Show ("Description1 found");

           if (line.Contains (@"""") )
              {                                                 
               MessageBox.Show ("ERROR! Empty Description1 found.");
              }
        }
}

Поиск файла выглядит примерно так существует и Description1, и две кавычки.

Моя проблема заключается в том, что я получаю сообщение об ошибке при каждом экземпляре текста Description1.

Есть хорошие идеи?

Заранее спасибо .

Ответы [ 2 ]

6 голосов
/ 10 февраля 2020

Используйте line.Contains("\"\"") вместо line.Contains(@""""), так как line.Contains(@"""") будет искать "not" ".

Заменено в вашем коде:

foreach (var line in File.ReadLines(FileName))
{
    if (line.Contains ("Description1") )
    {
        MessageBox.Show ("Description1 found");

        if (line.Contains ("\"\"") )
        {                                                 
            MessageBox.Show ("ERROR! Empty Description1 found.");
        }
    }
}
0 голосов
/ 10 февраля 2020

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

Попробуйте это:

var errors =
    File
        .ReadLines(FileName)
        .Select(x => $"<root {x} />")
        .Select(x => XDocument.Parse(x))
        .Where(x => x.Root.Attribute("PropertyName").Value == "Description1")
        .Where(x => x.Root.Attribute("PropertyValue").Value == "")
        .ToArray();

В ваших примерах данных для меня это выглядит следующим образом:

<root propertyDescriptor="22004" PropertyName="Description1" PropertyType="Part" PropertyValue="" />

Вы, конечно, можете поиграть с этим довольно чистым запросом, чтобы он выводил сообщения, которые вы sh.

.
...