2017-07-05 66 views
1

我需要将多个文本文件导入到相同的datatable。我正在使用多选设置为true的openfiledialog。选择只有一个文件时,我得到了这个工作,但要求是选择许多文本文件。我怎样才能做到这一点?这是创建datatable功能:Winforms - 将多个文本文件导入同一个数据表

 public static DataTable DataTableFromTextFile(string[] data) 
    { 
     DataTable result; 


     result = FormDataTable(data); 



     return result; 
    } 

    private static DataTable FormDataTable(string[] LineArray) 
    { 
     DataTable dt = new DataTable(); 

     AddColumnToTable(LineArray, ref dt); 

     AddRowToTable(LineArray, ref dt); 

     return dt; 
    } 

    private static void AddRowToTable(string[] valueCollection, ref DataTable dt) 
    { 
     for (int i = 0; i < valueCollection.Length; i++) 
     { 
      string[] values = valueCollection[i].Split(new[] { "|" }, 5, StringSplitOptions.RemoveEmptyEntries); 
      string[] col1 = values[0].Split(new[] { ":" }, 3, StringSplitOptions.RemoveEmptyEntries); 
      int count = values.Length; 
      DataRow dr = dt.NewRow(); 

      dt.Rows.Add(dr); 
     } 
    } 

    private static void AddColumnToTable(string[] columnCollection, ref DataTable dt) 
    { 
     string[] columns = columnCollection[0].Split(new[] { "|" }, 5, StringSplitOptions.RemoveEmptyEntries); 
     string[] col1 = columns[0].Split(new[] { ":" }, 3, StringSplitOptions.RemoveEmptyEntries); 
     string[] names = { "a", "b", "c", "d", "e", "f", "g" }; 
      for(int i = 0; i < columns.Count() + col1.Count(); i++) 
      { 
       DataColumn dc = new DataColumn(names[i], typeof(string)); 
       dt.Columns.Add(dc); 
      } 
    } 

中的所有文本文件具有相同的格式。我将数据从一个文本文件加载到数组中,然后调用此函数以在构造函数中使用数组创建datatable。有人可以告诉我如何用多个文本文件完成相同的事情。如果您需要更多信息,请告诉我。我对此有点新鲜!

谢谢!

+0

你在哪里阅读文件? 'DataTableFromTextFile'做什么不能被FormDataTable处理?你真的需要在这里使用'ref'吗? (我不认为默认情况下DataTables是按值传递的)。如果你输入一个多维数组而不是一维的,你可能会更好地设计,如果你输入一个多维数组而不是以后分割的一维,这样你就可以假设后面的分割字符串符合你的格式 – Kartoffel

+0

除了每个文件之外,你在做什么。 [文档](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.openfiledialog.multiselect?view=netframework-4.7#System_Windows_Forms_OpenFileDialog_Multiselect)有一个如何访问所有选定内容的示例文件。 – Crowcoder

回答

0

使用FileDialog的FileNames属性来获取所有选定文件名的列表。

我创建了一个名为DataTableFromAllTextFiles来处理文件名的数组,并返回一个确定年代,在它的所有行,类似于您DataTableFromTextFile新方法:

// read the files and put the content in a Datatable 
public static DataTable DataTableFromAllTextFiles(string[] files) 
{ 
    DataTable result = null; 

    foreach(var file in files) { 
     // read one file 
     var LineArray = File.ReadAllLines(file); 
     // on the first one ... 
     if (result == null) 
     { 
      // ... create columns 
      result = new DataTable(); 
      AddColumnToTable(LineArray, ref result); 
     } 
     // add the rows 
     AddRowToTable(LineArray, ref result); 
    } 

    return result; 
} 

这后,该FileNames属性调用filedialog:

var ofd = new OpenFileDialog(); 
    ofd.Multiselect = true; 
    ofd.ShowDialog(); 
    // FileNames holds an array of string with filenames (fullpath) 
    var alldatarows = DataTableFromAllTextFiles(ofd.FileNames); 
相关问题