StringStream

asdfghjkl

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

4

724

    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. Kela tukee virallisesti Pride-liikettä

      Iso kiitos Kansaneläkelaitokselle tuen osoittamisesta myös vähemmistöille. Näin toimii vastuullinen valtiollinen koko k
      Maailman menoa
      107
      4302
    2. Pride-liputus närästää monissa Suomen kunnissa

      Suomen lipun nostamisesta on laki. Pride‑liputuksesta ei. Kieltäytyviin kuntiin kohdistuu poliittista painostusta kuin k
      Maailman menoa
      70
      3100
    3. Hitaille omat kassat

      Kassoilla hidastelevat ärsyttävät. Menee heti loppupäivä pilalle, kun kauppareissu kestää hidastelijoiden takia. Näille
      Maailman menoa
      315
      2861
    4. Jorma Lind kuollut

      Ylen uutisankkurina 40 vuotta toiminut Jorma Lind on kuollut 85-vuotiaana. https://yle.fi/a/74-20230265 ARVl on näet
      Maailman menoa
      62
      2332
    5. Mikä on kaunein

      Ja hellyttävin hetki irl kaivattusi kanssa?
      Ikävä
      77
      1552
    6. Mahdatko ymmärtää sitä

      Mä en selviä jollei me jutella kunnolla. Tarvitsen sua siihen. Etkä sä voi sitä tietää kun en ole ilmaissut mutta olen
      Ikävä
      77
      1378
    7. Kävisikö tällainen sopimus?

      Olisitko valmis juttelemaan jo ensi viikolla kahden kesken?
      Ikävä
      98
      1342
    8. Mitä yhteistä sinulla

      on kaivattusi kanssa? Sama musiikkimaku, tai huumorintaju, tai ehkä työpaikka? Vai ettekö tunne vielä niin hyvin?
      Ikävä
      70
      1146
    9. Nyt kerrot mies mitä ajattelet minusta

      Ihan suoraan ja suodattamatta.
      Ikävä
      77
      1138
    10. Ensimmäisenä Helluntaina ei uudelleen kastettu KETÄÄN!

      Raamattu kertoo, että Helluntaina kastettiin. Mutta vaikka Raamattu ei erikseen kerro tiedän VARMASTI Ettei
      Kaste
      691
      1121
    Aihe