我在运行时在服务器上上传了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 :(得分: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);