2008-12-16 25 views
5

Gần đây tôi đã phát hiện ra về bộ đệm giao thức và đã tự hỏi nếu chúng có thể được áp dụng cho vấn đề cụ thể của tôi.Bạn có thể trình bày dữ liệu CSV ở định dạng Bộ đệm giao thức của Google không?

Về cơ bản tôi có một số dữ liệu CSV mà tôi cần chuyển đổi sang định dạng nhỏ gọn hơn để lưu trữ vì một số tệp có nhiều biểu diễn.

Mỗi trường trong CSV có tiêu đề và chỉ có hai loại, chuỗi và số thập phân (vì đôi khi có nhiều chữ số có nghĩa và tôi cần xử lý tất cả các số theo cùng một cách). Nhưng mỗi tệp sẽ có các tên cột khác nhau cho mỗi trường.

Cũng như chụp dữ liệu CSV ban đầu, tôi cần có thể thêm thông tin bổ sung vào tệp trước khi lưu. Và tôi đã hy vọng tạo ra bằng chứng tương lai này bằng cách xử lý các phiên bản tệp khác nhau.

Vì vậy, có thể sử dụng bộ đệm giao thức để nắm bắt số ngẫu nhiên các cột dữ liệu được đặt tên ngẫu nhiên, như tệp CSV không?

Trả lời

3

Vâng, đó chắc chắn là biểu tượng. Một cái gì đó như:

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

Tôi không chắc chắn nó sẽ cung cấp bao nhiêu lợi ích, tâm trí bạn ... Bạn chắc chắn có thể bổ sung thêm thông tin (thêm vào tin nhắn CsvFile) và chống tương lai là trong "cách PB bình thường "- chỉ thêm các trường tùy chọn, v.v.

+0

Yeah đọc về các mã hóa của PBs đã không điền vào tôi với hy vọng như dữ liệu của tôi chủ yếu là số dày đặc. Tuy nhiên tôi sẽ cho nó một shot và xem những gì sẽ xảy ra. –

+0

Nếu bạn quan tâm đến System.Decimal đại diện trong PB, có lẽ xứng đáng một câu hỏi riêng biệt - hoặc một bài đăng trên nhóm thảo luận PB. Marc và tôi đã thảo luận điều này trước đây (và có thể làm nhiều hơn tối nay - Marc?). –

+0

@Jon - khá có thể ;-p –

1

Vâng, protobuf-net (phiên bản của tôi) dựa trên các loại .NET thông thường, vì vậy không (vì nó sẽ không đối phó với các lược đồ khác nhau mọi lúc). Nhưng phiên bản của Jon có thể cho phép các loại động. Cá nhân, tôi chỉ sử dụng CSV và chạy nó thông qua GZipStream - tôi hy vọng rằng sẽ tốt cho mục đích này.


Chỉnh sửa: thực sự, tôi quên: protobuf-net hỗ trợ các đối tượng có thể mở rộng, nhưng bạn cần cẩn thận ... nó phụ thuộc vào ngữ cảnh đầy đủ, tôi mong đợi.

Cộng với cách tiếp cận dữ liệu lồng nhau của Jon có thể cũng sẽ hoạt động.

+0

Xin lỗi, không chắc chắn liệu tôi có làm rõ không - tôi cũng thêm dữ liệu bổ sung vào CSV, đôi khi là cột bổ sung và đôi khi làm dữ liệu đầu trang hoặc chân trang. Dữ liệu này tôi muốn chứng minh phiên bản. Đó là lý do tại sao tôi đã suy nghĩ về các phương pháp lưu trữ khác. –

Các vấn đề liên quan