如何在 C# 中使用反射读取平面文件的架构 我的简要概述是 - 有一些服务器将数据存储为平面文件,我必须将数据从 SQL Server 推送到这些平面文件。为此,我需要知道他们的架构。我对此一无所知,任何帮助都会很棒。
1 回答
很难知道从哪里开始这个问题,因为听起来反射不太可能有帮助,但您指定它必须出现在解决方案中!:)
因此,这个答案主要是猜测,并且可能会随着您透露更多信息而演变。这可以; 在你知道问题是什么之前,你无法得到答案 (42)。
平面文件是什么并没有单一的定义。您可能需要一个解析文件中“记录”的函数。通常的方法是在十六进制编辑器中打开文件,并从一些示例记录中推断出格式。寻找有关重复图案形状的线索。每个“记录”是否似乎由多个“字段”组成?它们是否每次都以明确的顺序出现,还是每个字段都以名称或数字作为前缀以表明其含义?它看起来像纯文本吗,即您可以在记事本中打开它而不会丢失重要信息吗?
声明一个类来表示一条记录:
public class FlatFileRecord
{
public string FirstName { get; set; }
public string LastName { get; set; }
// etc.
}
然后编写一个从流中读取并产生记录的函数:
public static IEnumerable<FlatFileRecord> ParseFlatFile(StreamReader stream)
{
// etc.
如果文件是“纯文本”(即,它具有以某种重要方式用于分隔记录或字段的回车/换行字符),则使用 StreamReader 将是合适的。
假设每条记录是一行纯文本(换句话说,每条记录由一个特殊的行尾序列分隔)。在该行中有多个字段,以某种方式由其他特殊字符分隔。您的解析器可能被构造为一个循环:
string line;
while ((line = r.ReadLine()) != null)
yield return new FlatFileRecord(line);
这将问题分解为两个层次。外层一次通过一条线,每条线产生一条记录。然后有一个我想象的内部级别放入 FlatFileRecord 的构造函数中。通过一行,它会用它知道如何从该行中提取的字段值填充自己。所以现在你必须编写 FlatFileRecord 的构造函数。