Pregunta

He encontrado recientemente acerca de búferes de protocolo y se preguntaba si podían aplicarse a mi problema específico.

Básicamente tengo algunos datos CSV que necesito para convertir a un formato más compacto para el almacenamiento ya que algunos de los archivos de varias concierto.

Cada campo del CSV tiene una cabecera, y hay sólo dos tipos, cuerdas y decimales (porque a veces hay una gran cantidad de dígitos significativos y que necesitan para manejar todos los números de la misma manera). Pero cada archivo tendrá diferentes nombres de columna para cada campo.

Además de la captura de los datos CSV original, tengo que ser capaz de añadir información adicional al archivo antes de guardar. Y yo estaba esperando para hacer esta prueba de futuro por el manejo de diferentes versiones de los archivos.

Por lo tanto, es posible el uso de búferes de protocolo para capturar un número aleatorio de columnas llamadas al azar de los datos, como un archivo CSV?

¿Fue útil?

Solución

Bueno, ciertamente es representable. Algo así como:

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)
}

No estoy seguro de cuánto beneficio que proporcionará, eso sí ... Por supuesto que puede añadir más información (añadir al mensaje CsvFile) y futuras pruebas está en el "modo PB normal" - solamente agregar campos opcionales, etc.

Otros consejos

Bueno, protobuf-net (mi versión) se basa en los tipos de .NET regulares, por lo que no (ya que no va a hacer frente a los diferentes esquemas todo el tiempo). Pero la versión de Jon podría permitir tipos dinámicos. En lo personal, yo sólo uso CSV y ejecutarlo a través de GZipStream -. Espero que va a estar bien con el propósito


Edit: En realidad, me olvidaba: protobuf-net es compatible con objetos extensibles, pero hay que ser un poco cuidadoso ... que dependerá del contexto completo, espero

.

Además, el enfoque de los datos anidadas de Jon probablemente funcionaría también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top