显示文本文件中的所有数据

时间:2015-03-20 17:34:20

标签: c# if-statement

当用户输入' 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();
    }

2 个答案:

答案 0 :(得分:1)

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

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

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();
}

答案 1 :(得分:0)

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

  

此外,如果用户输入了例如&#39; day&#39; else语句仍然写道如何解决这个问题?

你有一堆单行if语句,然后最后一个if语句也有一个else。因此编写代码的方式,除非用户键入&#34; volume&#34;,否则您将始终打印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.");