我正在尝试将所有文本格式化的CSV放在列表或数组中。例外是:
索引超出了数组的范围。
我错过的东西也许......
static void Main()
{
///
/// CSV Headers: Code PostDate, T, Description, RecTyp, PropAccountNmbr, Amount
///
string[] CSVs = Directory.GetFiles(@"C:\csv\");
try
{
foreach (string Files in CSVs)
{
string[] allLines = File.ReadAllLines(Files);
var query = File.ReadAllLines(Files)
.Skip(1)
.Select(x => x.Split(','))
.Select(x => new
{
Code = x[0],
PostDate = x[1],
T = int.Parse(x[2]),
Description = x[3],
RecTyp = x[4],
PropAccountNmbr = x[5],
Amount = float.Parse(x[6])
});
foreach (var s in query)
{
Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}",
s.Code, s.PostDate, s.T, s.Description, s.RecTyp, s.PropAccountNmbr, s.Amount);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
以下是CSV的示例,问题是此CSV是具有CSV格式的文本文档(.txt):
Code PostDate T Description RecTyp PropAccountNmbr Amount bk ,2015-03-01,2,Bankard ,none ,000210709109 , 32284.50 bpi ,2015-03-01,2,BPI Classic ,none ,000210709107 , 3415.18 bpi ,2015-03-01,2,BPI Classic ,none ,000210709107 , 19780.00
答案 0 :(得分:0)
使用适当的解析器来处理CSV。
这个很受欢迎:http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
Barebones示例:
static void Main()
{
var files = Directory.GetFiles(@"C:\logs", "*.csv");
foreach (var file in files)
{
using (var csv = new CsvReader(new StreamReader(file, Encoding.UTF8), true))
{
var rows = csv.Select(row => String.Join(" ", row));
foreach (var row in rows)
{
Console.WriteLine(row);
}
}
}
}
答案 1 :(得分:0)
感谢所有评论过的人:我简化了代码,只是将所有值放在数组中,因为它们是在控制台中编写的。我还删除了。通过创建新对象来选择lambda,这样我就可以摆脱超出边界的数组异常。