Помощь в коде замены строк

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
Здравствуйте

Подскажите что сделать с кодом

Есть два списка, в котором код ищет сопадения и меняет на слово ошибка

Но он также меняет на слово ошибка и отступы между строками, как этого избежать?

var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

for (int i = 0; i < ListA.Count; i++)
{
foreach (var item2 in ListB)
{
if (item2.Contains(ListA))
{
ListA = "ОШИБКА";
break;
}
}
}
 

Вложения

Alex733

Client
Регистрация
27.11.2017
Сообщения
316
Благодарностей
230
Баллы
43
Добавь в начало цикла форич:

C#:
if(item2.Trim() == "") continue;
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28

Alex733

Client
Регистрация
27.11.2017
Сообщения
316
Благодарностей
230
Баллы
43
C#:
foreach (var item2 in ListB)
{
  if(item2.Trim() == "") continue;
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
foreach (var item2 in ListB)
{
if(item2.Trim() == "") continue;
var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

for (int i = 0; i < ListA.Count; i++)
{
foreach (var item2 in ListB)
{
if (item2.Contains(ListA))
{
ListA = "ОШИБКА";
break;
}
}
}


Когда этот код использую перестает читать файлы в шаблоне
 

Вложения

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
542
Благодарностей
291
Баллы
63
foreach (var item2 in ListB)
{
if(item2.Trim() == "") continue;
var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

for (int i = 0; i < ListA.Count; i++)
{
foreach (var item2 in ListB)
{
if (item2.Contains(ListA))
{
ListA = "ОШИБКА";
break;
}
}
}


Когда этот код использую перестает читать файлы в шаблоне
Забыли закрыть скобку } . У вас 4 открывающих и 3 закрывающих скобки.
И ругается он на кубик C#, а не на Прочитать файл.
 
Последнее редактирование:
  • Спасибо
Реакции: lesssss81

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
542
Благодарностей
291
Баллы
63
а где имеенно скобку закрывающую поставить?
C#:
foreach (var item2 in ListB)
{
    if (item2.Trim() == "") continue;
    var ListA = project.Lists["TEXT_EDIT"];
    var ListB = project.Lists["Bad"];

    for (int i = 0; i < ListA.Count; i++)
    {
        foreach (var item2 in ListB)
        {
            if (item2.Contains(ListA))
            {
                ListA = "ОШИБКА";
                break;
            }
        }
    }
}
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
foreach (var item2 in ListB)
{
if (item2.Trim() == "") continue;
var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

for (int i = 0; i < ListA.Count; i++)
{
foreach (var item2 in ListB)
{
if (item2.Contains(ListA))
{
ListA = "ОШИБКА";
break;
}
}
}
}
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
Компиляция кода Ошибка в действии "CS0136" "A local or parameter named 'item2' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter". [Строка: 9; Cтолбец: 22]
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
var ListA = project.Lists["TEXT_EDIT"]; // Переместим объявление переменных за пределы цикла
var ListB = project.Lists["Bad"];

foreach (var item2 in ListB)
{
if (item2.Trim() == "") continue;

for (int i = 0; i < ListA.Count; i++)
{
foreach (var innerItem in ListB)
{
if (innerItem.Contains(ListA))
{
ListA = "ОШИБКА";
break;
}
}
}
}
 
  • Спасибо
Реакции: Dmitriy Ka

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
Этот код работает меняет совпадения на ошибку, но отступы между сстроками, удаляет и тоже меняет на слово ОШИБКА
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
Вот рабочий вариант:

var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

foreach (var itemB in ListB)
{
if (itemB.Trim() == "") continue;

for (int i = 0; i < ListA.Count; i++)
{
if (ListA.Contains(itemB))
{
// Сохраняем отступы из оригинальной строки
string indentation = ListA.Substring(0, ListA.Length - ListA.TrimStart().Length);

// Заменяем строку на "ОШИБКА", сохраняя отступы
ListA = indentation + "ОШИБКА";
break;
}
}
}
 

lesssss81

Client
Регистрация
10.03.2017
Сообщения
638
Благодарностей
27
Баллы
28
Это вариант с удалением совпадений


var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

foreach (var itemB in ListB)
{
if (itemB.Trim() == "") continue;

for (int i = 0; i < ListA.Count; i++)
{
if (ListA.Contains(itemB))
{
ListA.RemoveAt(i);
i--; // Уменьшаем счетчик, так как после удаления элемента сдвигаются индексы
}
}
}
 
  • Спасибо
Реакции: igoreff

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
542
Благодарностей
291
Баллы
63
Попробуйте так

C#:
var ListA = project.Lists["TEXT_EDIT"];
var ListB = project.Lists["Bad"];

for (int i = 0; i < ListA.Count; i++)
{
    if (ListA[i].Trim().Length == 0) continue;

    foreach (var item2 in ListB)
    {
        if (ListA[i].Contains(item2))
        {
            ListA[i] = "ОШИБКА";
        }
    }
}
UPD:обновил код
 
Последнее редактирование:
  • Спасибо
Реакции: lesssss81

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)