如何使用C#中的反射读取平面文件的架构 我的简要概述是 - 有一些服务器将数据存储为平面文件,我必须将数据从SQL Server推送到这些平面文件。为此,我需要了解他们的架构。 我对此一无所知,任何帮助都会很棒。
答案 0 :(得分:3)
很难知道从这个问题开始的地方,因为听起来反射不太可能有用,但你指定它必须出现在解决方案中! :)
因此,这个答案主要是猜测,并且可能会随着您发现更多信息而发展。这可以;在你知道问题所在之前,你无法得到答案(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的构造函数。