猿问

如何逐行合并到CSV文件

我有两个 CSV 文件,第一个看起来像这样:


ID Time PositionX PositionY 

1  23

2  26

3  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 PositionY

1  25(or 23)   2.5       5.5

2  28(or 26)   4.1       5.6

3  35(or 56)   4.8       6.2 

所以基本上,我正在尝试合并具有不同数据量的两个不同文件。但是要组合它们,我需要一个密钥,问题是两个数据的密钥不能完全相同。


所以我需要从一个数据集中逐行获取,看看是时候了,看看另一个数据集是否有接近这个的值。如果是,则合并它们。


这就是为什么我输入“25(或 23)”,因为时间以毫秒为单位,所以我需要确保第一个数据集的行与 28 不匹配,而是与 25 匹配。


最终的 Key 可以是 23(来自第一个数据集)或 25(来自第二个数据集)。只要选择的线最接近该值就没有关系。


蛊毒传说
浏览 95回答 1
1回答

Smart猫小萌

所以我发现了如何做到这一点:首先我得到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++){&nbsp; var x = AccelerometerRows[i].Split(';')[0];&nbsp; Console.WriteLine(x);&nbsp; 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 的行中。
随时随地看视频慕课网APP
我要回答