Šta je novo?

TStream i AnsiString

hwfanatic

Čuven
Učlanjen(a)
13.02.2002
Poruke
659
Poena
630
Ovo mi je vec drugi thread u poslednja dva dana i ne bi ga pravio da stvarno nisam poludeo... Inace ne volim da smaram ljude sopstvenim problemima, ali o ovome nista nisam mogao da pronadjem na net-u.

Dakle, klasa TStream i metode Read- i WriteBuffer rade sasvim lepo kada imam neke promenljive konstantne velicine. Medjutim kada pozelim da pohranim AnsiString, onda nastaje problem, jer on moze imati velicinu od 4 b do (kako kaze Help) 3 Gb. Pomislio sam da je racionalno da pre nego sto upisem string promenljivu, upisem prvo njenu velicinu, i onda je tako citam, ali to ne radi :!:

E, onda sam se 5 sati igrao sa raznim varijacijama na temu (probao sam i TStringStream, ali ni to nije upalilo; pored toga u stream-u treba da stoje i promenljive drugog tipa) i sada trenutno ludim i molim se za neko resenje. :(
 
hwfanatic je napisao(la):
Dakle, klasa TStream i metode Read- i WriteBuffer rade sasvim lepo kada imam neke promenljive konstantne velicine. Medjutim kada pozelim da pohranim AnsiString, onda nastaje problem, jer on moze imati velicinu od 4 b do (kako kaze Help) 3 Gb. Pomislio sam da je racionalno da pre nego sto upisem string promenljivu, upisem prvo njenu velicinu, i onda je tako citam, ali to ne radi :!:

ja mislim da u TStream (isto kao i u record) tipovima mozhe da se koristi samo ShortString, kome definishesh duzhinu (npr S[10]) ili ako ne definishesh, podrazumeva se 255.
 
Pokusao sam, ali bez obzira ne radi... Tacnije - nije radilo. :)
Problem sam (nakon dosta muke) resio uvodjenjem TStringList klase, koja vec ima Save- tj. LoadFromStream metode, u ciji kod nisam zalazio (bar ne za veceras), a koje rade posao. Cisto ako nekome jos zatreba...
 
Ne razumem u cemu je bio problem? U vecini TStream klasa (TStringStream, TMemoryStream, TFileStream, itd) imas metode koji za citanje traze da se kao argument specifikuje koliko bajtova ili karaktera treba da procitaju, recimo ReadString ili CopyFrom. I tako moze lepo da radi ako snimas prvo velicinu odvojenu delimiterom od ostatka stringa ili ako formiras cak neki header koji osim velicine sadrzi jos neke dodatne podatke. Moze lepo da se ukombinuje sa SizeOf - cak i ako koristis pisanje i citanje kompletnih komponenti (Stream.WriteComponent i Stream.ReadComponent).
 
silverglider je napisao(la):
Ne razumem u cemu je bio problem? U vecini TStream klasa (TStringStream, TMemoryStream, TFileStream, itd) imas metode koji za citanje traze da se kao argument specifikuje koliko bajtova ili karaktera treba da procitaju, recimo ReadString ili CopyFrom. I tako moze lepo da radi ako snimas prvo velicinu odvojenu delimiterom od ostatka stringa
Pa da, to je i bila ideja, ali nesto tu nije valjalo... Prvo, access prekrsaji pri citanju, a drugo, ti stringovi u fajlu nisu licili na sebe. Npr. space je $20 kako kod da obrnes, ali to nije bio slucaj u rezultujucem fajlu. :rolleyes: Najverovatnije moja greska, ali sad sam to sredio sa TStringList klasom i radi ok, pa ne bi da ga cackam.
 
U Ansistringu je svaki karakter valjda dva bajta, a ne bajt, zbog wchara. Da se nisi tu preracunao? Pogotovo sto neke read/copy funkcije traze broj karaktera, a druge broj bajtova...
 
Moguce da sam se preracunao, to naravno, ali ovo sa dva bajta po karakteru mi zvuci sumnljivo...
 
Nazad
Vrh Dno