就像我说的,我正在使用CSV解析器,可以在这里找到。The CSV Parser
我能够使用此
成功运行代码 using (var stream = File.OpenRead(fileSaveLocation))
using (var reader = new StreamReader(stream))
{
var data = CsvParser.ParseHeadAndTail(reader, ',', '"');
var header2 = data.Item1;
var lines = data.Item2;
foreach (var line in lines.Take(5))
{
for (var i = 0; i < header2.Count; i++)
if (!string.IsNullOrEmpty(line[i]))
{
sb.Append(header2[i] + "=" + line[i]);
sb.Append(Environment.NewLine);
}
}
}
但我希望能够选择约10项。因此,如果我尝试添加一个新的变量,如:
var test = data.Item3;
它无效。
当我尝试运行它时,它会告诉我:
错误1'System.Tuple,System.Collections.Generic.IEnumerable&gt;&gt;' 不包含'Item3'的定义,也没有扩展方法 'Item3'接受第一个类型的参数 'System.Tuple,System.Collections.Generic.IEnumerable&GT;&GT;' 可以找到(你错过了使用指令或程序集 引用?)C:\ repo \ Scriptalizer \ default.aspx.cs 82 37 Scriptalizer(1)
在我尝试运行程序之前会抛出错误。它说它无法解决Item3。我怎样才能让它放入我想要的尽可能多的列?
另外,有没有办法动态选择项目?假设用户可以输入“忽略前3行”,例如,如何声明这些并获取正确的列?
答案 0 :(得分:0)
Haven特别使用了这个CSV解析库,但听起来你需要以下内容:
using (var stream = File.OpenRead(fileSaveLocation))
{
using (var reader = new StreamReader(stream))
{
// Get the header and rows as a two-item tuple
var data = CsvParser.ParseHeadAndTail(reader, ',', '"');
// Get header and and rows into separate variables
var header2 = data.Item1;
var lines = data.Item2;
// This is where you get the rows you want
// So in this example, we'll skip the first
// 3 lines and then get the next 10 lines
var filteredLines = lines.Skip(3).Take(10);
// Iterate through the lines and do whatever you need to do
foreach (var line in filteredLines)
{
for (var i = 0; i < header2.Count; i++)
{
if (!string.IsNullOrEmpty(line[i]))
{
sb.Append(header2[i] + "=" + line[i]);
sb.Append(Environment.NewLine);
}
}
}
}
}
答案 1 :(得分:0)
这是我最终做的工作。
using (var stream = File.OpenRead(fileSaveLocation))
using (var reader = new StreamReader(stream))
{
var data = CsvParser.ParseHeadAndTail(reader, ',', '"');
var header2 = data.Item1;
var lines = data.Item2;
for (int i = 4; i < header2.Count; i++)
sb.Append(("\"" + header2[i] + "\"" + ","));
sb.Append(sb.ToString().TrimEnd(','));
sb.Append(Environment.NewLine);
foreach (var line in lines)
{
for (var i = 4; i < header2.Count; i++)
{
sb.Append("\"" + line[i] + "\"");
if (i != header2.Count - 1)
{
sb.Append(",");
}
}
sb.Append(Environment.NewLine);
}
}