REGEX qui ajoute un 0 selon le cas (Dreamweaver)

Mammouth du PHP | 959 Messages

22 juin 2008, 03:35

Bonjour,

(Désolé si ça concerne un peu Dreamweaver mais c'est surtout la REGEX qui me pause problème.)

Je travaille sur un Méga Base de Données contenant toutes les villes de France associés à son code postal.

Le problème,
C'est que une ville se situant dans le 13 (Bouches-du-Rhône) par exemple, le code postal va être 13000 voici se que j'ai :
INSERT INTO codes_postaux VALUES (13000, 'MARSEILLE');
Mais une ville située dans l'Ain alors ?? (01)
INSERT INTO codes_postaux VALUES (1000, 'BOURG EN BRESSE');
alors qu'il me faudrais :
INSERT INTO codes_postaux VALUES (01000, 'BOURG EN BRESSE');
Comme il y a près de 39 000 villes en France, je suis mal barré pour ajouter des zéros là ou il en faut...

Donc se que je souhaite faire, c'est une REGEX qui "se dit" :
si le code postal est de 4 caractères, alors j'ajoute un 0 devant, sinon, je laisse...

J'ai déjà utiliser les REGEX sous Dreamweaver et là où je plante, c'est pour le "SI"

Je vois pas comment...

Peut-être une autre solution ? je sais pas...

Merci de votre aide !

Mammouth du PHP | 19672 Messages

22 juin 2008, 09:17

Le problème ne se poserait pas si au lieu d'une colonne numérique tu avais utilisé un type CHAR ou VARCHAR.

Cependant, tu as la possibilité de compléter à 5 chiffres une colonne numérique commençant avec un ou plusieurs 0 en utilisant ZEROFILL.

Extrait de la doc MySQL :
Lorsqu'elle est utilisée avec l'attribut de colonne optionnel ZEROFILL, le caractère de remplissage par défaut est remplacé par le caractère zéro. Par exemple, pour une colonne dont le type est INT(5) ZEROFILL, la valeur 4 sera lue 00004.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

22 juin 2008, 11:01

Salut,

J'ai créé ma table codes_postaux avec les champs code et ville :
CREATE TABLE `codes_postaux` (
`code` VARCHAR( 5 ) NOT NULL ,
`ville` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM ;
Ma table a bien été créée, comment dois-je faire pour donner le paramètre ZEROFILL au champ code ? :?

Merci de ton aide :)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

22 juin 2008, 11:07

1. replace INSERT INTO codes_postaux VALUES \((\d{4}) with INSERT INTO codes_postaux VALUES (0\1 pour ajouter le 0 initial au besoin
2. replace INSERT INTO codes_postaux VALUES \(\d+ with INSERT INTO codes_postaux VALUES ("\1" pour mettre des guillemets autour de ta valeur (s i tu donnes 0XYZ à MySQL va enregistrer XYZ, mais si tu lui donnes une chaines "0XYZ" alors il la gardera tel quel).

Mammouth du PHP | 959 Messages

22 juin 2008, 11:14

naholyr, ta solution marche pas, ou plutôt, à moiter :P

En fait, il me remplace tous mes code postaux comme ça :

Original :
INSERT INTO codes_postaux VALUES (64460, 'AAST');
transformé par :
INSERT INTO codes_postaux VALUES (0\10, 'AAST');
EDIT : l'antislashe passe pas à 0\10 dans le code ci-dessus
et il remplace tout par 0\10 ou même 0\13 et 0\15
:shock:

Merci !

Mammouth du PHP | 19672 Messages

22 juin 2008, 11:16

Envoie ton code postal comme une chaine de caractères, pas comme un nombre, donc au lieu de :

Code : Tout sélectionner

INSERT INTO codes_postaux VALUES (64460, 'AAST');
Fais plutôt :

Code : Tout sélectionner

INSERT INTO codes_postaux VALUES ('64460', 'AAST');
Et dans ce cas ton code postal sera normalement traité comme une chaine de caractères et ne sera donc pas transformé du tout.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

22 juin 2008, 11:21

Ok, je note ça, mais il faudrais ajouter les zéros au besoin parce-que sinon ça sers à rien :lol:

Pour la REGEX de naholyr, j'ai essayé de faire :
INSERT INTO codes_postaux VALUES \((\d{4})
par
INSERT INTO codes_postaux VALUES (0$1
au lieu de
INSERT INTO codes_postaux VALUES (0\1

Là, il m'ajoute carrément des zéros de partout même si le code postal est de 5 caractères :P

Merci de votre aide

Mammouth du PHP | 19672 Messages

22 juin 2008, 11:32

Un peu de logique serait bienvenue ... :-k

Ta liste avant insertion dans la base, elle sort d'où au juste ?? Fichier texte, tableur, autre ? C'est avant insertion qu'il faudrait la traiter.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

22 juin 2008, 11:40

Oui, en fait, j'ai téléchargé ce fichier .sql sur Internet, déjà, il y avait un champ id que j'ai supprimé parce-qu'il me servait à rien, grâce à:
VALUES ((.+), (.+), (.+));
par
VALUES ($3, $4;
(j'ai fais ça avant de poster ici)

et puis maintenant j'essaie de faire une REGEX convenable pour ajouter des 0 aux code postaux du genre 1000 au lieu de 01000

Voilà, merci
PS: j'utilise bien sûr Dreamweaver pour ce fichier .sql pour les REGEX, mais sinon, j'aurais très bien pu faire ce travail par Bloc note, mais à ce moment là, c'est un travail de titan...
Modifié en dernier par chrislabricole le 22 juin 2008, 11:43, modifié 1 fois.

Mammouth du PHP | 19672 Messages

22 juin 2008, 11:42

Donne un exemple du code que tu fais et quelques lignes de ton fichier, parce que pour l'instant, on en est qu'aux devinettes...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

22 juin 2008, 11:46

INSERT INTO codes_postaux VALUES (64460, 'AAST');
INSERT INTO codes_postaux VALUES (55130, 'ABAINVILLE');
INSERT INTO codes_postaux VALUES (55400, 'ABAUCOURT HAUTECOURT');
INSERT INTO codes_postaux VALUES (54610, 'ABAUCOURT SUR SEILLE');
INSERT INTO codes_postaux VALUES (30470, 'AIMARGUES');
INSERT INTO codes_postaux VALUES (73210, 'AIME');
INSERT INTO codes_postaux VALUES (4000, 'AINAC');
INSERT INTO codes_postaux VALUES (3360, 'AINAY LE CHATEAU');
INSERT INTO codes_postaux VALUES (18200, 'AINAY LE VIEIL');
INSERT INTO codes_postaux VALUES (64220, 'AINCILLE');
INSERT INTO codes_postaux VALUES (95510, 'AINCOURT');
INSERT INTO codes_postaux VALUES (85450, 'AISNE');
INSERT INTO codes_postaux VALUES (2110, 'AISONVILLE ET BERNOVILLE');
INSERT INTO codes_postaux VALUES (2820, 'AIZELLES');
INSERT INTO codes_postaux VALUES (27500, 'AIZIER');
INSERT INTO codes_postaux VALUES (2370, 'AIZY JOUY');
INSERT INTO codes_postaux VALUES (11300, 'AJAC');
INSERT INTO codes_postaux VALUES (20000, 'AJACCIO');
Et il y en a certain qui manque un 0

(c'est un extrait de code)

EDIT: pour les zéro, j'ai réussi ! en bidouillant, je me suis servi de la virgule pour pas qu'il mette des zero là ou il faut pas:
VALUES \((\d{4},)
par
VALUES (0$1
Et ça à marché :D
Maintenant je vais faire la REGEX pour les ' .
Ca je devrai y arriver facilement, je mets résolu ;p

Merci à vous tous !

ViPHP
ViPHP | 2287 Messages

22 juin 2008, 15:54

Juste une précision : les codes postaux français ne se composent pas toujours de 5 chiffres (il n'y a qu'en france métropolitaine que c'est le cas). Et la France est un peu plus grande que ça ;-)

Nos amis corses par exemple ont deux départements, dont les codes sont 2A et 2B.
Et nos amis des DOM/TOM ont des codes numériques à 3 chiffres (973, 974...).

Pour gérer l'ensemble des codes postaux français sans discrimination, il faudrait donc utiliser 6 caractères sur un champ de type texte (varchar). Le conseil initial de Cyrano prend tout son sens ;-)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 959 Messages

22 juin 2008, 16:01

La corse est une région composée de deux départements non ?

Mais la corse est un département à la fois, puisque elle à le code postal 20000 (pour Ajaccio)

Je crois pas qu'il y a un problème pour la Corse

Après, pour les DOM/TOM, oui :? là je sais pas et j'ai pas trouver une chose pour compléter là liste...

Pour l'instant, c'est toujours en train de rajouter les quotes '..' Mdr et oui, c'est long !!