【问题标题】:CSV file read, then sort, then use array again读取 CSV 文件,然后排序,然后再次使用数组
【发布时间】:2017-03-03 15:52:09
【问题描述】:

请对这种情况提供任何帮助.. c# 新手。

总结:

  1. 需要将 csv 的内容读入数组。
  2. 跳过数组的第一行,然后对第 1 列(公司)进行排序
  3. 然后在代码中进一步使用排序数组(如果更简单,可以不使用标题)。

示例 csv:

 Company,Item,Vendor
 Comp1,Bulb,BnQ
 Comp2,Plug,Tesco
 Comp1,Kettle,Wickes

这是我的尝试,但在尝试访问 sorted[j] 时出现以下错误,我无法解决此问题。

无法将带有 [] 的索引应用于“System.Collections.Generic.IEnumerable”类型的表达式

代码:

var csvRows = System.IO.File.ReadAllLines(filename).Skip(1);
var sorted = csvRows.Select(line => new
                {
                    SortKey = Int32.Parse(line.Split(',')[0]),
                    Line = line
                })
                .OrderBy(x => x.SortKey)
                .Select(x => x.Line);

int maxCount = sorted.Count();

for (int j = 0; j < maxCount; j++)
{
 string line1 = sorted[j].ToString();
 var values = line1.Split(',');
...

【问题讨论】:

  • 很确定添加.ToList() 将起作用:.Select(x =&gt; x.Line).ToList();,否则您可以使用foreach 而不是forforeach (var line in sorted) { var line1 = line.ToString(); ...
  • @Quantic 谢谢,我会试试看它是否适合我
  • 你真的应该学会用谷歌搜索这些异常信息。在 Google 中直接输入 Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable 会告诉您如何修复它。
  • @DarrenYoung 很欣赏这些建议,尽管有点居高临下。这是我做的第一件事,但仍然未能找到解决方案 - 因此发布了这篇文章。

标签: c# arrays csv


【解决方案1】:

您需要将.ToList().ToArray()添加到LINQ查询的末尾,否则您的排序变量是IEnumerable而不是列表或数组,因此您无法使用索引访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多