我最近发现了协议缓冲区,想知道它们是否可以应用于我的特定问题。
基本上,我有一些 CSV 数据,需要将其转换为更紧凑的格式以进行存储,因为其中一些文件有几GB。
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 方式” - 仅添加可选字段等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)