Tekst for begyndere (string)

Tags:    delphi
Skrevet af Bruger #1090 @ 04.01.2003
Tekst for begyndere (string)

Noget af det første man får brug for, når man skal til at skrive sine egne programmer i Delphi, er at kunne manipulere med tekst. Det er heldigvis ret nemt, men jeg har manglet en samlet oversigt over de metoder der findes. Når man mangler noget så må man jo lave det, og nu håber jeg også at andre kan bruge det.

Hvad er String?
En string er en array of Char, det betyder at det er en tabel hvor hvert felt indeholder et bogstav eller tegn. Hvis vi f.eks. har en string ’Delphi’ (apostrofferne fortæller at det er en string og ikke almindelig kode) så svarer det til en tabel med 6 felter, i felt 1 er der et ’D’, i felt 2 er der et ’e’ og så videre.
Her er en lille programstump for at demonstrere.

Eksempel 1.

PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR
S : STRING; // Fortæller programmet at S er en string
BEGIN
S := 'Delphi'; // Sætter S til at være 'Delphi'
Showmessage(S[1]); // viser en popupbox med det første bogstav i S nemlig 'D'
Showmessage(S[2]); // viser en popupbox med det næste bogstav i S nemlig 'e'
END;


Som i kan se bruger man firkantparenteser til at fortælle hvilket tegn man vil have vist, det virker også den anden vej. Hvis man vil lave ’Delphi’ om til ’welphi’ Så skriver man bare S[1] := ’w’;
Man kan også lægge strings sammen f.eks. S:= ’Delphi’+’ er sjovt’; giver S = ’Delphi er sjovt’.

Man kan også sammenligne strings med funktionerne < > = her skal man dog være forsigtig. Den største string er den der står sidst når de er ordnet alfabetisk, F.eks.
mus > abe. Men store bogstaver kommer altid før små dvs. abe > Mus !!! Desværre er Delphi ikke et dansk program så de særlige danske bogstaver kommer til allersidst og i rækkefølgen åæøÅÆØ. Det lyder måske som et stort problem men det er det normalt ikke.

Nå nu blev min introduktion lidt længere end jeg havde regnet med men jeg håber til gengæld at vi har fået alle med. Nu til min oversigt.

Funktioner.


Length(string)
Angiver som navnet antyder længden af en string f.eks. length(’Delphi’) = 6.

Pos(string1,string2)
Søger efter string1 i string2 og angiver den første position af string1 i string 2.
F.eks. Pos(’sjov’,’Delphi er sjovt’) = 11.
Hvis string1 ikke findes, så giver funktionen 0.

Copy(string,p,b)
Denne funktion kopiere et stykke af en string, med længden a fra positionen p. F.eks. copy(’Delphi’,2,3) = ’elp’

Showmessage(string)
Denne funktion er ekstremt nyttig når man programmere, jeg har allerede brugt den i mit første eksempel. Funktionen viser en popupbox med string. Der findes også nogle mere komplekse versioner men det vil blive for omfattende at gennemgå dem her.

IntToStr(tal)
Laver et heltal om til en string.

FloatToStr(tal)
Laver et decimaltal om til en string

StrToInt(string)
Laver en string om til et heltal. Pas på, det er ikke alt tekst der kan laves om til et heltal og hvis det ikke kan, går programmet ned.

FloatToInt(string)
Laver en string om til et decimaltal. Har samme problemer som StrToInt().

Procedurer
Jeg har delt min liste op i funktioner og procedurer fordi der er forskel på hvordan de grundlæggende bruges. Funktioner får et input, kigger på det og fortæller så noget om inputtet. Procedurer tager derimod noget ind, laver om på det og spytter det ud igen.
Det er vigtigt, fordi når man laver om på en string så skal det være en variabel, dvs. den skal defineres under VAR (se det første eksempel).

Delete(string,p,b)
Fungere på samme måde som copy() bortset fra at den klipper stykket ud af string.
 S:= ’Delphi’; 
Delete(S,2,3) ;
S = ’Dhi’
Bemærk at det skal gøres på ovenstående måde, Delete(’Delphi’,2,3) virker ikke, fordi programmet ikke kan ændre teksten når den står på den måde.

