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. Anteeksi

      että tein pahaa sulle. En ole täysijärkinen.
      Ikävä
      122
      1241
    2. Ketä naista se poju tällä hetkellä vetää höplästä

      Sillä kun pitää aina olla joku höplästä vedettävä kierroksessa
      Ikävä
      283
      919
    3. Milloin olet viimeksi ollut hänen..

      Lähettyvillä??
      Ikävä
      43
      835
    4. Milloin näit kaivattusi viimeksi?

      Mitä olisit halunnut tehdä tai sanoa hänelle?
      Ikävä
      33
      621
    5. Tappio Rydmanille

      Ei pystynyt Wille saamaan tahtonsa läpi. https://www.hs.fi/politiikka/art-2000012093775.html
      Perussuomalaiset
      144
      600
    6. Missä tapasit kaivattusi

      ensimmäisen kerran?
      Ikävä
      38
      567
    7. 52
      541
    8. Sometähti villisika-Seppo on kuollut

      Suomussalmella lemmikki­eläimeksi virallisesti hyväksytty villisika Seppo on kuollut. https://yle.fi/a/74-20232445
      Suomussalmi
      28
      508
    9. Tiesitkös rakas

      Mun taivas on pilvinen ja synkkä. Päivät värittömiä ja harmaita. Missä olet, aurinkoni? 💔
      Ikävä
      44
      491
    10. Wille antoi juuri potkut 29 suojatyöläiselle!

      Soste aloittaa yt:t, jos kaikki menee hyvin, niin 29 suojatyöläistä 31:sta saa kenkää. Mitäpä sostelaiset jos menisitte
      Maailman menoa
      238
      461
    Aihe