chris cahill Ответов: 2

Проблема в C#, сортировка массива, который был считан из файла


Я должен прочитать список имен из текстового файла в массив с помощью C#, а затем отсортировать массив по алфавиту. Чтение массива из файла работает, но сортировка массива с помощью массива.Сортировка не работает.

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

Код и выходные данные показаны ниже.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Files_Q3
{
    class Program
    {
        static void Main(string[] args)
        {

            // Data is read from Files_Q3.txt and stored in a String Array called dataFromFile[]........

            string fileName = @"Files_Q3.txt";
            Console.WriteLine("The contents of the file {0} is:", fileName);
            Console.WriteLine();

            string[] dataFromFile = new string[10];
            int index = 0;

            StreamReader streamReader = new StreamReader(fileName);
            using (streamReader)
            {
                string fileContents = streamReader.ReadToEnd();

                dataFromFile[index] = fileContents;

                Console.WriteLine(dataFromFile[index]);
                index++;
            }

            Console.WriteLine();
            Console.WriteLine();

            foreach(string name in dataFromFile)
            {
                Console.WriteLine(name);
            }

            // Sort the String array of names

            // Call Array.Sort method.
            Array.Sort(dataFromFile);

            foreach (string name in dataFromFile)
            {
                Console.WriteLine(name);
            }

            Console.WriteLine();
            Console.WriteLine();

        }
    }
}

Выход есть:

Содержимое файла Files_Q3.txt есть:

fred
bill
trevor
chris


fred
bill
trevor
chris


















fred
bill
trevor
chris

Press any key to continue . . .

2 Ответов

Рейтинг:
1

Patrice T

Как заметил Ричард, Вы читаете fie за 1 раз и храните весь файл в 1 строке, поэтому сортировать нечего.
Остальная часть вашего кода неверна, потому что dataFromFile это больше, чем необходимо, и содержит пустые элементы, вы должны изменить свой код, чтобы изменить размер dataFromFile или следите за количеством элементов для сортировки и отображения.
-----
Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Maciej Los

5ed!

Patrice T

Спасибо

Рейтинг:
0

Richard MacCutchan

string fileContents = streamReader.ReadToEnd(); // reads all the file's content into a single string

dataFromFile[index] = fileContents; // sets element 0 to the file content read above.
// so you only have one entry in the array.

То, что вы должны делать, - это использовать цикл для чтения файла строка за строкой и увеличения значения index по ходу дела, таким образом, сохраняя каждую строку в отдельном элементе массива.

[редактировать]
Более простой альтернативой было бы Файл.Метод ReadAllLines (Строка) (System.IO)[^].
[/редактировать]


Maciej Los

5ed!