A "kis" hibák ezek:
Ekezetes:Set of Char=['á','é','í','ó','ö','ő','ú','ü','ű',
'Á','É','Í','Ó','Ö','Ő','Ú','Ü','Ű'];
Ordinal expression expected
Illegal expressionCase Sz[cv] of
'á','Á':Sz[cv]:= 'a';
Constant and CASE types do not match
Ordinal expression expected
Az ok a következő:
A Lazarus, azért hogy minden támogatott operációs rendszeren ugyanazt az eredményt/kimenetet hozza létre, UTF-8 kódolást használ a szövegek belső kódolására, ellentétben a Delphi-vel, amely a Windows-on szokásost. Az UTF-8 kódolásban a "speciális" és/vagy "nemzeti" karakterek kettő bájton vannak tárolva. E miatt nem lehetnek egy hétköznapi "
set of char" részei.
Más megközelítést javaslok:
ReplaceStr (strutils)
- ez az egyszerűbb
StringReplace (sysutils)
Íme egy lehetséges megoldás:
function TForm1.SzovegAtalakit(Sz: String): String;
const
CsereTomb:array[0..17,0..1]of string[2]=(
('á','a'),
('é','e'),
('í','i'),
('ó','o'),
('ö','o'),
('ő','o'),
('ú','u'),
('ü','u'),
('ű','u'),
('Á','a'),
('É','e'),
('Í','i'),
('Ó','o'),
('Ö','o'),
('Ő','o'),
('Ú','u'),
('Ü','u'),
('Ű','u')
);
var i:Integer;
begin
for i:=0 to 17 do Sz:=ReplaceStr(Sz,CsereTomb[I,0],CsereTomb[I,1]);
Result:=Sz;
end;
Az ilyen karakterátalakítás eredményének használatakor vigyázni kell, mert sok magyar szó esetén lesz azonos, például: agy/ágy, akar/akár, alma/álma, alom/álom, el/él, kar/kár, kert/kért, lap/láp, lep/lép, mer/mér, mert/mért, ókor/ökör, orom/öröm/őröm, ő/ó, út/üt, stb.