StringStream

asdfghjkl

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

4

611

    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. Sanna Marin vetänyt leukoja 11 kertaa

      Tästähän oli joskus polemiikkia, kun muistaakseni lupasi kymmenen tai jotain vedellä. No nyt niin on, ainakin omien san
      Maailman menoa
      77
      5555
    2. Kirjoita

      … jotakin minkä vain kaivattusi tietää
      Ikävä
      118
      1926
    3. Farmi Suomi: Kokeeko Frederik, 81, saman kohtalon kuin ikämies Danny?

      Danny, musiikkineuvos Ilkka Lipsanen, nähtiin mukana Farmi Suomi -realityssä v. 2024. Danny teki yllätysratkaisun ja tuo
      Tv-sarjat
      23
      1830
    4. Tyhmä persuväite = köyhä argumentti

      Väite, että vasemmistopuolueita äänestäisivät vain “köyhät, tapatyöttömät tai heikoilla lahjoilla varustetut”, kertoo en
      Maailman menoa
      30
      1798
    5. Sosialismia Tampereella: Virallinen ilmiantolinja avautuu kaupungissa

      Nyt siis mennään mansessa ihan justiinsa samaan malliin kuin entisessä Neuvostoliitossa, jossa saattoi ilmiantaa naapuri
      Maailman menoa
      57
      1767
    6. Tiesitkö? Andy McCoy ja Pelle Miljoona saavat taiteilijaeläkettä - Tämän suuruinen eläke on

      Ylimääräiset taiteilijaeläkkeet on jaettu ja 59 taiteilijaa sai sen. Taiteilijoiden keskimääräinen eläketulo jää hyvin a
      Maailman menoa
      55
      1195
    7. Oliko se peppu

      Vai älykkyys mikä enemmän viehätti?
      Ikävä
      73
      1136
    8. Haluan sut

      Voitaisiinko tutustua paremmin toisiimme? Ovi on aina auki sinulle. Lähelle.
      Ikävä
      39
      945
    9. Kunnanvaltuusto koolle heti

      Tämä on erittäin vakava tilanne 17 hakkiita oli hyrylle mutta Kas kummaa kaksi hakkiota loppusuora oli Kainuusta ja Brys
      Hyrynsalmi
      29
      919
    10. Sähköautoa vaikea hankkia koska latauspisteet puuttuu

      Suurimmassa osassa taloyhtiöitä joiden talot rakennettu 2018 tai aiemmin ei latauspisteet ole sellaisia että sähköautoa
      Maailman menoa
      60
      918
    Aihe