StringStream

asdfghjkl

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

4

732

    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 tai ketkä tappo eilen?

      Kenet ja miksi?
      Varkaus
      37
      1782
    2. Arvostele kaivattusi

      ulkonäköä, asteikolla 1-10. Perustelut myös 🧢
      Ikävä
      50
      818
    3. Mitä teet mies?

      Oletko jonkun naisen kanssa? 😞
      Ikävä
      69
      766
    4. Miksi sitä miestä tuijotetaan joka paikassa

      Onko maine jonkinlainen?
      Ikävä
      108
      730
    5. Kuka varasti Sisun rahat

      Kun lukee Sisun pöytäkirjaa, niin kuka on se, joka on varastanut Sisun rahat?!
      Sysmä
      7
      651
    6. Miten sulla on niin kaunis

      Ääni. Sellainen rauhoittavan vangitseva, jolloin aika kuin hidastuu. Ihmettelen sua vielä aika paljon. Lähes joka aamu t
      Ikävä
      33
      619
    7. Ajattelen sinua

      vain. Ihoasi vasten ihoani, huuliasi huulillani, sormiasi vartalollani... Olen katkera elämälle siitä että se antoi sinu
      Ikävä
      27
      580
    8. Taas on Festarit ohi ja saatu toisten muijia kylläseksi asti

      2 päivää täyttä jytinää ja rytkettä kyllä kelpaa vielä Kaupunkin tukemana.
      Parkano
      15
      549
    9. Olen työtön ilman työnhakuvelvoitetta

      Saan 600e/kk. En voi tehdä töitä. En osaa laittaa ruokaa. En pysty kävelemään tai olemaan jalkeilla tuntia pidempään.
      Ikävä
      141
      461
    10. Mikä sai sinut ajattelemaan mies...

      Ettet riittäisi minulle?😔
      Ikävä
      51
      453
    Aihe