我有一個非常大的文件(> 1GB),它是管道分隔的。 我想使用file.readlines查詢文件,拆分每一行,根據索引列表(我將提供索引數組)從索引列中選擇特定元素,並將其返回給自定義類型類對象的字典。使用LINQ從文件中選擇一個字符串,對其進行分割並返回指定的成員
目前我有這樣的:
strIndexes = "1,3,5,7";
var selected = strIndexes.Split(',')
.Select(x => int.Parse(x))
.Select(index => File.readlines(myFile)
.Select(x => split('|')[index]).toArray();
但是這種查詢是由索引領導,是不是有效的。 它返回4個矢量,每個用於上例中指定的4個索引。
我將不勝感激任何幫助。
更新:
謝謝大家的評論。 我正在添加一些示例數據。 文件數據看起來樣樣:
Line1: aa|ab|de|gt|hj|de|fr|gt|hy // Header
Line2: sd|12|f4|tr|hj|df|ds|e3|12
Line3: 34|fd|3d|35|df|45|dq|32|dd
.
.
.
Line N 34|df|f3|df|33|s2|23|df|44
N =數百萬行。數據格式僅用於示例,每個單元格包含不同長度和結構的字符串。
現在,用戶以標題列名的形式輸入他想要的數據,例如:ab,de,fr,hy,我解析這個並理解我需要第2,3,7和9列。 現在我想解析文件並返回一個對象,其中每個條目都是一個字典條目,它表示一行中的數據,該行中包含一個鍵(這是一列數據)和一個值爲字符串[]的數據的標記化數據。
所以我們可以說這個例子,我想將數據按列7號進行排序,所以最終的字典是:
[ds]->[12,f4,12]
[dq]->[fd,3d,dd]
.
.
.
[23]->[df,f3,44]
一兩件事,我會避免讀取該文件爲每個索引每次。 – Lee 2012-08-01 20:27:52
很難遵循你想要達到的目標。如果您可以提供樣本輸入和期望的輸出,那麼幫助您會容易得多。 – 2012-08-01 20:28:55
@Xander:我正確地裝入了'ReadLines'和'.ToArray()',並將'.ToArray()'調用移動到下一行以匹配語句的其餘部分。語義上有什麼變化? – 2012-08-01 20:29:10