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. Paljonko meidän ikäero on?

      Ois kiva tietää.
      Ikävä
      121
      1360
    2. Nainen onko kaikki

      Onko sinulla nainen kaikki hyvin? mies
      Ikävä
      113
      991
    3. Kuka tai ketkä tappo eilen?

      Kenet ja miksi?
      Varkaus
      20
      881
    4. Työttömät risusavottaan

      Tuli tässä juhannusnuotiolla sellainen idea mieleen, että miksei työttömiä velvoiteta tekemään hanttihommia, kuten risus
      Maailman menoa
      310
      784
    5. Mies onko sinulla

      Kaikki hyvin? 🌞 -nainen
      Ikävä
      42
      710
    6. Jos tunnistit...

      Voit hyvin ottaa yhteyttä...olisi mukava jutella☺️
      Ikävä
      59
      637
    7. Persujen kansanedustaja häpäisi lipun!

      "Persujen kansanedustaja Pekka Aittakumpu julkaisi Instagramissa videon, jossa hän heittää Pride-lipun roskiin. Video on
      Maailman menoa
      231
      578
    8. Mitä teet mies?

      Oletko jonkun naisen kanssa? 😞
      Ikävä
      61
      553
    9. Väsynyt odottamiseesi, M.

      Vaikka et minua haluaisi tai huolisi, asia pitäisi käydä lävitse. Siksi etten sinusta pääse ylitse. Pystyisinkö tyytym
      Ikävä
      38
      545
    10. Arvostele kaivattusi

      ulkonäköä, asteikolla 1-10. Perustelut myös 🧢
      Ikävä
      37
      537
    Aihe