Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz: Lazarus szövegátalakítási függvény hiba 2014 máj. 21 06:01 #1340

  • tattila
  • tattila profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 3
  • Köszönetek: 0
Nagyon köszönöm!

Válasz: Lazarus szövegátalakítási függvény hiba 2014 máj. 21 05:32 #1339

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
A "kis" hibák ezek:
Ekezetes:Set of Char=['á','é','í','ó','ö','ő','ú','ü','ű',
'Á','É','Í','Ó','Ö','Ő','Ú','Ü','Ű'];
Ordinal expression expected
Illegal expression
Case 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.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: tattila

Lazarus szövegátalakítási függvény hiba 2014 máj. 20 14:43 #1338

  • tattila
  • tattila profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 3
  • Köszönetek: 0
Sziasztok!

Egy olyan problémám van, hogy egy kódrészlet ami delphiben működött nem akar lefutni lazarusban.

Biztos valami kis hiba van benne, de nem tudok rájönni, akinek van ötlete légyszi írjon.

function TForm1.SzovegAtalakit(Sz: String): String;
Const ABC : Set of Char = ;
Ekezetes : Set of Char = ['á','é','í','ó','ö','ő','ú','ü','ű',
'Á','É','Í','Ó','Ö','Ő','Ú','Ü','Ű'];
Var cv : integer;
UjSz : String;
begin
UjSz := '';
for cv := 1 to length(Sz) do
begin
If Sz[cv] in Ekezetes then
Case Sz[cv] of
'á','Á' : Sz[cv]:= 'a';
'é','É' : Sz[cv]:= 'e';
'í','Í' : Sz[cv]:= 'i';
'ó','ö','ő','Ó','Ö','Ő' : Sz[cv]:= 'o';
'ú','ü','ű','Ú','Ü','Ű' : Sz[cv]:= 'u';
End;
if Sz[cv] in ABC Then
UjSz := UjSz + Sz[cv];
end;
UjSz := UpperCase(UjSz);
SzovegAtalakit := UjSz;
end;

http://forum.prog.hu/tudastar/?kbid=178027&no=5&op=download

  • Oldal:
  • 1