Odstranění diakritky

27 views
Skip to first unread message

Jiří Bureš

unread,
Jul 3, 2023, 6:26:07 AM7/3/23
to Firebird (CZ)
Zdravím všechny.

Je ve FB funkce, která umí odstranit diakritku?

Děkuji
J. Bureš

Jiří Činčura

unread,
Jul 3, 2023, 9:26:51 AM7/3/23
to fireb...@googlegroups.com
Primo jako built-in neni.

--
Mgr. Jiří Činčura
https://www.tabsoverspaces.com/

Jiří Bureš

unread,
Jul 3, 2023, 9:34:07 AM7/3/23
to Firebird (CZ)
A lze to pomocí procedury? Nebyl by nějaký příklad... ?
Děkuji
J. Bureš

Dne pondělí 3. července 2023 v 15:26:51 UTC+2 uživatel ji...@cincura.net napsal:

Slavomir Skopalik

unread,
Jul 3, 2023, 9:51:50 AM7/3/23
to fireb...@googlegroups.com

Ahoj,

pisu si udf v delphi a pouzivam toto:

Utf8ToAnsiEx(StrUTF8,20127);  // Convert into US-ASCII

Priklad primo v UDF funkci:

// https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
// Result is ASCII character set NOT UTF8
function UDF_StrToTerms(StrUTF8: PAnsiChar): PAnsiChar; cdecl;
var
  s, sa, res:AnsiString;
  i:integer;

  procedure AddToRes;
  begin
    if s<>'' then begin
      if Length(s)>2 then
        if res = '' then res := s else res := res + ',' + s;
      s := '';
    end;
  end;

begin
  sa := Utf8ToAnsiEx(StrUTF8,20127);  // Convert into US-ASCII
  sa := AnsiStrings.StringReplace(sa,'''','',[rfReplaceAll]); // Remove apostrophe for correct French words parsing
  sa := UpperCase(sa);
  res := ''; s := '';
  for i:= 1 to Length(sa) do begin
    if sa[i] in ['_','-','0'..'9','A'..'Z']then s := s + sa[i] else AddToRes;
  end;
  AddToRes;
  Result := ib_util_malloc(Length(Res)+1);
  AnsiStrings.StrCopy(Result, PAnsiChar(Res));
end;

Slavek

Ing. Slavomir Skopalik
Executive Head
Elekt Labs s.r.o.
MASA - Collection and evaluation of data from machines and laboratories
http://eng.elektlabs.com/products-and-services/masa
-----------------------------------------------------------------
Address:
Elekt Labs s.r.o.
Chaloupky 158
783 72 Velky Tynec
Czech Republic
---------------------------------------------------------------
Mobile: +420 724 207 851
skype:skopaliks
e-mail:skop...@elektlabs.com
http://www.elektlabs.com
--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „Firebird (CZ)“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu firebird_cz...@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/firebird_cz/1918711d-1450-4ccd-9dec-5578b569300an%40googlegroups.com.

Jiří Bureš

unread,
Jul 4, 2023, 9:05:11 AM7/4/23
to Firebird (CZ)
Ahoj a děkuji za příklad.

Zkusil jsem z aplikace vytvořit proceduru, která obsahuje diakritiku viz.:
sada1 = 'öüäěščřžýáíéňľúůťĚŠČŘŽÝÁÍÉŇĽÚŮŤ';

Po vložení do databáze ale sada1 = '??????????????????????????????????????????????????????????????';

Musím tedy před spuštěním scriptu změnit jeho kódování?

Děkuji
J. Bureš


Dne pondělí 3. července 2023 v 15:51:50 UTC+2 uživatel Slavomir Skopalik napsal:

Slavomir Skopalik

unread,
Jul 4, 2023, 10:14:49 AM7/4/23
to fireb...@googlegroups.com

Ahoj,

popravde, vubec nerozumim.

V dnesni dobe nema smysl pouzivat skripty v jinem kodovani nez UTF8.

Potom, co je to procedura, jenz obsahuje diakritiku?

Potom, co to znamena, vlozit do DB (jak je definovan sloupec)?

Pripojeni k DB, jaky pouzivas charset?

Slavek

Ing. Slavomir Skopalik
Executive Head
Elekt Labs s.r.o.
MASA - Collection and evaluation of data from machines and laboratories
http://eng.elektlabs.com/products-and-services/masa
-----------------------------------------------------------------
Address:
Elekt Labs s.r.o.
Chaloupky 158
783 72 Velky Tynec
Czech Republic
---------------------------------------------------------------
Mobile: +420 724 207 851
skype:skopaliks
e-mail:skop...@elektlabs.com
http://www.elektlabs.com

Tomas Ra

unread,
Jul 7, 2023, 1:19:44 AM7/7/23
to Firebird (CZ)
Dobrý den,
pokud by Vám uvedený skript na odstranění diakritiky nefungoval, tak mě se podařilo vytvořit a odladit plně funkční .bat skript pro Windows 10(11). Výsledek jsem uveřejnil na:  Batch for convesion of all characters to ASCII immediately after text file is updated - Stack Overflow
Skript testuje přítomnost txt souboru a pak ve smyčce testuje každou sekundu, jestli se txt soubor aktualizoval. Zjistí-li, že se aktualizoval, spustí konverzi libovolně zvolených, v tomto případě diakritických znaků na znaky ASCII.
Skript mi trvale běží na miniPC Win11 (64bit) už několik týdnů a zcela spolehlivě, úspěšně a spolehlivě konvertuje každé přibližně 3 minuty textový soubor a nezatěžuje CPU.
Zdraví Tomáš Ransdorf, Praha, www.cherry80.cz - rádio nejlepších písniček 70.-90. let

Dne úterý 4. července 2023 v 16:14:49 UTC+2 uživatel Slavomir Skopalik napsal:

Jiří Bureš

unread,
Jul 7, 2023, 7:21:27 AM7/7/23
to Firebird (CZ)
Ahoj všem.

Nakonec pomohlo do connection stringu vložit Charset=win1250

Hezký den
J. Bureš
Dne pátek 7. července 2023 v 7:19:44 UTC+2 uživatel 88to...@gmail.com napsal:

Slavomir Skopalik

unread,
Jul 7, 2023, 7:28:04 AM7/7/23
to fireb...@googlegroups.com

ad win1250)

Zalezi na tom, jak mate definovane sloupce v DB.

Pokud je mate v UTF8 a nekdo tam vlozi znak, co neni ve win1250, tak dojde k chybe

cannot transliterate between character sets

Win1250 je rychlejsi, ale situace nas donutila prejit na UTF8.

Od te doby nemame problemy.

Slavek


Ing. Slavomir Skopalik
Executive Head
Elekt Labs s.r.o.
MASA - Collection and evaluation of data from machines and laboratories
http://eng.elektlabs.com/products-and-services/masa
-----------------------------------------------------------------
Address:
Elekt Labs s.r.o.
Chaloupky 158
783 72 Velky Tynec
Czech Republic
---------------------------------------------------------------
Mobile: +420 724 207 851
skype:skopaliks
e-mail:skop...@elektlabs.com
http://www.elektlabs.com
Reply all
Reply to author
Forward
0 new messages