Mihin TStringStream käytetään (eli mihin se soveltuu hyvin)?
StringStream
4
721
Vastaukset
- Mika0800
TStringStream
Mikset kirjoita koodiisi vaikkapa:
var
S1 : TStringStream;
sitten vain klikkaat sanaan TStringStream ja painat Ctrl-F1.
Delphissä on hyvä online -opastejärjestelmä, jota kannattaa käyttää.
toki täytynee mainita, etten muista kertaakaan itse käyttäneeni TStringStream -tyyppiä vaikka Delphillä olenkin ohjelmoinut.
Ja ainakin Delphi7:ssä tuon luokan toteutuksessa on sitäpaitsi virhe !
Seek -metodista löytyy tällaista:
case Origin of
soFromBeginning: { katso lähdekoodista }
soFromCurrent: { katso lähdekoodista }
soFromEnd: FPosition := Length(FDataString) - Offset;
end;
Ohjeen mukaan tuossa soFromEnd -tapauksessa Offsetin on oltava- Delphi koodari
Offset on datatyyppiä word, jonka lukualue on
0-65535, joten koodissa ei ole virhettä.
Streamit ovat käteviä, jos dataa pitää käsitellä nopeasti tai datan määrä on suuri.
- StringList <> StringS...
Miten sitten StringList eroaa StringStream:stä
(mitkä on niiden suurrimmat erot)- Mika0800
Delphin omasta Helpistä löytyy toki vastaus tuohonkin.
Lisäksi Classes.pas -tiedostosta on noiden lähdekoodikin tutkittavissa.
Tässäkin ketjussa jonkun on taas pitänyt päteä "tiedoillaan" jotka eivät edes pidä paikkaansa:
function Seek(Offset: Longint; Origin: Word): Longint; overload; virtual;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; virtual;
tässä noiden TStream (josta TStringStream periytyy) -luokan metodimäärittelyjä - kuten selkeästi nähdään, niin Origin on toki tyyppiä word, mutta sehän voi olla vain jokin näistä kiinteistä arvoista:
JOKO: soBeginning, soCurrent, soEnd
TAI:
soFromBeginning = 0;
soFromCurrent = 1;
soFromEnd = 2;
(kätevä tuo overload - eikö ?)
Sensijaan Offset on etumerkillistä tyyppiä, ja jos esim. haluat lukea Streamin 2 viimeistä tavua, se todellakin hoituu näin:
var
S1:TStream;
W : Word;
begin
// koodia, jossa luodaan S1
// ....
//
S1.Seek(-2, soEnd);
// vaihtoehtoisesti voi toki myös:
// S1.Position := S1.Size - 2;
S1.ReadBuffer(W, SizeOf(W));
// vapauta;
FreeAndNil(S1);
end;
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Missä kokoomuksen naiset?
Hähmäistä ukkotarinaa kuultu koko viikonloppu. Kukaan ei ole kokoomuksessa edes yrittänyt pitää naisten puolta. Jopa933621Finland is now Petter place
Audin B-ryhmän ralliautolla saatiin kansa voimaan hyvin. Kiitos kokoomus huumoripläjäyksestä.292383Ilman Stadia Suomessa ei olisi kunnon lihajalosteita
HK, Helsingin makkaratehdas, Votkin, mitä näitä nyt onkaan. Böndellä ei ole kunnollisia jalostajia.1412028Toivon että kuulut elämääni
Mutta aika näyttää miten läheisesti. Lupaan kertoa jossain sivulauseessa, kun muutan paikkaa.34891- 44821
En unohda sua
En vaan unohda sua. Eikä se näköjään ole tarkoituskaan. Rakastan sua sitten omalla tavalla kauempaa kun mikään muu ei on30810Mahdatko ymmärtää sitä
Mä en selviä jollei me jutella kunnolla. Tarvitsen sua siihen. Etkä sä voi sitä tietää kun en ole ilmaissut mutta olen61775Jorma Lind kuollut
Ylen uutisankkurina 40 vuotta toiminut Jorma Lind on kuollut 85-vuotiaana. https://yle.fi/a/74-20230265 ARVl on näet4754- 40697
Kyllä nainenkin voi ottaa yhteyttä
Ja on ihan kiva jos ottaa yhteyttä mieheen. Minä ainakin olisin onnessani jos nainen ottaisi yhteyttä. mies87676