rechercher remplacer des caractères dans XDATA

ccciolll

Membre expert
Club iGen
Bon déjà je ne sais pas s'il y aura des utilisateurs de XData sur ce site (c'est une Xtension de Xpress qui est très intéressante mais pour un type de travail bien particulier).

Je voudrais rechercher-remplacer des caractères automatiquement avec Xdata, car j'ai une mise en page qui utilise une police dont les 0 (zéros) ont un point au centre, et je voudrais qu'ils soient remplacés par des O (o capitale).
Alors je peux tout à fait le faire après l'importation avec le rechercher-remplacer de Xpress, mais je préfèrerais que ça se fasse automatiquement lors de l'importation.

QQun sait il faire ça ?
 
Ne peux-tu pas le faire directement dans la source des données utilisées par xdata ?

Quelle est cette source ? son format ?
 
Non, la source est saisie par le client, je ne lui fais pas assez confiance pour lui demander de remplacer les 0 par des O et en plus je crois que ça n'est pas trés commercial.
 
Je comprends bien, mais à moment ou un autre, il faudra bien qu'il te remette ces données.
A ce moment là selon le support utilisé (classeur excel, bd filemaker...) tu auras accès à ces données.

Sinon, je sais qu'il est possible de filtrer (exclure) les données à posteriori mais par contre je ne sais pas s'il est possible d'écrire un script avec xdata pour modifier les données.
La difficulté aussi est que je ne possède pas cette couteuse extension.
 
Oui, tout à fait, les données saisies sur le site internet sont ensuite réunies dans un fichier XLS.

Cependant, il est plus simple pour moi de rechercher-remplacer dans Xpress que dans XLS, c'était juste que si c'était automatisé dans Xdata, ça le faisait directement.

Sinon, Xdata permet pas mal de choses, j'ai déjà fait des programmes pour des clients dont le @ n'est pas dans la même police que le reste et j'arrive à extraire le avant @ et le après @ pour en faire 2 variables différentes.

Xdata permet bien des choses, à vrai dire, mais le manuel que j'ai est en anglais, et il y a des jours ou je cale un peu et je me dis plutôt que de me prendre la tête à le décrypter, peut-être que quelqu'un chez macgé connait déjà la soluce.
 
Franchement, si tu reçois un fichier excel comme source le remplacement te prendra... un peu de temps mais pas de programmation.
Le seul souci qui pourrait se faire jour serait le fait que ces nombres soient des décimaux avec des 0 non significatifs mais présents pour conserver un format d'affichage (comme pour des prix)
Par exemple : 12.50.

Dans ce cas, il faudrait passer tout au format texte pour ajouter manuellement les 0 manquant.
 
Les 0 sont dans des téléphones, mais je ne vois pas le problème de "non)significatifs". Quoi qu'il en soit, si je fais "rechercher 0 rempalcer par O" dans excel, ça va passer, idem dans Xpress.

Mais le problème c'est que je ne reçois pas UN ficheir excel pour faire UN fichier Xpress, une seul fois dans ma vie, je vais recevoir autant de fichiers excel que le client passera de commandes et je créerai autant de fichier xpress que j'ai de train de production dans la semaine. Le travail est RÉCURRENT. Même si le client ne passe qu'une commande par semaine, ça fait 52 manips dans l'année (même si un rechercher-remplacer est une manip simple) que je pourrais remplacer par qqchose d'automatique.
Il y a un risque, d'ailleurs à utiliser le rechercher-remplacer dans XPress, le jour où j'oublie de le faire (ça peut arriver) ou alors qqun me remplace et il ne sait pas qu'il faut faire ça (vu que j'ai une bonne centaine de clients différents en mise en page auto, je vais pas faire une fiche descriptive pour chacun d'entre eux, il faut que ça tourne tout seul au maximum).
D'ailleurs, en parlant de risque, si j'opère ce remplacement de 0 par O dans XLS, ce sera plus fastidieux que dans Xpress pour la simple et bonne raison qu'il faut d'abord sélectionner les bonnes colonnes avant de l'appliquer (car si par malheur ça s'applique à la colonne quantité, Xdata va planter, car 1oo exemplaires, ça n'existe pas). De plus, faire ça dans excel, ça m'obligerai à ouvrir et ré-enregistrer les datas. DOnc entre les deux je préfère faire la modif dans Xpress.

