存储分隔文本文件架构的最佳实践
Posted
技术标签:
【中文标题】存储分隔文本文件架构的最佳实践【英文标题】:Best practices for storing the schema of delimited text files 【发布时间】:2012-11-30 16:41:36 【问题描述】:我正在编写一个程序来解析几个分隔的平面文件,它需要其中的几个列。如果将来输入平面文件的格式发生变化,我不确定使我的代码易于维护/更新的最佳方法。
目前我有一组常量整数形式(还有很多):
NameListFirstNameCol = 0;
NameListLastNameCol = 1;
NameListAgeCol = 2;
ClassListRoomNumCol = 0;
ClassListRoomNameCol = 1;
以及用于分隔符的常量,例如:
NameListDelim = ',';
ClassListDelim = '\t';
我想看看是否有人对跟踪此类信息的更好方法提出建议。 (我可以假设我需要的列总是在输入中,但输入的创建者可能会更改分隔符、添加新列或重新排序列)。这是一个数据分析脚本,它会看到一些重用,但不是生产软件的主要部分。
【问题讨论】:
我喜欢在 cmets 中保留一个样本输入以便于验证 【参考方案1】:这里有一些有趣的信息:
Importing CSV file into Database with Schema.ini
尤其是每次都使用不同的 CSV 文件名导入 CSV 文件或 动态创建 Schema.ini 文件看起来很有希望。
【讨论】:
【参考方案2】:首先,您必须从文件中创建一个包含字段名称和相应索引的列表。 例如 Dictionary 用于保留您可以从文件第一行读取的名称。拥有列名和相应索引的列表后,您可以使用 string.Split 仅使用您需要的索引来解析后续行。 此外,您还必须存储结构所需的列列表。为了便于维护,您可以将其作为单独的 .cs 文件中的单独类保存。
【讨论】:
【参考方案3】:我编写了一个名为 JRecordBind 的库,它使用 XML Schema 描述平面文件的结构。见one of the examples。
不幸的是,它是用 Java 编写的。你可以考虑移植它。要是有 C# 版本就好了
【讨论】:
以上是关于存储分隔文本文件架构的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章