Некорректно работает вывод чисел в файл

У меня есть два файла intput.txt и output.txt. В первый файл мне нужно записать 2 строки: в первую длину массива, во вторую сам массив с числами не превышающими 31. А во второй файл мне нужно записать уже 3 строки: в первой строке нечетные числа массива записанного в первом файле, во второй строке четные числа и в третьей слово YES если четных чисел больше чем нечетных или слово NO если наоборот. Вот пример:

input.txt:

6
2 4 5 6 7 8

output.txt:

5 7
2 4 6 8
YES

Задачу я уже почти решил, вот мой код:

var input = "Input.txt";
var output = "Output.txt";
var array = Console.ReadLine().Split(' ')
.Where(x => x.Length > 0).Where(x => int.Parse(x) <= 31).Select(x => int.Parse(x)).ToArray();
File.WriteAllText(input, array.Length + Environment.NewLine + string.Join(" ", array));
var readFile = File.ReadAllText(input).Remove(0, 1); // здесь я удаляю число обозначающее длину
var even = readFile.Where(x => (x % 2 == 0)).ToArray();
var odd = readFile.Where(x => (x % 2 != 0)).ToArray();
File.WriteAllText(output, string.Join(" ", odd));
File.WriteAllText(output, string.Join(" ", even));

Моя проблема такова: во-первых в файл output.txt записывается только вторая строка то есть четные числа, во-вторых записываются они коряво, будто из основного массива просто удалили нечетные числа и на месте пробелов не поставили ничего. Выглядит это так:

 2   4     6     8

Ну и в третьих, программа некорректно работает с двузначными числами. Точнее не вся программа, а только когда дело уже доходит до файла output.txt. Когда я ввожу двузначные числа, например, 10 22 23 26, то в файл input.txt все записывается правильно, а именно:

4
10 22 23 26

Но когда дело доходит до второго файла, то программа не воспринимает двузначные числа, она считает что, к примеру, число 22 это два разных числа и поэтому на выходе получается что-то вроде этого:

 0   2 2   2   2 6

Как вы видите, число 10 она вообще не выводит так как считает что это 1 и 0

Прошу помочь мне с этой проблемой. Заранее спасибо.


Ответы (1 шт):

Автор решения: Igor
var readFile = File.ReadAllText(input).Remove(0, 1);

Что возвращает ReadAllText? Вы думаете, что список. А на самом деле - строку, из которой Вы удаляете один символ.


var even = readFile.Where(x => (x % 2 == 0)).ToArray();

Что здесь x? Вы думаете, что число. А на самом деле - символ.


File.WriteAllText(output, string.Join(" ", even));

Что делает WriteAllText? Вы думаете, что добавляет текст в файл. А на самом деле - полностью пeреписывает файл новым содержимым.


Гугл Вас еще не заблокировал, вся документация доступна.

→ Ссылка