首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能用Google的Protocol Buffer格式表示CSV数据吗?

你能用Google的Protocol Buffer格式表示CSV数据吗?
EN

Stack Overflow用户
提问于 2008-12-16 14:15:04
回答 2查看 5.8K关注 0票数 5

我最近发现了协议缓冲区,想知道它们是否可以应用于我的特定问题。

基本上,我有一些CSV数据,我需要转换为更紧凑的格式存储,因为一些文件是几个gig。

CSV中的每个字段都有一个头,并且只有两种类型,字符串和小数(因为有时有很多有效数字,我需要以相同的方式处理所有数字)。但是每个文件的每个字段都有不同的列名。

除了捕获原始CSV数据之外,我还需要能够在保存之前向文件中添加额外的信息。我希望通过处理不同的文件版本来证明这一点。

那么,有没有可能使用协议缓冲区来捕获随机数量的随机命名的数据列,比如CSV文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-12-16 14:38:07

嗯,它当然是有代表性的。类似于:

代码语言:javascript
复制
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方式”--只添加可选字段,等等。

票数 5
EN

Stack Overflow用户

发布于 2008-12-16 14:32:19

嗯,protobuf-net (我的版本)是基于常规的.NET类型的,所以没有(因为它不会一直处理不同的模式)。但是Jon的版本可能允许动态类型。就我个人而言,我只是使用CSV并通过GZipStream运行它-我希望这对目的来说是很好的。

编辑:实际上,我忘了: protobuf-net确实支持可扩展对象,但您需要稍微小心一点……我想,这将取决于整个背景。

另外,Jon的嵌套数据方法可能也会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/371418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档