2016-11-13 9 views
-1

Все, что я хочу сделать, - это программа, которая читает файл .txt, записывает все, что находится в файле, и вводит его в список. Но он скажет мне, что я не могу его преобразовать (независимо от того, устанавливаю ли переменную как var, string, int или что-то еще), я попытался использовать int.TryParse, Convert.ToInt32() и т. Д. Пока Convert.ToInt32 отключает его когда я запускаю программу, она сработает.Невозможно преобразовать из 'System.IO.FileStream' в 'int' при чтении текстового файла в список

static void Main(string[] args) 
    { 
     string listPath = @"K:\listData\listData.txt"; 
     int listDataSum = 0; 
     int listDataMax = 0; 
     int listDataMin = 0; 
     string userInput = null; 

     var numeralListData = System.IO.File.OpenRead(listPath); 
     var listData = new List<int>(numeralListData); 
     listDataSum = listData.Sum(); 
     listDataMax = listData.Max(); 
     listDataMin = listData.Min(); 

     Console.WriteLine(
      "Please input the data you wish to see, type 'help' for what to type"); 
     userInput = Console.ReadLine(); 
     userInput.ToLower(); 

     if (userInput == "sum") 
     { 
      Console.WriteLine("The sum of the list is " + listDataSum); 
     } 

EDIT: Если вопрос является дубликатом, пожалуйста, пришлите ссылку, я попытался функцию поиска и все другие вопросы были слишком сложными для кого-то с минимальным опытом, как я понимаю.

+0

Почему вы пытаетесь добавить файл в список Интс? Вы пытаетесь прочитать текстовый файл по строкам? – MikeS159

+0

Возможно, вы хотите что-то вроде 'ReadLines()'. – SLaks

+0

Пробовал использовать ReadLines, получил аналогичную ошибку. – Cinnamonbun

ответ

1

Если вы пытаетесь прочитать целые числа из файла, то получите их min, max и sum, которые вы хотите прочитать каждую строку в массиве строк, затем попытайтесь преобразовать каждую строку в int и добавить ее в список.

static void Main(string[] args) 
{ 
    string listPath = @"K:\listData\listData.txt"; 
    int listDataSum = 0; 
    int listDataMax = 0; 
    int listDataMin = 0; 
    string userInput = null; 

    var fileReader = new System.IO.StreamReader(listPath); 
    List<string> stringsFromFile = new List<string>(); 
    string lineOfText; 
    while ((lineOfText = fileReader.ReadLine()) != null) 
    { 
     stringsFromFile.Add(lineOfText); 
    } 
    List<int> intsFromFile = new List<int>(); 
    foreach(string s in stringsFromFile) 
    { 
     int temp = 0; 
     if(Int32.TryParse(s, out temp)) 
     { 
      intsFromFile.Add(temp); 
     }    
    } 

    listDataSum = intsFromFile.Sum(); 
    listDataMax = intsFromFile.Max(); 
    listDataMin = intsFromFile.Min(); 

    Console.WriteLine("Please input the data you wish to see, type 'help' for what to type"); 
    userInput = Console.ReadLine(); 
    userInput.ToLower(); 

    if (userInput == "sum") 
    { 
     Console.WriteLine("The sum of the list is " + listDataSum); 
    } 
} 
+0

Я попытался использовать некоторые из вашего кода, я получаю, что файл ошибки не содержит определения для «StreamReader» – Cinnamonbun

+0

Я исправил то, что, по моему мнению, вызывало ошибку, попробуйте сейчас. – MikeS159

+0

Awesome, просто получив ошибку во время выполнения, но я уверен, что знаю, как исправить его как .txt, который я использую, имеет все ints в одной строке, мне просто нужно их разделить и перечислить строку за строкой и посмотреть, это работает, спасибо за помощь. Если он работает, я помечаю его как решение – Cinnamonbun

1

Предположим, что каждый номер находится на отдельной строке в текстовом файле

  • Сначала прочитайте все строки
  • преобразовать все строки в новый список или массив с TryParse из string в int
  • Управлять непосредственно с помощью метода и параметра для выполнения расчетов (чтобы вы могли его повторно использовать). Теперь вы делаете вычисления с Max(); и т. Д., Которые вы, возможно, не собираетесь использовать, если пользователь этого не спрашивает.

Пример: (немного другой подход, то за вами, надеюсь, вы узнаете из него)

static void Main(string[] args)  
{ 
    string listPath = @"K:\listData\listData.txt"; 

    var lines = File.ReadAllLines(listPath).ToList(); 

    var number = 0; 
    var numbers = lines.Where(line => int.TryParse(line, out number)).Select(n => number).ToList();   

    Console.WriteLine("Please input the data you wish to see, type 'help' for what to type"); 
    string userInput = Console.ReadLine().ToLower(); 

    if (userInput == "sum") 
    { 
     Console.WriteLine("The sum of the list is " + ListDataSum(numbers)); 
    } 

    Console.ReadLine(); 
} 

private static int ListDataSum(List<int> list) 
{ 
    return list.Sum(); 
}