Mais j'insiste j'insiste, pourquoi je m'embêterai à refaire la manip à chaque commande dans Xpress si une solution me permet dans Xdata de le faire automatiquement ?

C'est tout l'intérêt de programmes comme Xdata que d'automatiser les taches récurrentes. Sinon on revient à la mise en page à la mano et au lieu de 100 clients on en a 20, avec en plus les nombreuses erreurs de saisies que ça sous-entend (car l'erreur est humaine).
 
Ok, le contexte étant posé, ma solution n'est pas la solution révée.

Je ne connais pas le langage de script (s'il y en a un) de XData et je ne pense pas l'acheter ce week-end ;) donc...

Bonne recherche.
 
Bon, ta question me titille... alors je suis allé télécharger le manuel de xdata chez emsoftware...

pour l'instant, je ne vois pas trop comment introduire un traitement en boucle à mais pour le remplacement d'un caractère à la position 1 :

<< if char 1 of telephone = 0>>O<<else>>char 1

devrait remplacer le premier caractère dans le champ telephone.

Je cherche encore un peu, mais avant si tu peux faire un essai cela permettrait de valider... je n'ai pas XPress au boulot.
 
J'ai une dernière proposition mais je ne sais vraiment pas si cela peut fonctionner car je n'arrive à saisir dans la doc si les traitements en boucle s'appliquent autrement que globalement...

Sinon, ça donnerait :

<< repeat with rang=1 to the number of chars in telephone>>
<< if char rang of telephone = 0>>O<<else>> char rang
<<end repeat>>

Sinon, il reste le support de emsoftware :)
 
  • J’aime
Réactions: ccciolll
Waouw ! tu es un crack de la programmation toi ! Ou alors tu lis super bien l'anglais.

Bon, j'ai eu en parallèle une réponse du support de EMSoftware, justement (ils sont vraiment serviable, là bas, c'est pas la première fois qu'ils répondent à une de mes questions. Si quark était aussi efficace…

Bref, voici la réponse que j'ai reçue

Tu constateras que la première solution proposée ressemble étrangement à la tienne.

Hello Loïc,

Yes, there are a couple of ways that Xdata could do this. You could either set up a repeat loop which would set the phone number a character at a time, setting an O if the character is 0. Assuming the field name is “phoneNbr”:

«repeat with charCounter = 1 to length(phoneNbr)¶
«if char charCounter of phoneNbr contains “0”¶
O«¶
«else»
«char charCounter of phoneNbr¶
«endif¶
«end repeat¶


This works fine for short fields, or for translating one or two characters. This would really slow the prototype down, though, for longer fields or if you had a lot of characters to translate.

A faster method is to use a Translation table, which can quickly perform any number of translations (from a single character to a string of characters, including formatting tags) on-the-fly as the data is imported.

First, you would set up the translation table, which is simply a list of translations with the character or sring to be translated followed by a tab followed by the character or string that is desired, each translation on its own line. The first line of the table defines a comment character. I am attaching a translation table which translates 0 to O for you, it would need to be in the same folder as the document that you are importing into.

Then, use a “put styled” statement which calls that translation as you set the field.

So, in your case, instead of «phoneNbr», you would use:

«put styled “<&tt2"ZeroToOTranslation.txt">” & phoneNbr»

(notice the use of straight and typographer’s quotes in the above)

I am also attaching a small demo for you.

Does this help?

Regards,

Joe Mathia
Em Software Support


Cependant, j'ai opté pour la seconde solution proposée qui ralentit moins la machine.

Je re-traduis en Français au cas où ça intéresserait d'autres gens plus tard.