Insert(string1,string2,p)
Indsætter string1 i string2 på positionen p.

Str(t:p:d,string)
Denne procedure virker på samme måde som IntToStr og FloatToStr bortset fra at det er en procedure og har nogle flere muligheder. Den laver et tal t om til string der fylder p positioner og med d decimaler.
t := 1;
Str(t:6:4,S);
S = ’1.0000’
Bemærk at der er : foran p og d, det betyder at de kan springes over, så man skriver Str(t,S) Delphi beslutter så selv hvordan det skal udskrives.

Val(string,t,fejlpos)
Denne procedure gør det modsatte af Str() bortset fra, at hvis den får en tekst den ikke kan lave om til et tal, så fortæller den dig på hvilken position det gik galt. Meget praktisk funktion. Det skal dog nævnes at val() er meget langsom i forhold til funktionerne StrToInt() og StrToFloat() så brug dem når du kan.

Eksempel 2
Hvis du har forstået det ovenstående så er der ingen grund til at læse videre, men hvis du er i tvivl om hvordan det kan bruges, så er det næste afsnit for dig. Eksemplet er lavet i Delphi 5 men burde virke i alle versioner.

Start med en tom form. Træk en Edit og en Button ned fra standard bjælken.
Dobbeltklik på Button og kopier nedenstående tekst over i programmet.

 procedure TForm1.Button1Click(Sender: TObject);
var
S1,S2 : string; // S1 og S2 er variable strings
h,k : integer; // h og k er variable heltal
begin
S1 := Edit1.Text; //kopier teksten fra edit1 over i S1
S2 := S1; //Kopiere S1 over i S2 for at de bliver lige lange
k := length(S1); //k er længden af teksten i S1
Showmessage('teksten er: '+IntToStr(k)+' tegn lang'); // vis en tekstboks
for h:=1 to k do S2[h] := S1[k-h+1]; // Flytter tegnene fra S1 over i S2 i omvendt rækkefølge
Showmessage(S2); // viser teksten i S2
end;


Nu skulle programmet gerne kunne køre. Når du indtaster en tekst i Edit1 og trykker på Button1 kommer der først en besked med længden af den tekst du har tastet ind og derefter kommer teksten stavet bagfra. Det er ikke særligt nyttigt men det giver forhåbentlig et indtryk af hvordan man bruger funktionerne.

Håber der er nogen der kan bruge det til noget.



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (9)

User
Bruger #1518 @ 18.01.03 23:07
Rigtig god artikel, dog kan den virke en smule rodet i starten. Men ellers en meget god og velskrevet artikel :)
User
Bruger #2622 @ 09.05.03 22:11
Fejl:
FloatToInt(string)
Laver en string om til et decimaltal. Har samme problemer som StrToInt().
mvh Jakob
User
Bruger #1661 @ 20.05.03 13:26
Alternativ kan man bruge StrToIntDef(string, default) som returnere default hvis der findes en fejl under konverteringen.
User
Bruger #469 @ 07.06.03 16:55
God artikel, nem at forstå... over and out....
User
Bruger #2330 @ 14.09.04 15:30
Copy er ikke rent til Strings... Det er MidStr derimod!! Lille note!
User
Bruger #7114 @ 18.01.05 17:33
[Error] lare.dpr(8): E2029 ';' expected but '.' found << ved linjen procedure, og

[Error] lavetvirker.dpr(21): E2003 Undeclared identifier: 'Showmessage' ved showmessage..

jeg bruger delphi 7 og console application
User
Bruger #7877 @ 07.09.05 20:57
Rigtig god og velskrevet artikel god som opslag.
User
Bruger #8101 @ 10.09.05 12:53
Begin

//Super artikkel!
//Den har været meget brugbar for mig!
//Den har lært mig en masse spændende funktioner!

End;
User
Bruger #8422 @ 08.11.05 18:55
Fed artikel, har kun lige et spørgsmål.
Er der et program som man kan teste ens scripts I, eller hvor afvikler man det?
Du skal være logget ind for at skrive en kommentar.
t