为了账号安全,请及时绑定邮箱和手机立即绑定

如何逐行合并到CSV文件

如何逐行合并到CSV文件

C#
蛊毒传说 2022-10-23 16:25:34
我有两个 CSV 文件,第一个看起来像这样:ID Time PositionX PositionY 1  232  263  56另一个看起来像这样:ID Time PositionX PositionY   25   2.5       5.5   28   4.1       5.6   35   4.8       6.2    66   5.5       7.5我想要的结果是:ID Time        PositionX PositionY1  25(or 23)   2.5       5.52  28(or 26)   4.1       5.63  35(or 56)   4.8       6.2 所以基本上,我正在尝试合并具有不同数据量的两个不同文件。但是要组合它们,我需要一个密钥,问题是两个数据的密钥不能完全相同。所以我需要从一个数据集中逐行获取,看看是时候了,看看另一个数据集是否有接近这个的值。如果是,则合并它们。这就是为什么我输入“25(或 23)”,因为时间以毫秒为单位,所以我需要确保第一个数据集的行与 28 不匹配,而是与 25 匹配。最终的 Key 可以是 23(来自第一个数据集)或 25(来自第二个数据集)。只要选择的线最接近该值就没有关系。
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

所以我发现了如何做到这一点:


首先我得到Dataset1的时间:


String[] File1Rows = File.ReadAllLines(secondSensor.MyFile);

int number = Convert.ToInt32(File1Rows[1].Split(';')[0]);

然后创建一个由 Dataset2 组成的字符串列表:


String[] AccelerometerRows = File.ReadAllLines(fifthSensor.MyFile);

List<string> AccelerometterTimes = new List<string>(AccelerometerRows);

然后我只取 Dataset2 中的时间并将它们放入字符串列表中


List<int> AccelerometterTimesList = new List<int>();


for (int i = 1; i < AccelerometterTimes.Count; i++)

{

  var x = AccelerometerRows[i].Split(';')[0];

  Console.WriteLine(x);

  AccelerometterTimesList.Add(Convert.ToInt32(x));

}

使用一点 LinQ 来获得具有 O(n) 复杂度的最接近的值:


int closest = AccelerometterTimesList.Aggregate((x, y) => Math.Abs(x - number) < Math.Abs(y - number) ? x : y);

然后打印出来:


Console.WriteLine("number: "+number);

Console.WriteLine("closest "+closest);

找到这个之后,现在我们closest用来获取我们需要获取它的位置的 Dataset2 的行。然后我们占据位置,将它们放在numberDataset1 的行中。


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信