我有包含一些值的CSV文件。看起来像这样:
1;11,19;91,69
1;2,8 ;26,54
2;0 ;2,79
2;7,8 ;0
3;0 ;35,44
1;0 ;8,89
2;27,33;16,5
3;0 ;35,49
2;0 ;42,69
2;0 ;93,09
我需要将新的字符串写入新的CSV,其中包含第1列和第2列的总和,并按第0列进行排序。它必须看起来像这样:
1;13,99;127,12
2;35,13;155,07
3;0 ;70,93
开始时,我尝试计算列的总和,但即使在那儿,我仍然遇到问题,无法弄清楚该怎么做。现在,我已经按照列0的值进行排序了。现在我的代码看起来像这样。
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim file As String() = IO.File.ReadAllLines("path\input.csv")
Dim sum As Decimal
sum = 0
Dim sb As New List(Of String)
For Each line In file
Dim col = line.Split(";"c)
Dim result As Decimal = sum + col(1)
Dim result1 As Decimal = sum + col(2)
sb.Add(String.Join(";", col(0) & ";" & result & ";" & result1))
Next
IO.File.WriteAllLines("path\output.csv", sb.ToArray())
End Sub
我用Python的答案看到了相同的问题,但是我不知道如何将代码转换为VB.Net。编辑:不得不说,第0列中的数字仅是示例,并且有50多个唯一值。
为了澄清,实际上您不需要对条目进行排序,您应该将它们按第一列分组,然后将每个组的第二和第三列相加。
这是另一个解决方案:
Imports System.IO
Imports System.Linq
Imports System.Globalization
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim inputFile = "path/input.csv"
Dim outputFile = "path/output.csv"
Dim ci = New CultureInfo("de-DE")
File.WriteAllLines(outputFile, File.ReadLines(inputFile).
Select(Function(x) x.Split(";"c)).
GroupBy(Function(x) Integer.Parse(x(0))).
Select(Function(x)
Return String.Format(
"{0};{1};{2}",
x.Key,
x.Sum(Function(y) Decimal.Parse(y(1), ci)),
x.Sum(Function(y) Decimal.Parse(y(2), ci)))
End Function).ToArray)
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句