我正在使用带制表符分隔文本文件的导入程序。每个文件的第一行包含“列”,如ItemCode,Language,ImportMode等,并且可以有不同数量的列。
我能够获取每列的名称,无论是一个还是10个,依此类推。我使用一种方法来实现这一点,返回List<string>
:
private List<string> GetColumnNames(string saveLocation, int numColumns)
{
var data = (File.ReadAllLines(saveLocation));
var columnNames = new List<string>();
for (int i = 0; i < numColumns; i++)
{
var cols = from lines in data
.Take(1)
.Where(l => !string.IsNullOrEmpty(l))
.Select(l => l.Split(delimiter.ToCharArray(), StringSplitOptions.None))
.Select(value => string.Join(" ", value))
let split = lines.Split(' ')
select new
{
Temp = split[i].Trim()
};
foreach (var x in cols)
{
columnNames.Add(x.Temp);
}
}
return columnNames;
}
如果我总是知道要期待哪些列,我可以创建一个新对象,但由于我没有,我想知道是否有一种方法可以动态创建一个对象具有与{{{ 1}}返回?
有什么建议吗?
答案 0 :(得分:1)
对于它的价值,这是我使用DataTables实现我想要的方式。
// saveLocation is file location
// numColumns comes from another method that gets number of columns in file
var columnNames = GetColumnNames(saveLocation, numColumns);
var table = new DataTable();
foreach (var header in columnNames)
{
table.Columns.Add(header);
}
// itemAttributeData is the file split into lines
foreach (var row in itemAttributeData)
{
table.Rows.Add(row);
}
虽然能够按照我想要的方式操作数据还有一些工作要做,但Karthik的建议让我走上正轨。
答案 1 :(得分:0)
您可以创建字符串字典,其中第一个字符串引用“属性”名称,第二个字符串引用其特征。