Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Из текстового файла в строки C#

#c_sharp #строки #файлы


Допустим есть текстовый файл, в котором в каждой строке лежит слово и последовательность
цифр. Как мне поместить в одну строку только слова, а в другую - только цифры?

Пример файла:

testText0 1 2 3 4
testText1 2 4

    


Ответы

Ответ 1



Кроме решений в лоб всегда остаётся вариант использования регулярных выражений. using System.Text.RegularExpressions; ........ var Lines = File.ReadAllLines("MyFileName.txt"); var RegEx = new Regex(@"^([a-zA-Z]+)([\d\s]+)$"); var Words = new List(); var Digits = new List(); foreach (var Line in Lines){ var Matches = RegEx.Match(Line); Words.Add(Matches.Groups[1].ToString()); Digits.Add(Matches.Groups[2].ToString()); } Этот подход хорош еще и тем, что он автоматически валидирует входные данные. Проверить регулярные выражения можно тут.

Ответ 2



Ну например как-то так: var digits = "0123456789".ToArray(); var lines = File.ReadLines(path); var linesWithBreakingIndices = lines.Select(line => new { line, index = line.IndexOfAny(digits) }).ToList(); var justWords = string.Join(" ", linesWithBreakingIndices.Select(li => li.line.Substring(0, li.index))); var justDigits = string.Join(" ", linesWithBreakingIndices.Select(li => li.line.Substring(li.index))); Вариант без LINQ: var digits = "0123456789".ToArray(); var lines = File.ReadLines(path); StringBuilder justWordsBuilder = new StringBuilder(), justDigitsBuilder = new StringBuilder(); var first = true; foreach (var line in lines) { var index = line.IndexOfAny(digits); if (!first) { justWordsBuilder.Append(' '); justDigitsBuilder.Append(' '); } justWordsBuilder.Append(line, 0, index); justDigitsBuilder.Append(line, index, line.Length - index); first = false; } var justWords = justWordsBuilder.ToString(); var justDigits = justDigitsBuilder.ToString();

Комментариев нет:

Отправить комментарий