【发布时间】:2011-11-08 15:45:07
【问题描述】:
我有一个 CSV 字符串:
string data = "G9999999990001800002777107050,G9999999990002777107HMNLAQKPRLLHRAQRWJ010,1,3,29,P,6.74,11.23,07,P,5.25,14.29,08,P,6.89,16.92,2,5,052,U,4.78,31.04,095,O,9.59,27.63,076,P,3.85,16.50,094,P,4.84,18.30,093,O,8.28,26.90,062,P,4.64,16.00,061,P,2.84,12.87,090,O,7.90,20.83,050,P,3.36,16.59,057,B,12.05,34.46,1,1,111,P,7.26,13.79";
前 2 个元素是 ID。
第二个 2 表示一行和一列,例如 1 Row 3 Columns。每个数据块中有 4 个元素,所以我需要过滤掉 12 个元素,它们是:29,P,6.74,11.23,07,P,5.25,14.29,08,P,6.89,16.92
之后的下一个元素是 2 和 5,例如 2 行 5 列。同样,每个数据块都有 4 个元素,所以我需要 40 个元素,这将导致 052,U,4.78,31.04,095,O,9.59,27.63,076,P,3.85,16.50,094,P,4.84,18.30,093,O,8.28,26.90,062,P,4.64,16.00,061,P,2.84,12.87,090,O,7.90,20.83,050,P,3.36,16.59,057,B,12.05,34.46
接下来的元素是 1,1 例如 1 Row 1 Column 所以取 4 个元素,即 111,P,7.26,13.79
指标(例如 1,3 & 2,5 & 1,1)可能不同,因此显然 CSV 长度会不同。这些指标也可能有很多组,而在这个例子中不仅仅是 3 个。
我已经开始使用Aggregate((x, y) => x * y) 方法来计算我们需要多少,但我的代码不够动态,无法考虑超过 3 个指标集
有没有办法找到这些指标,然后从 CSV 字符串中的正确位置返回正确数量的元素?
请注意:我并没有将自己限制为仅使用 LINQ 的解决方案。我只是认为可能有内置的方法来处理这个问题。
【问题讨论】:
-
您为什么要尝试使用 Linq 解决这个解析问题。你不知道在 Linq 存在之前人们解析得很好吗?
-
是的,很公平。我只是认为这可能更容易。我不想要一个明确的 LINQ 解决方案。什么都行。
-
在这种情况下,您基本上是在发布“给我代码”问题。这应该关闭。
-
这对我来说似乎不是一个 LINQ 问题。在这种情况下,将这个字符串读入您创建的对象结构可能更容易,因此更容易使用。
-
因为字符串的长度是动态的,所以我不确定如何在对象中公开相关属性
标签: c# .net linq c#-4.0 .net-4.0