Sign in Join
Wiki copytemporary

TStringList-TStrings Tutorial/fi: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TStringList-TStrings Tutorial/fi

OldNewLine
1+## TStringList
2+
3+[[doc:rtl/classes/tstringlist.html|TStringList]] (tai mistä se on peritty [[doc:rtl/classes/tstrings.html|TStrings]]) on enemmän kuin fantastinen [[Dynamic array/fi|dynaaminen taulukko]] tai merkkijonojen [[Set/fi|joukko]] (merkkijono joukot ei toimi FPC: ssä). TStringList on hyvin kätevä ohjelmoinnissa ja tässä opetetaan TStringListin peruskäyttöä!
4+
5+### Yksinkertainen esimerkki
6+
7+``` pascal
8+program StrList;
9+{$mode objfpc}
10+uses
11+ Classes, SysUtils;
12+var
13+ Str: TStringList;
14+begin
15+ Str := TStringList.Create; // Tämä on tarpeen kun loudaan luokka (tai useimpia luokkia)
16+ Str.Add('Some String!');
17+ writeln('The stringlist now has ' + IntToStr(Str.Count) + ' string(s).');
18+ Readln;
19+ Str.Free; //Release the memory used by this stringlist instance
20+end.
21+```
22+
23+Tämä on yksinkertainen [[Command-line interface/fi|konsoli-ohjelma]], joka luo ja lisää yhden merkkijonon TStringList luokkaan. Seuraavassa on joitain asioita, joita on hyvä tietää:
24+
25+**Create** - Luo TStringList olion muokkaamista varten. Jos käytetään [[Constructor/fi|constructor]] **Create**:a , niin on myöhemmin kutsuttava **Free**:tä. `Free` kutsu aiheuttaa [[Destructor/fi|destructor]] `Destroy` kutsun joka vapauttaa sen tekemän muistivarauksen. Jos ei vapauteta niin ohjelma ei kaadu, mutta se ei vapauta kaikkia sen käytössä olevaa muistia: muistivuoto.
26+
27+**Count** - Tämä [[Property/fi|ominaisuus (property)]] kertoo merkkijonojen lukumäärän.
28+
29+**Add** - Tällä [[Method/fi|metodilla]] lisätään merkkijono TStringList-olioon. Se on [[Function/fi|funktio]], joka palauttaa merkkijonon indeksin. Tässä lukumäärälaskin on kätevä.
30+
31+**Delete** - Poistaa merkkijonon TStringList-oliosta. Tiedät vain, että ei syötetä merkkijonoa, vaan kerrotaan merkkijonon indeksi. Kuten aiemmin kerrottiin: tämä on kuin hieno dynaaminen taulukko.
32+
33+**IndexOf** - Palauttaa merkkijonon indeksin TStringList-oliossa. Jos sitä ei löydy, se palauttaa arvon -1.
34+
35+**Clear** - Tyhjentää TStringList-olion.
36+
37+### Laajennettu esimerkki
38+
39+Entä enemmän mehukas esimerkki, eh?
40+
41+``` pascal
42+program StrList2;
43+{$mode ObjFPC}
44+uses
45+Classes, SysUtils;
46+
47+var
48+ Str: TStringList;
49+ S: String;
50+ Counter: Integer;
51+begin
52+ Str := TStringList.Create;
53+ Writeln('String List Test');
54+ repeat
55+ Writeln('Enter a string to add (type EXIT to stop adding strings)');
56+ Readln(S);
57+ if (S = 'EXIT') then
58+ Break; // exit the loop
59+
60+ if (S <> '') then
61+ begin
62+ Counter := Str.Add(S);
63+ Writeln('String: ' + S + ' was Added!');
64+ Writeln('Index is: ' + IntToStr(Counter)); // The counter will always become the index of the last thing added
65+ end
66+ else
67+ begin
68+ Writeln('No data entered...');
69+ end;
70+ until (S = 'EXIT');
71+ writeln('Contents of the TStringList: '+ Str.CommaText);
72+ Str.Free; //release the memory again
73+end.
74+```
75+
76+Jotta vältetään mahdolliset muistivuodot, kannattaa aina käyttää [[Try/fi|try]]- [[Finally/fi|finally]] lohkoa jos mahdollista, niin saadaan jotain tämän näköistä:
77+
78+``` pascal
79+var
80+ slist: TStringList;
81+
82+...
83+
84+slist := TStringList.Create;
85+try
86+ ...
87+ // do things with your stringlist
88+ ...
89+finally
90+ if Assigned(slist) then
91+ FreeAndNil(slist);
92+end;
93+```
94+
95+``` pascal
96+// This works perfect, no double creation of stringlist... comments free to send to edgarrod71@gmail.com
97+function theStringList: TStringList;
98+var
99+ J: integer;
100+begin
101+ result := TStringList.Create;
102+ for J:=0 to 10 do
103+ result.add(intToStr(J));
104+end;
105+
106+procedure Caller;
107+var
108+ SL: TStringList;
109+ K: integer;
110+begin
111+ SL := theStringList;
112+ for K:=0 to pred(SL.Count) do
113+ writeln(SL[K]);
114+ if assigned(SL) then
115+ SL.Free;
116+end;
117+```
118+
119+### Muunnokset erotusmerkillä oleviin merkkijonoihin
120+
121+Alla oleva koodi tekee merkkijonon, joka sisältää 4 elementtiä ('1', '2', '3' ja '4');
122+
123+``` pascal
124+procedure Sample;
125+var
126+ MyStringList: TStringList=nil;
127+begin
128+ MyStringList:= TStringList.create;
129+ MyStringList.Delimiter := ';';
130+ MyStringList.DelimitedText:='1;2;3;4';
131+ MyStringList.free;
132+end;
133+```
134+
135+Vastaavasti seuraava koodi kokoaa TStringList-oliosta erotusmerkillä varustetun merkkijonon ('1;2;3;4'):
136+
137+``` pascal
138+function Sample2 : string;
139+var
140+ MyStringList: TStringList=nil;
141+begin
142+ MyStringList:= TStringList.create;
143+ MyStringList.Delimiter := ';';
144+ MyStringList.Add('1');
145+ MyStringList.Add('2');
146+ MyStringList.Add('3');
147+ MyStringList.Add('4');
148+ Result :=MyStringList.DelimitedText;
149+ MyStringList.free;
150+end;
151+```
152+
153+Huomaa, että Delimter on merkki, **ei** merkkijono! Jos erotin on merkkijono (esimerkiksi "\n"), voit käyttää alla olevaa koodia saadaksesi merkkijonon, joka sisältää 4 elementtiä ('1', '2', '3' ja '4'):
154+
155+``` pascal
156+procedure Sample;
157+var
158+ MyStringList: TStringList=nil;
159+begin
160+ MyStringList:= TStringList.create;
161+ MyStringList.text:=StringReplace('1\n2\n3\n4','\n',Lineending,[rfReplaceAll, rfIgnoreCase]);
162+ MyStringList.free;
163+end;
164+```
165+
166+Päinvastoin, seuraava toiminto palauttaa „1\n2\n3‟:
167+
168+``` pascal
169+Function Sample : string;
170+var
171+ MyStringList: TStringList=nil;
172+begin
173+ MyStringList:= TStringList.create;
174+ MyStringList.SkipLastLineBreak := True;
175+ MyStringList.add('1');
176+ MyStringList.add('2');
177+ MyStringList.add('3');
178+ result := StringReplace(MyStringList.Text,Lineending,'\n', [rfReplaceAll, rfIgnoreCase]);
179+ MyStringList.free;
180+end;
181+```
182+
183+## Tiedoston käsittely
184+
185+Tiedoston käsittelyyn on TStringList-oliolla kaksi tiedostojen käsittelytoimea: **SaveToFile** ja **LoadFromFile**. **SavetoFile** tallentaa TStringList-olion kaikki merkkijonot tiedostoon. **LoadFromFile** avaa tiedoston ja lisää tiedoston tiedot TStringList-olioon.
186+
187+``` pascal
188+program StrListFile;
189+{$mode objfpc}
190+uses
191+ Classes, SysUtils;
192+
193+var
194+ Str: TStringList;
195+begin
196+ Str := TStringList.Create;
197+ try
198+ Str.LoadFromFile('SomeFile.txt');
199+ Str.Add('Hello');
200+ Str.SaveToFile('SomeFile.txt');
201+ finally
202+ Str.Free;
203+ end;
204+end.
205+```
206+
207+Tässä avattiin tiedosto, muokattiin sitä ja tallennettiin se takaisin, missä se oli!
208+
209+## Vertailu dynaamisiin merkkijono taulukkoon
210+
211+TStringList on yksinkertaistuna [[object-oriented programming/fi||olio]] versio dynaamisesta merkkijoukosta. Joillakin menetelmillä on saman kaltaisuuksia:
212+
213+| Operaatio | array of string | TStringList |
214+|----|----|----|
215+| Muuttujan määrittely | StringList: array of string; | StringList: TStringList; |
216+| Alustus | implicit constructor | StringList := TStringList.Create |
217+| Koon asettaminen | SetLength(StringList, X); | StringList.Size := X; |
218+| Koon selvittäminen | X := Length(StringList); | X := StringList.Count; |
219+| Alkion lisääminen | SetLength(StringList, Length(StringList) + 1); StringList\[Length(StringList) - 1\] := X; | StringList.Add(X); |
220+| Alkion poistaminen | for I := Index to Length(StringList) - 2 do StringList\[I\] := StringList\[I + 1\]; SetLength(StringList, Length(StringList) - 1); | StringList.Delete(Index); |
221+| Kaikkien alkioiden poisto | SetLength(StringList, 0); | StringList.Clear; |
222+| Tuhoaminen | implicit destructor | StringList.Free; |
223+
224+Kuitenkin TStringList tarjoaa paljon enemmän toimintoja kuin perusrakenteen, vertaa dynaamista taulukkoa.
225+
226+## Jatka oppimista
227+
228+TStringListillä on monia muita mielenkiintoisia ominaisuuksia:
229+
230+1. Sen avulla voidaan lajitella merkkijonoja
231+2. Sen avulla voidaan rajoittaa luetteloa vain yksilöllisiin merkkijonoihin
232+3. Voidaan saada kaikkien TStringList-olion merkkijonojen teksti yhdeksi merkkijonoiksi **Text**- ominaisuuden avulla.
233+4. Voit tallentaa objektin tai muun datan merkkijonon viereen
234+
235+Voit oppia kaikki erilaiset aliohjelmat, funktiot ja ominaisuudet. Katso [[doc:rtl/classes/tstringlist.html|TStringList -dokumentaatio]] ... tai Lazaruksen ohje.
236+
237+... ja saatat haluta laajentaa tätä opetusohjelmaa, jos sinusta tuntuu.
238+
239+## Katso myös
240+
241+- [[Character and string types]]
242+
243+---
244+*From the Free Pascal wiki, page "TStringList-TStrings Tutorial/fi", as it stood on 2019-11-16 after a change by Djzepi, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history