我最近发现了有关协议缓冲区,并想知道他们是否可以应用到我的具体问题。

基本上我有需要转换为一个更紧凑的格式以便存储为某些文件的几个演出一些CSV数据。

在CSV每个字段都有一个报头,并且仅存在两种类型,字符串和小数(因为有时有很多的显著数字和我需要处理所有数字以同样的方式)。但每个文件将具有不同的列名的每个字段。

除了捕捉我需要能够在保存前需要额外的信息添加到文件中的原始CSV数据。我希望通过处理不同的文件版本,使这个面向未来。

因此,是有可能使用协议缓冲区来捕获数据的随机命名列的随机数,如CSV文件?

有帮助吗?

解决方案

那么,它肯定表示的。是这样的:

message CsvFile {
    repeated CsvHeader header = 1;
    repeated CsvRow row = 2;
}

message CsvHeader {
    require string name = 1;
    require ColumnType type = 2;
}

enum ColumnType {
    DECIMAL = 1;
    STRING = 2;
}

message CsvRow {
    repeated CsvValue value = 1;
}

// Note that the column is implicit based on position within row    
message CsvValue {
    optional string string_value = 1;
    optional Decimal decimal_value = 2;
}

message Decimal {
    // However you want to represent it (there are various options here)
}

我不知道有多少好处它会提供,你要知道...你当然可以添加更多的信息(添加到CsvFile消息)和未来的打样是在“正常PB方式” - 只添加可选字段,等

其他提示

好了,protobuf网(我的版本)是基于普通的.NET类型,所以没有(因为它不会与不同架构应付所有的时间)。但乔恩的版本可能允许动态类型。就个人而言,我只是通过GZipStream使用CSV并运行它 - 我希望这将是罚款为目的


编辑:其实,我忘了:protobuf网不支持扩展的对象,但你需要小心一点......这要看完整的上下文,我希望

另外嵌套数据的乔恩的做法可能会工作了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top