2016-05-12 11 views
0

実行時にASP.NETアプリケーション編集ファイルをサーバーにアップロードしました。実行時に動的レコードを編集する

CSVファイルを処理する必要がありますので、FileHelpersライブラリを選択しました。

CSVのヘッダーは何か分からないので、私はこのライブラリを使用して実行時に動的にカスタムクラスを作成し、ヘッダとレコードをDataTableで埋めます。

次に、DataTableに新しい列が追加され、各行に値が生成されます。

CSVファイルに新しい値を書き込む必要があるため、クラスの形式を知らなくても実行時にレコードを編集する必要があります。ここで

は、私がこれまで行ったことの抜粋ですが、あなたは私にこれを実行する方法についてのヒントを与えることができれば、私は本当に感謝します:)

List<object> values = new List<object>(); 

var classBuilder = new DelimitedClassBuilder("CSVClass", delimiter.ToString(), dataTable); 

classBuilder.LastField.FieldOptional = true; 

Engine = new FileHelperEngine(classBuilder.CreateRecordClass()); 

string lastFieldName = classBuilder.LastField.FieldName; 
i = 0; 
foreach (dynamic record in Engine.ReadFile(filePath)) 
{ 
    record.Test = newValues[i]; //This line is working as the new column is named "Test" but if the column name changes, it throws an exception of course 

    values.Add(record); 

    i++; 
} 

Engine.WriteFile(filePath, values); 

答えて

0

を私はようやくこれを通じて自分の道を見つけました。

解決策は、CsvEngineクラスと彼のDataTableToCsvメソッドを使用することでした。好奇心旺盛なもののために

が、ここで最終的なコードです:

リスト値=新しいリスト();

string header = null; 

DataRow row = dataTable.NewRow(); 

int i = 0; 
foreach (var value in newValues) 
{ 
    string newValue = value; 

    if (i == 0) 
    { 

     List<object> headers = valuesDictionnary[0].ToList<Object>(); 
     int count = 1; 
     while (true) 

      if (headers.Contains(newValue)) 
      { 
       newValue = value + "_" + count; 
       count++; 
      } 
      else 
       break; 

     header = newValue; 
     dataTable.Columns.Add(newValue); 

     foreach(DataColumn column in dataTable.Columns) 
     { 
      row[column.ColumnName] = column.ColumnName; 
     } 

     dataTable.Rows.InsertAt(row, 0); 
    } 

    dataTable.Rows[i][header] = newValue; 
    i++; 
} 

CsvEngine.DataTableToCsv(dataTable, filePath, new CsvOptions("CSVOptions", delimiter, filePath)); 

dataTable.Rows.RemoveAt(0); 
関連する問題