2012-06-08 37 views
7

Làm cách nào để chuyển đổi bất kỳ loại record nào thành một đơn String và ngược lại? Có lẽ tải hồ sơ vào một dòng và đọc nó như là một String? Hồ sơ tôi đang sử dụng sẽ không có bất kỳ loại đặc biệt nào - chúng chỉ sử dụng những thứ đơn giản như String, Integer, PChar, DWORDArray of [String], v.v. và không có gì giống như lớp hoặc chức năng.Chuyển đổi bất kỳ bản ghi nào thành chuỗi và quay lại?

Chuỗi này sẽ được lưu vào nhiều vị trí khác nhau, chẳng hạn như tệp văn bản phẳng, bản ghi cơ sở dữ liệu, được gửi qua mạng, v.v. Nội dung chuỗi có thể được truyền bằng các phương tiện khác. từ một tệp văn bản và lưu nó vào một bản ghi cơ sở dữ liệu. Ý tưởng chung là chuỗi sẽ đủ tương thích để lưu ở mọi nơi, di chuyển nó xung quanh và tải nó trở lại trạng thái ban đầu của nó. Tôi hiểu rằng tôi cần phải có thể nhận ra những gì loại của hồ sơ và gán nó cho phù hợp, và phần mà tôi không cần trợ giúp.

+1

Có lẽ không. :-) Bây giờ bạn có thể nêu ra vấn đề bạn đang cố gắng giải quyết, vì vậy chúng tôi có thể đề xuất cách thích hợp để giải quyết nó? Điểm chuyển đổi bất cứ thứ gì không phải là một chuỗi thành chuỗi chỉ để chuyển đổi nó trở lại? –

+2

Khi hack, bạn có thể ghi bản ghi vào luồng bộ nhớ, như bạn đề xuất, sau đó chuyển đổi byte của luồng bộ nhớ đó thành chuỗi giá trị hex. Điều đó có thể được đảo ngược. Tất nhiên, sẽ khó để con người giải mã chuỗi :) –

+0

@ 500-InternalServerError Thật hoàn hảo, câu trả lời với một mẫu chuyển đổi theo từng cách và tôi sẽ chấp nhận nó: D –

Trả lời

7

Bạn có thể tuần tự hóa bản ghi của mình bằng RTTI, từ đây bạn có thể sử dụng XML, JSON hoặc định dạng khác để duy trì dữ liệu bản ghi.

Nếu bạn không muốn viết phương pháp của riêng bạn để tuần tự hóa các bản ghi, hãy thử các lựa chọn thay thế này.

  • superobject (bằng cách sử dụng lớp TSuperRttiContext bạn có thể serialize một kỷ lục để JSON)
  • TKBDynamic
  • SynCommons đơn vị từ Synopse.
  • XmlSerial đơn vị (Object và Ghi serialization và De-serialization to XML) từ Robert Tình yêu
+0

Không phải mọi loại có thể chứa trong một bản ghi đều có sẵn thông qua RTTI, bao gồm RTTI nâng cao mới. Vì vậy, điều này sẽ không chuyển đổi bất kỳ bản ghi * nào thành chuỗi. (Không downvoting, chỉ cần bình luận về sự mơ hồ của câu hỏi mà làm cho nó khó trả lời.) Làm thế nào để bạn chuyển đổi một bản ghi có chứa quá tải các nhà khai thác hoặc phương pháp để một chuỗi, ví dụ? Điều gì về hồ sơ có chứa các hồ sơ khác? –

+1

@KenWhite Tôi đã sử dụng RTTI để tuần tự hóa các bản ghi mà không gặp phải vấn đề gì, nhưng Thực tế, có thể tồn tại một số bản ghi phức tạp khó serialize, Dù sao tôi không biết ý bạn là gì với '..Làm thế nào để bạn chuyển đổi bản ghi chứa các toán tử hoặc phương thức quá tải 'bởi vì khi bạn tuần tự hóa một bản ghi hoặc đối tượng duy nhất, bạn cần duy trì các trường và/hoặc các thuộc tính. – RRUZ

+0

@RRUZ: Rodrigo, quan điểm của tôi là câu hỏi quá mơ hồ. Liệu 'chuyển đổi một bản ghi thành một chuỗi' có nghĩa là để lưu trữ và tải lại một lần nữa sau đó tại địa phương, hoặc có nghĩa là để chuyển nó vào một hệ thống khác? Nó chỉ có nghĩa là dữ liệu (các trường và thuộc tính) hay toàn bộ cấu trúc bản ghi? Tôi không downvote câu trả lời của bạn bởi vì nó có thể đúng, nhưng câu hỏi chính nó cần phải được chỉnh sửa để làm cho nó rõ ràng những gì ý định (vấn đề được giải quyết) là, để một câu trả lời đúng cho câu hỏi có thể được cung cấp. –

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