繁体   English   中英

如何在C#中使用反射读取平面文件的架构

[英]How to Read Schema of Flat File using Reflection in C#

如何在C#中使用反射读取平面文件的架构我的简要概述是-有一些服务器将数据存储为平面文件,我必须将数据从SQL Server推送到这些平面文件。 为此,我需要了解他们的架构。 我对此一无所知,任何帮助都会很棒。

很难知道从哪里开始这个问题,因为听起来像反射不太可能有帮助,但您已指定它必须出现在解决方案中! :)

结果,该答案大部分是猜测,可能会随着您揭示更多信息而演变。 这可以; 在您知道问题所在之前,您无法获得答案(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的构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM