2012-06-08 17 views
7

Jak przekonwertować dowolny typ record na pojedynczy String iz powrotem? Być może załadujesz rekord do strumienia i odczytasz go jako ciąg? Rekordy, których używam, nie zawierają żadnych specjalnych typów - używają tylko prostych rzeczy, takich jak String, Integer, PChar, DWORD i Array of [String] itd. I nie przypominają klas ani funkcji.Konwertuj dowolny rekord na ciąg i powróć?

Ciąg ten będzie zapisywany w różnych miejscach, takich jak płaski plik tekstowy, rekord bazy danych, wysyłany przez sieć itp. Treści ciągów mogą być przesyłane w inny sposób między każdym z nich, na przykład przez kopiowanie ciągu znaków. z pliku tekstowego i zapisanie go w rekordzie bazy danych. Ogólną ideą jest to, że ciąg będzie kompatybilny na tyle, aby można go było nigdzie zaoszczędzić, przenieść go i przywrócić go do pierwotnego stanu. Rozumiem, że muszę być w stanie rozpoznać, jaki jest zapis i przypisać go odpowiednio, a ta część nie potrzebuje pomocy.

+1

Prawdopodobnie. :-) Teraz możesz podać problem, który próbujesz rozwiązać, abyśmy mogli zaproponować właściwy sposób rozwiązania? Jaki jest cel konwertowania czegokolwiek, co nie jest łańcuchem, na ciąg znaków tylko po to, aby go przekonwertować? –

+2

Jako hack możesz zapisać rekord do strumienia pamięci, jak sugerujesz, a następnie przekonwertować bajty tego strumienia pamięci na ciąg wartości szesnastkowych. To można odwrócić. Oczywiście, ludziom trudno będzie rozszyfrować ciąg znaków :) –

+0

@ 500-InternalServerError To jest idealne, odpowiedź z próbką konwertującą w każdy sposób, a ja to zaakceptuję: D –

Odpowiedz

7

Możesz serializować swój rekord za pomocą RTTI, stąd możesz użyć XML, JSON lub innego formatu, aby utrwalić dane rekordów.

Jeśli nie chcesz pisać własnej metody serializacji rekordów, wypróbuj te alternatywy.

  • superobject (przy użyciu klasy TSuperRttiContext można szeregować rekord do JSON)
  • TKBDynamic
  • SynCommons jednostka z Synopse.
  • XmlSerial jednostka (Object i Record serializacji i De-serializacji XML) od Roberta Miłości
nie
+0

Nie każdy typ, który może znajdować się w rekordzie, jest dostępny za pośrednictwem protokołu RTTI, w tym nowego ulepszonego interfejsu RTTI. To nie spowoduje konwersji * jakiegokolwiek * rekordu na ciąg znaków. (Nie w dół, tylko komentowanie niejasności pytania, które utrudnia odpowiedź). Jak na przykład przekonwertować zapis zawierający przeciążone operatory lub metody na ciąg znaków? A co z dokumentami zawierającymi inne rekordy? –

+1

@KenWhite Użyłem RTTI do serializowania rekordów bez problemów, ale Rzeczywiście, mogą istnieć pewne skomplikowane rekordy trudne do serializowania, W każdym razie nie wiem, co masz na myśli z '..Jak konwertujesz rekord zawierający przeciążone operatory lub metody 'ponieważ podczas serializowania rekordu lub obiektu tylko potrzebujesz utrzymywać pola i/lub właściwości. – RRUZ

+0

@RRUZ: Rodrigo, moim celem było to, że pytanie jest zbyt niejasne. Czy "konwertowanie rekordu na ciąg" oznacza przechowywanie i ponowne ładowanie później w wersji lokalnej lub czy oznacza to przeniesienie go do innego systemu? Czy chodzi tylko o dane (pola i właściwości) czy całą strukturę rekordów? Nie przesłałem ci odpowiedzi, ponieważ prawdopodobnie ma ona rację, ale samo pytanie musi zostać zmienione, aby wyjaśnić, co to jest zamiar (problem do rozwiązania), aby można było udzielić właściwej odpowiedzi na to pytanie. –