【问题标题】:Displaying all data from text file显示文本文件中的所有数据
【发布时间】:2015-03-20 17:34:20
【问题描述】:

当用户输入“day”时,if 语句应该运行并显示文本文件中的所有数据,但由于某种原因它只打印第一行“Monday”,但实际上它应该打印:

'星期一 星期五 周四 周三 周二 周一 星期五 周四 周三 周二 周一 星期五'

我该如何解决这个问题?

(如果用户键入,例如,'day',else 语句仍然会写我该如何解决这个问题?)

static void Main(string[] args)
    {
        //int ctr = 0; 

        string[] dayData = File.ReadAllLines("Day.txt");
        string[] dateData = File.ReadAllLines("Date.txt");
        string[] sh1CloseData = File.ReadAllLines("SH1_Close.txt");
        string[] sh1DifferenceData = File.ReadAllLines("SH1_Diff.txt");
        string[] sh1OpenData = File.ReadAllLines("SH1_Open.txt");
        string[] sh1VolumeData = File.ReadAllLines("SH1_Volume.txt");

         Console.WriteLine("Which array would you like to view?");
         string input = Console.ReadLine(); 

          if (input.ToLower() == "day")
             Console.Write("\n{0}", dayData);

          if (input.ToLower() == "date")
             Console.Write("\n{0}", dateData);

          if (input.ToLower() == "close")
             Console.Write("\n{0}", sh1CloseData);

          if (input.ToLower() == "difference")
             Console.Write("\n{0}", sh1DifferenceData);

          if (input.ToLower() == "open")
             Console.Write("\n{0}", sh1OpenData);

          if (input.ToLower() == "volume")
             Console.Write("\n{0}", sh1VolumeData);

         else  
            Console.Write("\nSorry, you entered an invalid term, please enter: day, date, close, difference, open or volume.");

         Console.Read();
    }

【问题讨论】:

    标签: c# if-statement


    【解决方案1】:

    文件中的每一行在数组中都有一个条目。通过将整个数组传递给 Console.Write 方法,您正在做一些奇怪的事情,该方法的第二个参数被解释为您的字符串格式参数。由于您只有一个格式索引(“{0}”),因此您只能看到数组中的第一项。

    要查看所有由空格分隔的条目,请将每个条件更改为:

    if (input.ToLower() == "day")
        Console.WriteLine(string.Join(' ', dayData));
    

    我会进一步改进您的应用程序,使其仅根据输入的项目加载所需的文件。您可以减少文件 I/O 并消除不必要的 CPU/内存使用。通过执行以下操作可能会更容易维护:

    static void Main(string[] args)
    {
        // map expected inputs to their corresponding files
        var inputMap = new Dictionary<string, string>
        {
            { "day", "Day.txt" },
            { "date", "Date.txt" },
            { "close", "SH1_Close.txt" },
            ...
        };
    
        Console.WriteLine("Which array would you like to view?");
        string input = Console.ReadLine(); 
    
        // Make sure there was input and it's in the map; get it if it is
        string filePath;
        if (string.IsNullOrEmpty(input) || !inputMap.TryGetValue(input.ToLower(), out filePath))
        {
            Console.WriteLine("Sorry, you entered an invalid term, please enter: day, date, close, difference, open or volume.");
            return;
        }
    
        // Make sure the file exists
        if (File.Exists(filePath))
        {
            // read all lines from the file
            string[] fileLines = File.ReadAllLines(filePath);
            // join them with a space and output to console
            Console.WriteLine(string.Join(' ', fileLines));
        }
        else
        {
            Console.WriteLine("Sorry, the file doesn't exist.");
        }
    
        Console.Read();
    }
    

    【讨论】:

      【解决方案2】:

      上面的答案已经回答了你问题的第一部分,但是关于你的第二个问题

      此外,如果用户键入,例如“day”,else 语句仍然会写我该如何解决?

      你有一堆单行 if 语句,然后最后一个 if 语句也有一个 else。因此,按照编写代码的方式,除非用户键入“volume”,否则您将始终打印 else。如果您真的只想在未输入任何已处理的输入时打印 else,您需要这样做:

      if (input.ToLower() == "day")
          Console.Write("\n{0}", dayData);
      
      else if (input.ToLower() == "date")
          Console.Write("\n{0}", dateData);
      
      else if (input.ToLower() == "close")
          Console.Write("\n{0}", sh1CloseData);
      
      else if (input.ToLower() == "difference")
          Console.Write("\n{0}", sh1DifferenceData);
      
      else if (input.ToLower() == "open")
          Console.Write("\n{0}", sh1OpenData);
      
      else if (input.ToLower() == "volume")
          Console.Write("\n{0}", sh1VolumeData);
      
      else  
         Console.Write("\nSorry, you entered an invalid term, please enter: day, date, close, difference, open or volume.");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 1970-01-01
        • 2012-08-29
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 2014-11-01
        相关资源
        最近更新 更多