亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何逐行合并到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 關注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號