所以我最近不得不撕开一个CSV-esque文件,并决定用linq这样做(然后用F#清理它,使用懒散的评估策略不按顺序monad。那天我得到了许多时髦点)。
一般算法如下:
将每3行组合成1行,只要有:,将冒号和前面的所有内容串起来,如果有任何空行/字符串,则删除它们(这与从原始数据中复制数据的特性有关)来源,一位朋友做了剪切和粘贴,它的结构很好,足以将其拆分而无需修改数据。)
我通过“工作流程”执行此操作,如下所示(在伪代码中)
int i=0;
stringbuilder sb=new stringbuilder();
//strip empty lines omitted, was basically identical to the strip
//empty strings below
foreach i in lines
if i%3=2-> add line to list make new stringbuilder;//UGLY!!!!!
else stringbuilder.concat(',', i);
var query1 = from i in list where i.IsNullOrEmpty == false select i;
var query2 = from i int query1 where i.Contains(:) select (i.split())[1];//possible failure here, but I didn't bother to fix the linq version.
foreach i in lines
streamwriter.write(i);
我现在知道Linq中的“into”子句,但我想要做的就是摆脱那个mod 3 foreach
我觉得应该有一种方法将集合分组或分区为3的数组,然后连接这些数组的每个元素(或类似的东西),但我无法弄清楚如何。我知道接受和接受,但无法弄清楚如何利用它们......
由于