2012-06-08 19 views
7

Come posso convertire qualsiasi tipo record in un singolo String e viceversa? Forse caricare il record in un flusso e leggerlo come una stringa? I record che sto usando non includeranno alcun tipo speciale - stanno semplicemente usando cose semplici come String, Integer, PChar, DWORD e Array of [String], ecc. E niente come classi o funzioni.Converti qualsiasi record in una stringa e torna indietro?

Questa stringa verrà inoltre salvata in vari punti, ad esempio un file di testo piatto, un record di database, inviato tramite la rete, ecc. Il contenuto delle stringhe può essere trasferito con altri mezzi tra ciascuno di essi, come la copia della stringa da un file di testo e salvandolo su un record del database. L'idea generale è che la stringa sarà abbastanza compatibile da salvare ovunque, spostarla e caricarla di nuovo nel suo stato originale. Capisco che ho bisogno di essere in grado di riconoscere cosa tipo di record è e assegnarlo di conseguenza, e quella parte non ho bisogno di aiuto con.

+1

Probabilmente. :-) Ora puoi indicare il problema che stai cercando di risolvere, quindi possiamo suggerire il modo corretto per risolverlo? Qual è il punto di convertire tutto ciò che non è una stringa in una stringa solo per riconvertirlo? –

+2

Come un hack, puoi scrivere il record su un flusso di memoria, come suggerisci, e quindi convertire i byte di quel flusso di memoria in una stringa di valori esadecimali. Questo può essere invertito. Certo, sarà difficile per gli umani decifrare la stringa :) –

+0

@ 500-InternalServerError Questo è perfetto, rispondi con un campione che converte in ogni modo e lo accetto: D –

risposta

7

È possibile serializzare il record utilizzando RTTI, da qui è possibile utilizzare XML, JSON o altro formato per mantenere i dati del record.

Se non si desidera scrivere il proprio metodo per serializzare i record, provare queste alternative.

  • superobject (utilizzando la classe TSuperRttiContext è possibile serializzare un record per JSON)
  • TKBDynamic
  • SynCommons unità dalla Synopse.
  • XmlSerial unità (Object e Record serializzazione e deserializzazione XML) da Robert Love
non
+0

Non tutti i tipi che possono essere contenuti in un record sono disponibili tramite RTTI, incluso il nuovo RTTI avanzato. Quindi questo non convertirà * qualsiasi * record in una stringa. (Non downvoting, basta commentare la vaghezza della domanda che rende difficile rispondere.) Come si converte un record contenente operatori o metodi sovraccaricati in una stringa, ad esempio? Che dire dei record che contengono altri record? –

+1

@KenWhite Ho usato RTTI per serializzare i record senza problemi, ma in effetti, possono esistere alcuni record complessi difficili da serializzare, comunque non so cosa intendi con '..Come converti un record contenente operatori o metodi sovraccaricati 'perché quando si serializza un record o un oggetto solo è necessario mantenere i campi e/o le proprietà. – RRUZ

+0

@RRUZ: Rodrigo, il mio punto è che la domanda è troppo vaga. 'Converti un record in una stringa' significa memorizzare e ricaricare di nuovo in seguito localmente, o significa trasferirlo su un altro sistema? Significa solo i dati (campi e proprietà) o l'intera struttura del record? Non ho minimizzato la tua risposta perché probabilmente ha ragione, ma la domanda stessa deve essere modificata per chiarire quale sia l'intento (problema da risolvere), in modo che possa essere fornita una risposta adeguata alla domanda. –