我有一个CSV文件(使用';'
作为分隔符)。我使用了StreamReader
来读取文件的每一行。该文件包含近4000行,每行有16列。我只需要每行最后5个数字,但我不确定如何分割每一行并只获得最后5个数字。
示例数据:
2002; 10 ;; 0; 0 EUR; 122; 448 823 EUR; 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 EUR; 6377; 7 454 EUR; 177197; 522 EUR; 12; 13; 19; 28; 85
因此,对于第一行,我实际需要的数据是{ 6; 13; 55; 66; 81 }
答案 0 :(得分: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];
}
答案 1 :(得分: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
将包含您可以使用索引访问的所有最后五个数字 - numbers[0], numbers[1],
,依此类推..直至numbers[4]
。
注意:您必须将从StreamReader
读取的数据拆分为行。你获得行,循环遍历每一行,并使用上面三行代码来获取最后五行数字。
答案 2 :(得分: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]);
}