justin1204 Ответов: 1

У меня есть строка, где я разделяю их на несколько строк с помощью coma, но мне нужна последняя строка с fullstop


В моем примере c# у меня есть строка, где я разделяю их на несколько строк с помощью комы, но мне нужна последняя строка с полной остановкой.

пример: Вы можете обновить драйвер, который создает проблемы, чтобы защитить вашу систему от дальнейших проблем в будущем

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

Вы можете обновить драйвер,
что создает проблемы,
чтобы обезопасить вашу систему от дальнейших проблем в будущем,

но в конце строки в последней строке мне нужно заменить coma на full stop

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

Что я уже пробовал:

я пытался:

logEventDataList = (IList<eventlogsdatatype>)eventLogs.SetChannelType(EventChannelType.Application).SetLogType(EventLogLevel.Error).SetDays(1).GetLogs();
            if (logEventDataList.Count > 0)
            {
                var app = logEventDataList.GroupBy(n => n.Provider).Select(c => new { Key = c.Key, total = c.Count() }).ToList();
                if (app.Count > 0)
                {
                    noErrors = false;
                    result += "Application: \r\n ";
                    foreach (var item in app)
                    {
                        if(item.total > 1 ) result += item.Key + " repeated " + item.total + ((app.Count > 1) ? " times,\r\n " : " times ");
                        else result += item.Key + ((app.Count > 1)?" once,\r\n " : " once ");
                    }
                    result += Environment.NewLine + Environment.NewLine;
                }
            }

F-ES Sitecore

Используйте "EndsWith", чтобы увидеть, заканчивается ли что-то символом," TrimEnd", чтобы удалить символы из конца строки, и базовую конкатенацию, чтобы добавить символ в строку

если строка заканчивается на ","
удалить ","
добавлять "."

1 Ответов

Рейтинг:
6

OriginalGriff

Этот код не делает никакой замены, ни с запятой, ни с полной остановкой.
И, честно говоря, выбор символов немного скуден - запятая и полная остановка будут естественно встречаться в строках текста, особенно если это сообщение предназначено для представления пользователю - вам следует рассмотреть возможность использования менее вероятных символов, таких как " | " и "возможно".

Но... предполагая, что вы будете добавлять Терминатор строки в свой foreach петля, самый простой способ сделать это-изменить ее на for петля:

for (int i = 0; i < app.Count(); i++)
   {
   var item = app[i];
   ...
   result += i == (app.Count() -1) ? "." : ",";
   result += Environment.NewLine + Environment.NewLine;
   }


justin1204

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

OriginalGriff

Вам придется быть более откровенным и показывать лучшие примеры ввода и вывода, Как "я получаю это", так и "я хочу это" - помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Так что печатать как можно меньше никому не поможет в долгосрочной перспективе!

justin1204

хорошо, конечно ... и извините за мой неясный комментарий

logEventDataList = (IList<eventlogsdatatype>)eventLogs.SetChannelType(EventChannelType.Приложение).SetLogType(EventLogLevel.Ошибка).SetDays(1).GetLogs();
if (logEventDataList.Count > 0)
{
var app = logEventDataList.GroupBy(n => n.Provider).Выбора(c =&ГТ; новое { ключ = с.Ключ, общая = ц.Функция count() }).Список();
if (app.Count > 0)
{
noErrors = false;
результат += "применение: \r\n ";
for (int i = 0; i < app.Count(); i++)
{
var item = app[i];
если (item.total > 1 ) результат += item.Ключ + "повторный" + товар.итого + ((приложение.Граф &ГТ; 1) ? "раз\р\н" : "раз");
else result += item.Ключ + ((app.Count > 1)?" once\r\n" : "once");
результат += i == (app.Count() - 1) ? "." : ",";
}
результат += Environment.NewLine + Environment.NewLine;
}
}

это мой вывод после изменения кода:

Приложение:
SupportAssistAgent повторил 3 раза.

Система:
Microsoft-Windows-DistributedCOM повторил 10 раз
,Сам когда-то
.


запятая начинается в начале второй строки и полная остановка в следующей строке.

OriginalGriff

И что именно является входным сигналом?
Чего вы ожидали в качестве результата?

justin1204

На самом деле я читаю журналы событий из системы(приложение, система и безопасность).Где извлекаются журналы для каждого канала(приложения, системы, системы безопасности). он может содержать повторяющиеся журналы, поэтому мне нужно отсортировать их и показать, как

Приложение:
наименование поставщика повторяется 3 раза.

Безопасность:
Поставщик ФИО1 повторяется 10 раз,
имя провайдера 2 повторяется 4 раза,
провайдер name3 один раз.

система:
поставщик ФИО1 повторяется 4 раза,
имя провайдера 2 раза.


если есть несколько записей, то они должны быть показаны в разных строках с запятой в конце, а для последней записи она должна заканчиваться полной остановкой

мне все ясно, спасибо за ваше терпение

Maciej Los

Это уже другой вопрос. На данный момент он не отвечает, Потому что у нас нет доступа к вашим данным. Вы должны показать, как выглядит файл журнала.