Auteur Sujet: (Partiel résolu] Modif extension .JPG en .jpg  (Lu 3559 fois)

plus minus reset

0 Membres et 1 Invité sur ce sujet

Hors ligne Horemans

  • AncestroSenior
  • *****
  • Messages: 1 775
    • http://perso.wanadoo.fr/philippe.horemans
(Partiel résolu] Modif extension .JPG en .jpg
« le: 08 Septembre 2005 à 13:13:02 »
je voudrais harmoniser la casse des extensions de fichiers media dans la  table "MULTIMEDIA" colonne MULTI_PATH.

Je ne sais pas faire un update pour modifier la fin d'une chaine de caractère.

Si c'est possible, j'aimerai avoir la solution
Plus çà va, plus je me régale...  Et avec  Quisontils, la gestion des actes, c'est facile !   Philippe
 

Hors ligne Lau

  • Modérateur
  • AncestroSenior
  • *****
  • Messages: 1 651
    • http://laro.chez-alice.fr
(Partiel résolu] Modif extension .JPG en .jpg
« Réponse #1 le: 08 Septembre 2005 à 16:43:05 »
Sous Oracle, on ferait :

:
update MULTIMEDIA

set MULTI_PATH = concat(concat(substr(MULTI_PATH,1,instr(upper(MULTI_PATH),'.JPG',1,1)-1),'.jpg'),substr(MULTI_PATH,instr(upper(MULTI_PATH),'.JPG',1,1)+length('.JPG'),length(MULTI_PATH)))


Cela te donnera une piste...



A noter que la concaténation sous firebird se fait par ||

Vérifie donc la syntaxe de substr et la commande équivalente à instr
 

Hors ligne Horemans

  • AncestroSenior
  • *****
  • Messages: 1 775
    • http://perso.wanadoo.fr/philippe.horemans
(Partiel résolu] Modif extension .JPG en .jpg
« Réponse #2 le: 08 Septembre 2005 à 21:00:34 »
Trop complexe pour moi, INSTR et SUBSTR ne sont pas reconnus, encore moins LENGTH.

Que se passerait-il, quelles seraient les conséquences dans Ancestrologie si je transforme la colonne MULTI_PATH tout en minuscules par



update multimedia set multi_path = lower(multi_path)



Des avis ?
Plus çà va, plus je me régale...  Et avec  Quisontils, la gestion des actes, c'est facile !   Philippe
 

Hors ligne DDdeBerdeux

  • AncestroGrandMaitre
  • *******
  • Messages: 3 244
  • Remercié: 3 fois !
(Partiel résolu] Modif extension .JPG en .jpg
« Réponse #3 le: 08 Septembre 2005 à 21:39:38 »
Sous Firebird, çà devrait être:

update MULTIMEDIA

set MULTI_PATH=SUBSTR ( MULTI_PATH , 1 , STRLEN ( MULTI_PATH )-3)

 ||LOWER ( SUBSTR ( MULTI_PATH , STRLEN ( MULTI_PATH ) -2 , STRLEN ( MULTI_PATH )))

seulement voilà,çà ne marche pas. Les fonctions SUBSTR, STRLEN, LOWER sont bien déclarées dans la base comme fonctions externes (venant de ib_udf), mais en les déclarant, PCM a limité à 80 caractères  les fonctions SUBSTR et LOWER,  alors qu'elles pourraient en admettre jusqu'à 32767, et que le champ MULTI_PATH en fait 255.

Galère pour modifier les déclarations, car il faudrait d'abord modifier toutes les procédures qui les utilisent. Autant repartir des métadatas pour recréer une nouvelle base vide. Mais de toute façon pas à la portée des utilisateurs.

Pour aujourd'hui, il est plus simple d'utiliser IBEasy+ ou IBOconsole.

A+

André

PS, la dernière proposition de HOREMANS ne marche pas non plus à cause du LOWER
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne DDdeBerdeux

  • AncestroGrandMaitre
  • *******
  • Messages: 3 244
  • Remercié: 3 fois !
(Partiel résolu] Modif extension .JPG en .jpg
« Réponse #4 le: 09 Septembre 2005 à 09:19:56 »
J'y arrive en 5 requêtes successives:

DECLARE EXTERNAL FUNCTION LOWER2

CSTRING(255) CHARACTER SET ISO8859_1

RETURNS CSTRING(255) CHARACTER SET ISO8859_1 FREE_IT

ENTRY_POINT 'IB_UDF_lower' MODULE_NAME 'ib_udf';



DECLARE EXTERNAL FUNCTION SUBSTR2

CSTRING(255) CHARACTER SET ISO8859_1, SMALLINT, SMALLINT

RETURNS CSTRING(255) CHARACTER SET ISO8859_1 FREE_IT

ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';



update MULTIMEDIA

set MULTI_PATH=SUBSTR2 ( MULTI_PATH , 1 , STRLEN ( MULTI_PATH )-3)

||LOWER2 ( SUBSTR2 ( MULTI_PATH , STRLEN ( MULTI_PATH ) -2 , STRLEN ( MULTI_PATH )));



DROP EXTERNAL FUNCTION LOWER2;



DROP EXTERNAL FUNCTION SUBSTR2;



Dans le BOA, il faut les exécuter une par une, et à la fin de chacune il y a une erreur (lecture adresse 000...) non bloquante. Avec IBOconsole je les fais toutes ensembles (Auto Commit activé).

Les 2 premières requêtes ont pour but de créer des fonctions LOWER2 et SUBSTR2 identiques aux LOWER et SUBSTR existantes mais capables de travailler sur des chaînes de 255 caractères :evil:

La troisième met en minuscules les 3 derniers caractères du champ MULTI_PATH.

Les 2 dernières suppriment les 2 fonctions LOWER2 et SUBSTR2, mais je ne pense pas qu'il y ait d'inconvénients à garder ces fonctions pour une utilisation ultérieure, bien que je préfèrerai que les LOWER et SUBSTR actuelles soient modifiées.

Pour ceux qui seraient tentés par l'expérience, n'oubliez pas la sauvegarde préalable de la base.

A+

André

PS: réédition du 01/02/2006: A partir de la version b4.04 de la base, les fontions externes de chaîne de caractères supportent jusqu'à 255 caractères. Il n'est donc plus nécessaire de créer les fonctions avec le "2".
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne Horemans

  • AncestroSenior
  • *****
  • Messages: 1 775
    • http://perso.wanadoo.fr/philippe.horemans
(Partiel résolu] Modif extension .JPG en .jpg
« Réponse #5 le: 09 Septembre 2005 à 13:48:25 »
çà marche !

La mémoire de Lau :D était bonne, mais il manquait les instructions pour le faire. Faute de passer par la porte, André est passé par la fenêtre !

j'obtiens des violation à chaque lancement, mais au final, les JPG sont devenus jpg.

Je conserve précieusement ces requêtes, car je ne doute pas d'en avoir encore l'usage..... jusqu'à ce qu'Ancestrologie ou Créationweb se chargent de la question.  



Bravo et Merci   :D
Plus çà va, plus je me régale...  Et avec  Quisontils, la gestion des actes, c'est facile !   Philippe
 

Tags: