Siis tämmöinen ohjelma ei käänny Turbo Pascal 7:ssa, valittaa ton lowercasen kohdalla "Unknown identifier"iä.
Mikähän mahtaa olla vikana? Vielä omituisemmaksi tämän tekee sen että Free Pascalilla tämä toimii juuri niin kuin pitääkin. Minun muistaakseni on toiminut joskus aikaisemmin TP:ssä.
PS. Ja kukaan ei sitten tule sanomaan että minun pitäisi vaihtaa joko Delphiin tai vaihtaa kääntäjää tai jotn. :D
Ohjelma:
{$X+}
Program nak;
Uses Crt;
Var STR: String;
Begin
Read(STR);
STR := Lowercase(STR);
Writeln(STR);
Readkey;
End.
Eipä näyttänyt TP5.5 ainakaan tuntevan tuota. UpCase-funktion esimerkkinä oli tapa muuttaa for-loopilla kirjain kerrallaan teksti isoksi. Delphistä tuo LowerCase löytyy SysUtils-unitista. Toiminta on sellainen, että jokainen kirjain (A-Z) muutetaan erikseen lisäämällä ASCII-arvoon 32. Ääkköset pitää toki hoitaa erikseen.
P.S. Muistapa kooditagit...
Jaahas. No onkos sitten mitään muuta tapaa hoitaa tuo stringien kirjaimet pieniksi?
Tietysti voit laatia oman funktion, joka tekee muunnoksen. Metabolixin viestistä selviää tämmöisen funktion toimintaperiaate.
Tuolla toimintaperiaatteella homma ei kuitenkaan toimi kuin ASCII-enkoodauksella tai sen johdannaisilla, eli esmes EBCDIC on poissa laskuista. <sarcasm>Mikä menetys! Ei niin voi tehdä!</sarcasm>
Deewiant: Tuskinpa kovin moni ohjelmointikieli oletuksena sisältää funktiota, joka huomioi kaikki enkoodaukset.
Tällaisen proseduurin väsäsin pikaisesti:
function MyLowerCase(S: string): string; var A: Integer; R: string; begin R := S; for A := 1 to Length(S) do if (R[A] >= 'A') and (R[A] <= 'Z') then Inc(R[A], 32); { else tarkista ääkköset erikseen } MyLowerCase := R; end;
Jos funktiossa on mahdollista käyttää Result-muuttujaa, se on toki parempi kuin uuden muuttujan määritteleminen, mutta TP5.5 ei ainakaan sisällä sitä mahdollisuutta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.