【问题标题】:Loading a .csv file into dictionary, I keep getting the error "cannot convert from 'string[]' to 'string'"将 .csv 文件加载到字典中,我不断收到错误“无法从 'string[]' 转换为 'string'”
【发布时间】:2012-03-20 16:57:11
【问题描述】:

我使用streamreader 读取.csv 文件,然后我需要拆分值并将它们放入字典中。到目前为止我有:

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
Dictionary<string, string> dict = new Dictionary<string, string>();   
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        using (StreamReader reader = new StreamReader("textwords0.csv"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                string[] parts = line.Split(',');
                dict.Add(parts[0], parts[1]);
            }
        }
    }

我不断收到错误消息“无法从 'string[]' 转换为 'string'”,但不知道如何解决它。

提前致谢!

更新: ...我不小心打开了 csv 文件并且它现在可以工作了,很抱歉浪费了时间,伙计们认为我打开了一个不同的电子表格,一些非常有用的建议虽然感谢所有的帮助!

【问题讨论】:

  • 哪一行给你错误? dict.Add 行?
  • 我们可以查看源代码吗? (textwords0.csv)?
  • VS 说的是第 33 行,也就是最后一个 }。
  • 不确定你是否解决了这个问题,但你确定你得到了你在问题中写的异常吗?我只是在一些随机数据上运行它,它工作得很好
  • 使用CsvParser,有相当不错的第 3 方可以处理您甚至没有想到的边缘情况。

标签: c# dictionary streamreader


【解决方案1】:

如果您使用的是 .NET 4.0,以下内容非常简洁,应该完成同样的事情:

var dict = File.ReadLines("textwords0.csv").Select(line => line.Split(',')).ToDictionary(line => line[0], line => line[1]);

【讨论】:

  • 如果您的数据中包含“,”,则不确定这是否可行。你需要这里的 csv 解析器。
  • 这是脆弱的,因为如果它包含逗号("this is, a value"),值可以用引号括起来 - 值将被分成两半
  • 确实没有检查逗号是否在引号或数据中,但@jesusjuice 似乎并不担心。
  • 您可以尝试使用如下的正则表达式: var rgx = new System.Text.RegularExpressions.Regex("\"(.*?)\"|,"); rgx.Split("open,\"驱动器,越过月球\",kriston");
  • 如果 CSV 文件的字段包含用引号括起来的逗号(这是一种非常常见的情况),则会失败。例如:"This is 1st column, that also has a comma inside, so excel encloses column value in quotes",This is 2nd column no comma inside.
【解决方案2】:

错误实际上是由于您输入的“,”。它需要一个字符“数组”来拆分。这是使用 string.split 进行拆分的示例方法。

string[] parts = line.Split(new string[] { "," }, StringSplitOptions.None);

希望这会有所帮助。 这是假设这是您未指定的错误来自的行。

【讨论】:

  • 显然它的第 33 行是最后一个 }。一般来说,我对编程相当陌生,所以发现这有点令人困惑。谢谢!
猜你喜欢
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多