FileStream Class C # Ввод из текстового файла в массив - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь использовать StreamReader и извлекать данные из текстовых файлов и сохранять их в массиве.У меня возникла проблема, когда я думаю, что это просто, но я в тупике.Когда я распечатываю массив, он печатает каждый токен в текстовом файле вместо одной строки данных, содержащей имя поиска вместе с 11 токенами int. Long_Name.txtsample

public class SSA
{
    public void Search()
    {
        Console.WriteLine("Name to search for?");
        string n = Console.ReadLine();
        Search(n, "Files/Names_Long.txt");
    }
    public int[] Search(string targetName, string fileName)         
    {
        int[] nums = new int[11];
        char[] delimiters = { ' ', '\n', '\t', '\r' };
        using (TextReader sample2 = new StreamReader("Files/Exercise_Files/SSA_Names_Long.txt"))
        {
            string searchName = sample2.ReadLine();

            if (searchName.Contains(targetName))
            {
                Console.WriteLine("Found {0}!", targetName);
                Console.WriteLine("Year\tRank");
            }
            else
                Console.WriteLine("{0} was not found!", targetName);

            while (searchName != null)
            {
                string[] tokensFromLine = searchName.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
                int arrayIndex = 0;
                int year = 1900;
                foreach (string token in tokensFromLine)
                {
                    int arrval;

                    if (int.TryParse(token, out arrval))
                    {
                        nums[arrayIndex] = arrval;
                        year += 10;
                        Console.WriteLine("{0}\t{1}", year, arrval);
                        arrayIndex++;  
                    }  
                }
                    searchName = sample2.ReadLine();
            }
        }
            return nums;
    }
}

1 Ответ

0 голосов
/ 09 марта 2019

Конечно, кода много, этот фрагмент не учитывает дубликаты, но если вы готовы работать с linq, что-то подобное может помочь?Вы также можете просто перебрать массив file_text с помощью цикла for и, возможно, установить в нем свой возвращаемый массив.Во всяком случае, гораздо меньше кода, чтобы связываться с

    public int[] Search(string targetName, string fileName)
    {
        List<string> file_text = File.ReadAllLines("Files/Exercise_Files/SSA_Names_Long.txt").ToList();
        List<string> matching_lines = file_text.Where(w => w == targetName).ToList();
        List<int> nums = new List<int>();
        foreach (string test_line in matching_lines)
        {
            nums.Add(file_text.IndexOf(test_line));
        }
        return nums.ToArray();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...