1

我正在开发一个使用制表符分隔的文本文件的导入器。每个文件的第一行包含“列”,如 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;
}

如果我总是知道要期待哪些列,我可以创建一个新对象,但由于我不知道,我想知道有没有一种方法可以动态创建一个具有与GetColumnNames()返回值相对应的属性的对象?
有什么建议么?

4

2 回答 2

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 的建议让我走上了正轨。

于 2013-07-03T11:58:21.100 回答
0

您可以创建一个字符串字典,其中第一个字符串引用“属性”名称,第二个字符串引用其特征。

于 2013-07-02T11:37:21.447 回答