StringStream

asdfghjkl

Mihin TStringStream käytetään (eli mihin se soveltuu hyvin)?

4

733

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. Kuka sitä naista maalittaa

      Täällä oikeasti?
      Ikävä
      201
      1571
    2. Voisin jopa maksaa että saisin nähdä sut mies

      Miten helvetissä joku voi olla tollanen kotihiiri. Edes mä en ole noin paha ku sä! Miten sua voi ikinä edes nähdä ?
      Ikävä
      58
      981
    3. Anteeksipyynnöstä

      Uskotko anteeksipyynnön voimaan? Mikä tekee anteeksipyynnöstä vaikeaa? Onko se mielestäsi joskus turhaa, joko pyytäjän
      Ikävä
      140
      954
    4. Oletko päässyt minusta

      Eteenpäin?
      Ikävä
      85
      902
    5. Ei kukaan ole katsonut

      Kuten sinä. Niin välittävä ja hellä katse.
      Ikävä
      61
      866
    6. Martinan tarve valehdella.

      Miksiköhän Martina valehtelee niin paljon,onko hän tietoinen siitä että valheistaan jää useimmiten kiinni? Esimerkkinä t
      Kotimaiset julkkisjuorut
      265
      754
    7. Tumman vihreä mercedes

      Mikä se on tuo kylää ympäri ajava vihreä mercedes, takakontti tärisee kuin hullu ja välillä kylän juoppojakin kuskailee,
      Hyrynsalmi
      10
      750
    8. Stubb munasi - Suomessa kuuluu liputtaa Suomen lipulla

      Presidentinlinnan ja Mäntyniemen salkoihin nostettiin sateenkaariliput lauantaina. Suurin osa kansasta ei varmasti pidä
      Maailman menoa
      339
      694
    9. Miksi tällainen pelottaa ja aiheuttaa joillakin ärtymystä?

      "Sitoudun ystävien ja kollegoiden kanssa puuttumaan seksistisiin vitseihin ja vähättelyyn. Sanon ääneen, kun jokin ei ol
      Maailman menoa
      74
      686
    10. Olisitko oikeasti valmis rikkomaan

      Perheesi? En haluaisi sitä, mutta ne on teidän välisiä asioita. Voin olla sinulle vain kaverikin… ei paineita. Minä kesk
      Ikävä
      58
      684
    Aihe