【问题标题】:C# Writeline its not giving me the expectedC#Writeline 它没有给我预期的
【发布时间】:2018-10-29 02:04:04
【问题描述】:

实际上这是一个基本问题。
我正在尝试读取 CSV 文件并在控制台中仅写入包含“Honda”字样的文件。

    class Program
{
    static void Main(string[] args)
    {
        var reader = new StreamReader(File.OpenRead(@"C:\Users\Vitor\Downloads\LogCombustivel.csv"));

        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(',');
            if (values[0] == "Honda")
            {
                Console.WriteLine(line);
            }
        }
        Console.ReadLine();
    }
}

这样,控制台不会给出任何结果。
但是向我展示所有结果的基本方式如下,它的工作原理

class Program
{
    static void Main(string[] args)
    {
        var reader = new StreamReader(File.OpenRead(@"C:\Users\Vitor\Downloads\LogCombustivel.csv"));

        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            Console.WriteLine(line); 
        }

        Console.ReadLine();
    }
}

关于我做错了什么的任何线索?

【问题讨论】:

  • 您只想要“Honda”开头的行吗?
  • 是的,没错
  • 所以我猜下面的答案没有帮助。你能发布实际的CSV吗? (只有几行)
  • 这可能是很多事情。仔细检查文件,或调试并检查阵列。一种明显的可能性是values[0].Trim() == "Honda" 会更好。
  • 您应该考虑使用库来读取 CSV 文件,因为可以引用值等。还可以考虑使用 File.ReadLines 而不是 StreamReader(这应该位于using 块中)。

标签: c# console.writeline


【解决方案1】:

如果第一个元素是“Honda”,下面的代码只会显示一行:

if (values[0] == "Honda")
{
}

如果您想加载包含“Honda”的每个元素,那是不对的。为此,您可以使用 Linq 的 Contains() 方法。

为 Linq 添加命名空间:

using System.Linq;

改用以下代码,它将在数组中查找任何“Honda”元素:

if (values.Contains("Honda"))
{
   // Your Code
}

【讨论】:

    【解决方案2】:

    添加了搜索字符串 Honda 的 linq 查询。

    class Program
    {
        static void Main(string[] args)
       {
        var reader = new StreamReader(File.OpenRead(@"C:\Users\Vitor\Downloads\LogCombustivel.csv"));
    
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(',');
            if (values.Any( x=> x == "Honda"))
            {
                Console.WriteLine(line);
            }
        }
        Console.ReadLine();
        }
    }
    

    【讨论】:

    • 您可以使用Array.IndexOf(values, "Honda") >= 0 或(与Linq)values.Contains("Honda") 而不是Any 与一个谓词(Func<,>)一起检查是否相等。
    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多