OpenFileDialog ofd = new OpenFileDialog();
DataTable dtt = new DataTable();
[DelimitedRecord(",")]
private class myCSVFile
{
public string Supplier;
public string Product;
public string Price;
}
private void btnImport_Click(object sender, RoutedEventArgs e)
{
FileHelperEngine engine = new FileHelperEngine(typeof(myCSVFile));
myCSVFile[] result= new myCSvFile[];
foreach (string filepath in ofd.FileNames)
{
for (int i = 0; i < ofd.FileNames.Lenght; i++)
{
result[i] = File.ReadAllLines(System.IO.Path.ChangeExtension(filepath,".csv"));
}
}
dtt.Columns.Add("Suplier", typeof(string));
dtt.Columns.Add("Supplier Type", typeof(string));
dtt.Columns.Add("Price", typeof(string));
foreach (myCSVFile c in result)
{
Console.WriteLine(c.Supplier + " " + c.Product + " " + c.Price);
dtt.Rows.Add(c.Supplier, c.Product, c.Price);
dataGridv.DataContext = dtt.DefaultView;
}
}
我有一个文件助手引用,我在线下载以帮助阅读.csv,这适用于单个csv文件,但不适用于多选。我使用ofd.FileNames来获取和路径数组,并尝试使用循环来读取特定路径的所有行,但它在
时给出了错误 result[i] = File.ReadAllLines(System.IO.Path.ChangeExtension(filepath,".csv"));
它说不能隐瞒将'string []'转换为'Spurs.Import.myCSVFile'请问我做错了什么。还有另外一种方法可以做到这一点,我是c#
的新手答案 0 :(得分:0)
您初始化myCSVFile[] result = null;
因此result[i] = ...
将失败。
编辑:在更新的问题中,您初始化myCSVFile[] result = new myCSVFile[];
,这是无效的语法。你必须给出数组的大小。
您在嵌套循环中遍历FileNames集合
foreach (string filepath in ofd.FileNames) {
for (int i = 0; i < ofd.FileNames.Length; i++) {
result[i] = //somestuff
}
}
如果您选择了n个文件,result[i]
将被分配n ^ 2次。
File.ReadAllLines()
发送string[]
。数组的每个元素都在给定文件中。 myresult[i]
必须是myCSVFile
的实例。您将不得不对filecontents进行一些额外的解析来创建这样的实例。
编辑:我不确定,在解析部分说什么,不知道文件结构。但是,说实话,如果你不明白为什么你不能将string[]
分配给某个自定义课程,我们就无法在这里帮助你。