2012-06-08 16 views
7

どのタイプのrecordタイプを1つのStringに変換して戻すことができますか?おそらく、レコードをストリームにロードし、それを文字列として読み込みますか?私が使用しているレコードには、特別なタイプは含まれていません。単に、String,Integer,PCharDWORD、およびArray of [String]などの単純なものを使用しています。クラスや関数はありません。レコードを文字列に変換して戻しますか?

この文字列はさらに、フラットテキストファイル、データベースレコード、ネットワーク経由で送信されるなど、さまざまな場所に保存されます。文字列の内容は、文字列のコピーテキストファイルから取り出してデータベースレコードに保存します。一般的な考え方では、文字列はどこに保存しても、それを移動して元の状態に戻すのに十分な互換性があります。レコードのタイプが何であるかを認識してそれに応じて割り当てる必要があることを理解しており、その部分は助けを必要としません。

+1

ません。 :-)あなたはあなたが解決しようとしている問題を述べることができるので、それを解決する適切な方法を提案できますか?文字列ではないものを文字列に変換して変換するだけのポイントは何ですか? –

+2

ハックとして、あなたが示唆するように、メモリストリームにレコードを書き込んで、そのメモリストリームのバイトを16進値の文字列に変換することができます。それは逆にすることができます。もちろん、人間が文字列を解読することは難しいでしょう:) –

+0

@ 500-InternalServerErrorこれは完璧です。それぞれの方法で変換したサンプルで答えてください。D –

答えて

7

RTTIを使用してレコードをシリアル化することができます。ここからは、XML、JSONなどのフォーマットを使用してレコードデータを永続化できます。

レコードをシリアル化する独自のメソッドを作成したくない場合は、これらの代替方法を試してください。

  • superobject

    (TSuperRttiContextクラスを使用して、あなたがJSONにレコードをシリアル化することができます)Synopseから
  • TKBDynamic
  • SynCommonsユニット。おそらく、ロバート・ラブから
  • XmlSerialユニット(XMLへのオブジェクトとレコードのシリアライズとデシリアライズ)
+0

新しい強化されたRTTIを含む、レコードに含めることができるすべてのタイプがRTTIを通じて使用可能なわけではありません。したがって、* any *レコードを文字列に変換することはありません。 (下降しないで、答えるのが難しい質問のあいまいさにコメントするだけです)オーバーロードされた演算子やメソッドを含むレコードを、たとえば文字列に変換するにはどうすればよいですか?他のレコードを含むレコードはどうですか? –

+1

@KenWhite私はRTTIを使って問題なくレコードをシリアライズしましたが、実際にはシリアライズが難しい複雑なレコードが存在することがあります。とにかく、あなたが何を意味するのかわかりません。オーバーロードされた演算子やメソッドレコードやオブジェクトを直列化するときには、フィールドやプロパティを永続化する必要があるからです。 – RRUZ

+0

@RRUZ:ロドリゴ、私の主張はあまりにも漠然としているということでした。 'レコードを文字列に変換する'は、後でローカルで保存して再ロードすることを意味しますか、それを別のシステムに転送することを意味しますか?データ(フィールドとプロパティ)またはレコード構造全体だけを意味するのでしょうか?おそらく正しいと思うので、私はあなたの答えを下降させませんでしたが、質問に対する適切な答えが得られるように、目的(解決すべき問題)が何であるかを明確にするために質問自体を編集する必要があります。 –

関連する問題