我很新的編程在C#中,我有一些問題,以處理大量的數據在一個XML文件的幾個CSV文件。如何合併大的CSV文件,並將它們轉換成一個XML文件
的CSV文件,我有如下所示:
"ID","NODE","PROCESS_STATE","TIME_STAMP","PREV_TIME_STAMP","CALCULATED"
206609474,2175,47,31.03.2015 00:01:25,31.03.2015 00:01:24,1
206609475,2175,47,31.03.2015 00:02:25,31.03.2015 00:01:25,1
206609476,2175,47,31.03.2015 00:03:25,31.03.2015 00:02:25,1
在第一步我刪除不適合我的計算重要的條目(例如我刪除不包含具體日期的所有文件),然後再保存每個文件。
第二步是將所有準備好的文件(~100)合併成一個大的csv文件。
直到這裏一切工作都很好,很快。
的最後一步是將CSV文件轉換成以下格式的XML文件:
<data-set>
<PDA_DATA>
<ID>484261933</ID>
<NODE>2190</NODE>
<PROCESS_STATE>18</PROCESS_STATE>
<PREV_TIME_STAMP>05.05.2016 22:53:41</PREV_TIME_STAMP>
</PDA_DATA>
<PDA_DATA>
<ID>484261935</ID>
<NODE>2190</NODE>
<PROCESS_STATE>47</PROCESS_STATE>
<PREV_TIME_STAMP>06.05.2016 00:44:17</PREV_TIME_STAMP>
</PDA_DATA>
</data-set>
正如你可以看到我刪除元素(「TIME_STAMP」,「計算」),並進一步我還刪除了條目「TIME_STAMP」等於「PREV_TIME_STAMP」的所有條目。我正在用下面的代碼:
string[] csvlines = File.ReadAllLines("All_Machines.csv");
XElement xml = new XElement("data-set",
from str in csvlines
let columns = str.Split(',')
select new XElement("PDA_DATA",
new XElement("ID", columns[0]),
new XElement("NODE", columns[2]),
new XElement("PROCESS_STATE", columns[5]),
new XElement("TIME_STAMP", columns[6]),
new XElement("PREV_TIME_STAMP", columns[9]),
new XElement("CALCULATED", columns[10])));
// Remove unneccessray elements
xml.Elements("PDA_DATA")
.Where(e =>
e.Element("TIME_STAMP").Value.Equals(e.Element("PREV_TIME_STAMP").Value))
.Remove(); // Remove entries with duration = 0
xml.Elements("PDA_DATA").Elements("TIME_STAMP").Remove();
xml.Elements("PDA_DATA").Elements("PREV_PROCESS_STATE").Remove();
xml.Elements("PDA_DATA").Elements("CALCULATED").Remove();
xml.Save("All_Machines.xml");
這是我的問題。如果我排除刪除時間戳等於PrevTimeStamp的元素的行,那麼所有工作都非常好,速度也很快。 但是使用這個命令,它需要花費很多時間,並且只能使用小的csv文件。
我對資源節約型編程毫無知識,所以如果有人能告訴我問題在哪裏或如何做得更好,我會非常高興。
也許你可以查看PLINQ,看看你是否可以並行運行linq查詢https://msdn.microsoft.com/en-us/library/dd460688(v=vs 0.110)。如px – Bassie
在那找不到任何東西。但我試圖創建一個第二個XML文件,其中只添加了滿足條件的元素。這似乎要快得多,我現在可以處理100MB的csv文件,這在以前是不可能的! – Aiye
你確定你上面發佈的代碼和csv是否創建了給定的xml?當我對csv運行該代碼時,我的xml只有1個'PDA_DATA'元素,其中的元素包含字符串'ID','NODE'等...請發佈一個完整的可重用示例 – Bassie