2017-09-03 38 views
0

我有一個CSV文件(使用​​3210作爲分隔符)。我使用了StreamReader來讀取文件的每一行。該文件包含近4000行,每行有16列。我只需要每行最後5個數字,但我不確定如何分割每一行並只獲取最後5個數字。只需要CSV文件中每行的最後幾項

實施例的數據:

2002; 10 ;; 0; 0 EUR; 122; 448 823歐元; 8315; 6 973 EUR; 192233; 586 EUR; 6; 13; 55; 66; 81
2002; 9 ;; 0; 0 EUR; 62; 750 138 EUR; 4784; 10 294 EUR; 137390; 697 EUR; 13; 51; 55; 62; 74
2002; 8 ;; 0; 0 EUR; 56 ; 801 650歐元; 6377; 7 454歐元; 177197; 522歐元; 12; 13; 19; 28; 85

因此,對於第一行,我實際需要的數據是{ 6; 13; 55; 66; 81 }

+0

請發表您的代碼,以便我們可以看到你已經嘗試了什麼。 – Maritim

回答

0

您可以使用String.Split方法輕鬆完成此操作。

foreach(var line in file) 
{ 
    var result = test.Split(';'); 
    var last = result.Length-1; 
    var first = result[last-4]; 
    var second = result[last-3]; 
    var third = result[last-2]; 
    var fourth = result[last-1]; 
    var fifth = result[last]; 
} 

作爲一個側面說明,使用CSV文件打交道時,我發現非常有用的一個庫是LINQtoCSV。有一個NuGet包可用,因此它可以很容易地添加到項目。如果您將不得不對此數據進行其他操作,您可能需要查看該數據。

編輯:
這裏是LINQtoCSV這樣的一個例子。如果你閱讀文檔,他們會展示如何設置一個你可以閱讀的更強類型的類,爲簡單起見,我只是以一種純粹的方式來做這件事。

// Define the class for reading, both IDataRow and DataRowItem 
// are part of the LINQtoCSV namespace 
public class MyRow : List<DataRowItem>, IDataRow 
{ 
} 

// Create the context, the file description and then read the file. 
var context = new CsvContext(); 
var inputFileDescription = new CsvFileDescription 
{ 
    SeparatorChar = ';', 
    FirstLineHasColumnNames = false, // Change this if yours does 
}; 

// Note: You don't need to use your stream reader, just use the LINQtoCSV 
// Read method to load the data into an IEnumerable. You can read the 
// documentation for more information and options on loading/reading the 
// data. 
var products = context.Read<MyRow>(@"yourfile.csv", inputFileDescription); 

// Iterate all the rows and grab the last 5 items from the row 
foreach (var row in products) 
{ 
    var last = row.Count - 1; 
    var first = row[last - 4]; 
    var second = row[last - 3]; 
    var third = row[last - 2]; 
    var fourth = row[last - 1]; 
    var fifth = row[last]; 
} 
0

我正按照您提供的示例編寫邏輯的一部分。這將分割一整行並返回數組中的最後五個數字。

string row = "2002; 10; ; 0; 0 EUR; 122; 448 823 EUR; 8315; 6 973 EUR; 192233; 586 EUR; 6; 13; 55; 66; 81"; 
string[] rowArray = row.Trim().Split(';'); 
string[] numbers = rowArray.Skip(Math.Max(0, rowArray.Length - 5)).ToArray(); 

numbers將包含所有你想要的最後五個號碼,您可以用indexes- numbers[0], numbers[1],等..高達numbers[4]訪問。

注意:您必須將從StreamReader讀取的數據拆分爲行。你得到行,循環遍歷每一行,並使用上面三行代碼得到最後五個數字。

+0

@SventekKornéliaCsilla你必須接受這裏發佈的答案之一,它會回答/解決你的問題。 –

0

您可以Cinchoo ETL庫嘗試,來解析文件和訪問的最後5名成員如下

foreach (dynamic rec in new ChoCSVReader("quotes.csv").WithDelimiter(";")) 
{ 
    Console.WriteLine("{0}", rec[11]); 
    Console.WriteLine("{0}", rec[12]); 
    Console.WriteLine("{0}", rec[13]); 
    Console.WriteLine("{0}", rec[14]); 
    Console.WriteLine("{0}", rec[15]); 
} 
相關問題