StringStream

asdfghjkl

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

4

733

    Vastaukset 4

    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. Mikä on kaivattusi

      Nimi väärinpäin🤔🙃
      Ikävä
      91
      1272
    2. Mitkä on kaivattusi

      Nimen kolme ensimmäistä kirjainta Mar....
      Ikävä
      76
      1035
    3. Minkä ikäinen on kaivattusi

      ja sinä? Vai tiedätkö hänen ikää?
      Ikävä
      46
      737
    4. Ei kai nyt kukaan oikeasti kuvittele, että hallitus eroaisi Garden Helsingin takia?

      Ongelmanahan tässä kuitenkin on se, että mitään tavallisuudesta poikkeavaa ei ole tapahtunut. Joten mikä se eroperuste
      Maailman menoa
      153
      685
    5. Milloin olette

      Nähneet viimeksi kaivattusi kanssa?
      Ikävä
      51
      656
    6. Muiden vaikutus

      Oletko antanut muiden vaikuttaa mielipiteisiisi, tunteisiini tai valintoihisi suhteessa kaivattuusi?
      Ikävä
      83
      633
    7. Vähän hirvittää

      Että pystynkö täyttämään odotuksesi… jos oikeasti tutustutaan.
      Ikävä
      36
      630
    8. Me (n & m)

      Toisillemme erityiset, vaikka emme ole toistemme elämässä kuin lyhyinä, ohikiitävinä hetkinä. Uskon, että koet samoin. T
      Ikävä
      14
      569
    9. Ihanimmat palstalaiset

      kautta aikojen äänestys!
      Sinkut
      78
      558
    10. No tavallaan seuraava kohtaaminen on käänteentekevä

      Koska sanon sulle että rakastan sua. On aika. Pösilö.
      Ikävä
      29
      554
    Aihe