Donc admettons qu'on ait nommé le Field à modifier "phoneNbr" (je n'explique pas ce qu'est un field, les utilisateurs de Xdata doivent probablement comprendre de quoi il s'agit).

Donc pour faire changer les 3 en 2 (par exemple, bien sûr, je donne cet exemple car c'est plus visuel que de changer les 0 en O), on procéderait de la façon suivante.

Créer un fichier texte contenant les deux lignes suivantes
~ (le caractère ñeta qu'on obtient par alt-N) tabulation Blabla(nb'importe quel texte)
3 (le caractère de départ) tabulation 2 (le caractère d'arrivée)

donc visuellement ça donne
~ machintruc
3 2

qu'on enregistre sous le nom qu'on veut, par exemple "ChangeLesDeuxEnTrois.txt" (attention, il semble que les chiffres dans le nom fassent bugger, j'ai envoyé un mail à EM à ce sujet) et qu'on range dans le même dossier que le fichier Xpress Xdata.

Et dans Xpress, on met le code suivant

«put styled “<&tt2"ChangeLesDeuxEnTrois.txt">” & phoneNbr»

Bien sûr, si on a 3 fields à changer, par exemple fax, cpostal et machinbidule, eh ben on fait d'autres lignes ou on remplace phoneNbr par fax puis cpostal et machinbidule

ATTENTION : J'AI FAIT UN GROS EDIT CI-DESSUS CAR J'AVAIS MARQUÉ DES INFORMATIONS ÉRRONÉES, SI VOUS AVEZ LU CE POST AVANT QUE JE NE LE MODIFIE, OUBLIEZ CE QUE J'AVAIS DIT.

En attendant je vais donner mon coup de boule à Starmac qui est plus que serviable, encore merci de t'être tant décarcassé, j'en demandais pas autant !!!
 
ah tiens, on ne peut ni mettre des tabulations ni mettre plusieurs espace d'affilée sur le forum ?
Un peu gênant, ça non ?
 
Ah, eh bien, merci d'avoir apporté la réponse. Je n'en étais pas si loin.
Mais c'est vrai que la deuxième option est plus propre

Bon boulot
 
Bon, je rectifie ce que j'ai écrit.

Après avoir soumis le Bug à EMSoftware, il s'avère que ce n'en est pas un.

Bref : on est pas obligé d'avoir un nom ne contenant pas de chiffre, on peut appeler sa table "changer2rn3.txt" si on veut, simplement, il faut penser à FERMER le code (ce que ce petit filou de Joe Mathia avait oublié de me préciser.

Donc la formule EXACTE est

«put styled “<&tt2"NomDeLaTable.txt">” & NomDuField & "<&tt2>"»

Et apparemment il est possible de créer une table de multi-conversion (par exemple pour remplacer les 0 par des O et en même temps les points par des espaces (dans le cas de $*¥$ qui saisissent des points dans les numéros de téléphone, par exemple. Je vous en dirai plus quand j'aurai la réponse.
 
Donc, pour faire une table multiconversion, par exemple une table qui change les 1 en 2, les 3 en 4, les 5 en 6, et soyons iconoclaste, le vin en eau.
Voici la table à préparer

~ tabulation TheJesusTable
1 tabulation 2
3 tabulation 4
5 tabulation 6
vin tabulation eau

Et qu'on applique selon la méthode expliquée auparavant.

Cela dit, il y a une petite subtilité, quand on tape ça dans TextEdit ou TideText, ça marche pas à tous les coups, il à tendance à ne pas reconnaître les returns et mal fonctionner. Alors pour que ça marche bien, il faut écrire la formule magique dans un bloc texte Xpress et utiliser la fonction "enregistrer texte" et faire un fichier .txt (en ASCII ça marche bien).

Et voilà ! Merci EM Software !!!

EDIT : ah ben chuis con moi. Changer le vin en eau, c'est pas Jesus qui fait ça, c'est les grandes chaine de restauration&#8230; Jesus il fait l'inverse.
Donc je corrige, la table "Jesus" il faut mettre
eau tabulation vin
en dernière ligne, sinon c'est la cata !