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. Mikä sai sinut ajattelemaan mies...

      Ettet riittäisi minulle?😔
      Ikävä
      105
      1004
    2. Anteeksi

      että tein pahaa sulle. En ole täysijärkinen.
      Ikävä
      96
      844
    3. Luulet olevasi pidetty

      Luulet olevasi pidetty ihminen ja tärkeä monille. Oikeasti et ole! Kukaan EI oikeasti sinua jeesaa, kun tarvitset olkap
      Ikävä
      93
      749
    4. Miksi olet sitten

      Yksin? Eikö kukaan kelpaa sinulle?
      Ikävä
      75
      642
    5. Miten murun juhannus meni

      ❤️🤗 Muistithan olla kiltisti 😁😘
      Ikävä
      48
      635
    6. Kalateltta

      Ollaan tulossa Kuhmoon Kamarimusiikkiin jos majoitus viela jarjestyisi kuitenkin. Milloin kalateltta aukeaa naillanakymi
      Kuhmo
      16
      560
    7. Mitä ihanaa voisit tehdä, että saat kaivattusi?

      Mitä ihanaa voisit tehdä, että saat kaivattusi?
      Ikävä
      34
      486
    8. Kuinka paljon hänestä tykkäät?

      Vai tykkäätkö ollenkaan? 🤣
      Ikävä
      43
      472
    9. Miten j mies

      Sun juhannus meni?
      Ikävä
      44
      459
    10. Milloin olet viimeksi ollut hänen..

      Lähettyvillä??
      Ikävä
      25
      455
    Aihe