| |
CREATE OR REPLACE FUNCTION " public " ." soundexfr " (text ) RETURNS text AS
$body $
DECLARE
st text ;
st2 text ;
i int2;
ch char ;
BEGIN
st2:= ' ' ;
st:= translate ($1 ,' aàäâeéèêëiïîoôöuùûücç ' ,' AAAAEEEEEIIIOOOUUUUCC ' );
st:= upper (st);
FOR i IN 1 ..length (st) LOOP
IF substring(st,i,1 )< > ' ' THEN
st2:= st2| | substring(st,i,1 );
END IF ;
END LOOP ;
st:= ' ' ;
FOR i IN 1 ..length (st2) LOOP
IF NOT (substring(st2,i,1 ) IN (' A ' ,' E ' ,' I ' ,' O ' ,' U ' ,' Y ' ,' H ' ,' W ' )) THEN
st:= st| | substring(st2,i,1 );
END IF ;
END LOOP ;
st2:= substring(st,1 ,1 );
FOR i IN 2 ..length (st) LOOP
ch:= substring(st,i,1 );
IF ch IN (' B ' ,' P ' ) THEN st2:= st2| | ' 1 ' ;
ELSIF ch IN (' C ' ,' K ' ,' Q ' ) THEN st2:= st2| | ' 2 ' ;
ELSIF ch IN (' D ' ,' T ' ) THEN st2:= st2| | ' 3 ' ;
ELSIF ch= ' L ' THEN st2:= st2| | ' 4 ' ;
ELSIF ch IN (' M ' ,' N ' ) THEN st2:= st2| | ' 5 ' ;
ELSIF ch= ' R ' THEN st2:= st2| | ' 6 ' ;
ELSIF ch IN (' G ' ,' J ' ) THEN st2:= st2| | ' 7 ' ;
ELSIF ch IN (' S ' ,' X ' ,' Z ' ) THEN st2:= st2| | ' 8 ' ;
ELSIF ch IN (' F ' ,' V ' ) THEN st2:= st2| | ' 9 ' ;
END IF ;
END LOOP ;
st:= substring(st2,1 ,1 );
FOR i IN 1 ..length (st2) LOOP
IF substring(st2,i,1 ) < > substring(st,length (st),1 ) THEN
st:= st| | substring(st2,i,1 );
END IF ;
END LOOP ;
IF length (st)< 4 THEN
FOR i IN length (st)..4 LOOP
st:= st| | ' 0 ' ;
END LOOP ;
ELSIF length (st)> 4 THEN
st:= substring(st,1 ,4 );
END IF ;
return st;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
|
|
| |
CREATE OR REPLACE FUNCTION " public " ." encode64 " (chaine text ) RETURNS text AS
$body $
DECLARE
i integer ;
a integer = 0 ;
x integer ;
b integer = 0 ;
resultat text = ' ' ;
codes64 text = ' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/ ' ;
BEGIN
FOR i IN 1 ..length (chaine) LOOP
x:= ascii (substring(chaine from i for 1 ));
b:= b* 256 + x;
a:= a+ 8 ;
WHILE a> = 6 LOOP
a:= a- 6 ;
x:= b/ (1 < < a);
b:= b% (1 < < a);
resultat:= resultat| | substring(codes64 from x+ 1 for 1 );
END LOOP ;
END LOOP ;
IF a> 0 THEN
x:= b< < (6 - a);
resultat:= resultat| | substring(codes64 from x+ 1 for 1 );
END IF ;
return resultat;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
|
|
| |
CREATE OR REPLACE FUNCTION " public " ." decode64 " (chaine text ) RETURNS text AS
$body $
DECLARE
i integer ;
a integer = 0 ;
x integer ;
b integer = 0 ;
codes64 text = ' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/ ' ;
resultat text = ' ' ;
BEGIN
FOR i IN 1 ..length (chaine) LOOP
x:= position(substring(chaine from i for 1 ) in codes64)- 1 ;
IF x> = 0 THEN
b:= b* 64 + x;
a:= a+ 6 ;
IF a> = 8 THEN
a:= a- 8 ;
x:= b> > a;
b:= b% (1 < < a);
x:= x% 256 ;
resultat:= resultat| | chr (x);
END IF ;
ELSE
Exit ;
END IF ;
END LOOP ;
return resultat;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
|
|
| |
CREATE OR REPLACE FUNCTION " public " ." inverserchaine " (chaine text ) RETURNS text AS
$body $
DECLARE
i integer ;
resultat text = ' ' ;
BEGIN
FOR i IN REVERSE length (chaine)..1 LOOP
resultat:= resultat| | substring(chaine from i for 1 );
END LOOP ;
return resultat;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
|
|
| |
CREATE OR REPLACE FUNCTION " public " ." minimizetext " (text ) RETURNS text AS
$body $
DECLARE
chaine text ;
desti text ;
last char (1 );
current char (1 );
i integer ;
BEGIN
chaine:= translate (lower ($1 ),' àâéèêëîïìôòùû ' ,' aaeeeeiiioouu ' );
chaine:= replace (chaine,' - ' ,' ' );
chaine:= replace (chaine,' ' ,' ' );
chaine:= trim(chaine);
last:= ' ' ;
desti:= ' ' ;
FOR i IN 1 ..length (chaine) LOOP
current := substring(chaine,i,1 );
IF current < > last THEN
last:= current ;
desti:= desti| | current ;
END IF ;
END LOOP ;
RETURN desti;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
|
|
| |
CREATE OR REPLACE FUNCTION " public " ." stroccurence " (chaine text , souschaine text ) RETURNS integer AS
$body $
BEGIN
return array_upper(string_to_array(chaine,souschaine),1 )- 1 ;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
|
|
| |
La fonction prend en entrée une chaine de caractère 'input' et renvoie en sortie une chaîne de caractères 'output' qui correspond à 'input' encodée en code128 pour la création de code-barres.
Dans un logiciel de traitement de texte quelconque, il suffit d'appliquer la police code128 à la chaîne 'output' pour avoir une jolie succession de barres noires et blanches, lisible par un lecteur de code-barres quelconque (pourvu qu'il lise la police code128).
CREATE FUNCTION text2code128(text ) RETURNS text AS $body $
DECLARE
ind integer ;
chaine ALIAS FOR $1 ;
longueur integer ;
checksum integer ;
mini integer ;
dummy integer ;
tableB BOOLEAN ;
code128 text ;
BEGIN
ind:= 1 ;
code128 := ' ' ;
longueur := LENGTH (chaine);
IF longueur < 1 THEN
RAISE EXCEPTION ' Argument Absent!!! ' ;
ELSE
FOR ind IN 1 .. longueur
IF (ASCII (SUBSTR (chaine, ind, 1 )) < 32 ) OR (ASCII (SUBSTR (chaine, ind, 1 )) > 126 ) THEN
RAISE EXCEPTION ' Argument invalide!!! ' ;
END IF ;
END LOOP ;
END IF ;
tableB := TRUE ;
WHILE ind < = longueur LOOP
IF (tableB = TRUE ) THEN
IF ((ind = 1 ) OR (ind+ 3 = longueur)) THEN
mini := 4 ;
ELSE
mini := 6 ;
END IF ;
mini := mini- 1 ;
IF ((ind + mini) < = longueur) THEN
WHILE mini > = 0 LOOP
IF (ASCII (SUBSTR (chaine, ind+ mini , 1 )) < 48 ) OR (ASCII (SUBSTR (chaine, ind+ mini, 1 )) > 57 ) THEN
EXIT ;
END IF ;
mini := mini- 1 ;
END LOOP ;
END IF ;
IF (mini < 0 ) THEN
IF (ind = 1 ) THEN
code128 := CHR (205 );
ELSE
code128 := code128 | | CHR (199 );
END IF ;
tableB := FALSE ;
ELSE
IF (ind = 1 ) THEN
code128 := CHR (204 );
END IF ;
END IF ;
END IF ;
IF (tableB = FALSE ) THEN
mini := 2 ;
mini := mini- 1 ;
IF (ind + mini < = longueur) THEN
WHILE mini > = 0 LOOP
IF (ASCII (SUBSTR (chaine, ind+ mini , 1 )) < 48 ) OR (ASCII (SUBSTR (chaine, ind+ mini, 1 )) > 57 ) THEN
EXIT ;
END IF ;
mini := mini- 1 ;
END LOOP ;
END IF ;
IF (mini < 0 ) THEN
dummy := SUBSTR (chaine, ind, 2 )::integer ;
IF (dummy < 95 ) THEN
dummy := dummy + 32 ;
ELSE
dummy := dummy + 100 ;
END IF ;
code128 := code128 | | CHR (dummy);
ind := ind + 2 ;
ELSE
code128 := code128 | | CHR (200 );
tableB := TRUE ;
END IF ;
END IF ;
IF (tableB = TRUE ) THEN
code128 := code128 | | SUBSTR (chaine, ind, 1 );
ind := ind + 1 ;
END IF ;
END LOOP ;
FOR ind IN 1 .. LENGTH (code128) LOOP
dummy := ASCII (SUBSTR (code128, ind, 1 ));
IF (dummy < 127 ) THEN
dummy := dummy - 32 ;
ELSE
dummy := dummy - 100 ;
END IF ;
IF (ind = 1 ) THEN
checksum := dummy;
END IF ;
checksum := mod (checksum + (ind- 1 ) * dummy, 103 );
END LOOP ;
IF (checksum < 95 ) THEN
checksum := checksum + 32 ;
ELSE
checksum := checksum + 100 ;
END IF ;
code128 := code128 | | CHR (checksum) | | CHR (206 );
RETURN code128;
END ;
$body $
LANGUAGE ' plpgsql ' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
|
|
Consultez les autres pages sources
|
|