يمكنك تمثيل البيانات CSV في شكل مؤقت بروتوكول جوجل؟

StackOverflow https://stackoverflow.com/questions/371418

سؤال

ولقد اكتشفت مؤخرا حول مخازن بروتوكول وأتساءل عما إذا كان من الممكن تطبيقها على مشكلتي محددة.

وأساسا لدي بعض البيانات 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 العادية، لذلك لا (لأنه لن مواجهة مخططات مختلفة في كل وقت). ولكن النسخة جون لقد تسمح أنواع دينامية. شخصيا، كنت مجرد استخدام CSV وتشغيله من خلال GZipStream - أتوقع أن يكون على ما يرام لغرض


وتحرير: في الواقع، لقد نسيت: protobuf صافي لا تدعم الأشياء القابلة للتوسعة، ولكن عليك أن تكون حذرا بعض الشيء ... انها تعتمد على السياق الكامل، وأتوقع

.

وبالإضافة إلى أن نهج جون من البيانات المتداخلة ربما تعمل أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top