Прежде всего, я хочу сказать, что анализ файла, основанный на предполагаемых положениях символов, является ужасной идеей, особенно если вы не имеете полного контроля над форматом данных.Все, что для этого потребуется, - это небольшие колебания, и все это не только не сработает, но, возможно, рухнет.Это, как говорится ...
while ((line = file.ReadLine()) != null)
{
if (line.Length <= 0)
{
continue;
}
var firstComma = line.IndexOf(",");
if (firstComma >= 0)
{
var possibleDate = line.Substring(0, firstComma);
if (DateTime.TryParse(possibleDate, out _))
{
list.Add(new Whatsapp
{
DateTime = line.Substring(0, line.IndexOf("-")).Replace(",", "").Trim(),
Date = line.Substring(0, line.IndexOf(",")).Trim(),
Time = line.Substring(0, line.IndexOf("-")).Trim().Substring(line.Substring(0, line.IndexOf("-")).Trim().IndexOf(",") + 2),
User = line.Substring(line.IndexOf("-") + 2).Substring(0, line.Substring(line.IndexOf("-") + 2).IndexOf(":")).Trim(),
Message = line.Substring(line.IndexOf("-") + 2).Trim().Substring(line.Substring(line.IndexOf("-") + 2).Trim().IndexOf(":") + 2).Trim()
});
}
else
{
list.Last().Message += $"{line.Trim()}\r\n";
}
}
else
{
list.Last().Message += $"{line.Trim()}\r\n";
}
}
Это большое, это уродливо и откровенно, я не согласен с половиной того, что вы там делаете, но он будет делать то, что вы хотите.
Чтобы уточнить, что именно он делает сверх того, что вы уже делаете, поскольку он перебирает каждую строку, которую проверяет, чтобы увидеть, есть ли запятая, если нет, то он предполагает, что она должна быть частью сообщения последнеголиния (опасное действие № 1).Если есть запятая, то он пытается проанализировать текст до этой запятой в datetime, если не может, тогда он снова предполагает, что это часть сообщения последней строки (опасное действие номер 2).В противном случае он ведет себя так, как вы написали.
Несвязанные комментарии, почему вы храните вещи, которые DateTime
как string
с?Строки подстроки, которые вы назначаете объекту, почти не читаются, вы, вероятно, захотите вернуться к ним.Но так как они выходят за рамки вопроса, я просто оставлю их здесь в качестве пищи для размышлений.
Опять же, я знаю, что мои дополнения не изящны, но, опять же, анализ строк никогда не бывает.