Se connecter avec
S'enregistrer | Connectez-vous

Remplacement d'un caractére conditionnel...

Dernière réponse : dans Programmation

Bonjour à tous.

Je vous expose mon problème.

Je dispose d'une chaîne de caractères de ce type :

  1. 79507,-110,101,2,19073,'1.Enfer,le cauchemar',17431,'skipi',1393,'LGA²',704


J'envoie cette chaîne dans une bdd en utilisant comme séparateur la virgule. Or dans cet exemple, le 6 éme champ comprend lui même une virgule, et je ne n'ai pas trouver le moyen de la remplacer. Je souhaite a la place utiliser son équivalent héxadécimal (,).


Voici mon code...

  1. $export_sql=str_replace("'", "", "$export_sql");
  2. list($idVillage, $coordX, $coordY, $peuple, $idVillage2, $nomVillage, $idJoueur, $pseudo, $idAlliance, $nomAlliance, $population) = explode(",", "$export_sql");



Merci d'avance pour vos lumiéres ;) 

Lassé par la pub ? Créez un compte
Expert Programmation

Spa une explication, c'est une soluce :o 
Si, si, la soluce t'est bien donnée par KangOl.

RegEX = Regular Expression
Ce qui donne en français Expression Régulière.
C'est une traduction mot-à-mot, plus ou moins erronée.
D'aucun préfère la locution Expression Rationnelle.

Maintenant, .... Goooooooooogle

et tu voulais pas que je te ponde la regex non plus

cela t'aurais servi a quoi ?
de plus, c'est pas avec ce simple exemple qu'on saurait te faire une regex complete qui fonctionne dans tous tes cas.

et pour ta gouverne, le smiley n'etait pas la pour dire "tu me fais ch*er" mais bien pour dire "pardi". En gros, la regex est la première solution qui me viens a l'esprit. et vu ta ligne a scanner, la regex ne doit pas etre bien difficile.


mais au fait, elle viens d'ou cette ligne ? ne me dit pas qu'elle viens d'un csv tout de meme !
si c'est le cas : http://be.php.net/manual/en/function.fgetcsv.php
c'est le premier truc que j'ai trouver, il doit exister des classes pour encapsuler ca tout bien comme il faut. le cas échéant, c'est pas difficile d'en coder une simple...
Expert Programmation

Bah, ta question reste posée. "Bien expliqué", ceci reste subjectif. Mais tu étais poli et courtois, reste-le.

Quant aux réponses reçues par un modérateur qui lui doit se taper des questions mal posées, malpolies et même pas courtoises, forcément elles peuvent être lapidaires, sans chercher à mal.

Bon, avis à ceux qui répondront à l'ardennais : il connaît les regex, le php, et cette $ù#@ de virgule l'emmerde. (En plus il est aimable comme un sanglier ;)  )

Edit: GRILLED!!

Si je suis pas (plus) aimable, c'est du fait répété de ce genre de réponses sans aucunes explications. A chaque fois il me balançais le nom d'une fonction^^

Sinon, non ce n'est pas du CSV, mais c'est une ligne extraite d'un fichier .SQL où j'ai retiré les premiers caractéres "INSERT INTO...".
Expert Programmation

Ce qu'il te faut, c'est plutôt : si une virgule est précédée d'une ou plusieurs lettres, elle est remplacée par son code. Ca devrait te faciliter la vie. Par ex :
  1. $chaine = preg_replace('!([A-Za-z]+)(,){1}!', '$1,', $chaine);
Expert Programmation

Euh, je ne connais pas PHP, mais les regex, si.

AMHA, le motif de recherche devrait être
('[^']*),([^']*')
et la substitution
\1,\2

Comment écrire ça en PHP ?
Expert Programmation

Citation :
Euh, je ne connais pas PHP, mais les regex, si.

AMHA, le motif de recherche devrait être
('[^']*),([^']*')
et la substitution
\1,\2

Comment écrire ça en PHP ?

Pratiquement comme je l'ai écrit 2 posts plus haut ;)  Je n'ai juste pas rajouté le 2e test de non présence d'un guillemet simple après la virgule, mais ce n'est pas forcément utile il me semble. Par contre le test d'un chiffre avant la virgule semble l'être non ?

Pour ceux que ça intéresse de tester leurs regex en live, un petit soft sympa : The Regex Coach

dtom a dit :
Bonjour à tous.

Je vous expose mon problème.

Je dispose d'une chaîne de caractères de ce type :

  1. 79507,-110,101,2,19073,'1.Enfer,le cauchemar',17431,'skipi',1393,'LGA²',704


J'envoie cette chaîne dans une bdd en utilisant comme séparateur la virgule. Or dans cet exemple, le 6 éme champ comprend lui même une virgule, et je ne n'ai pas trouver le moyen de la remplacer. Je souhaite a la place utiliser son équivalent héxadécimal (,).


Voici mon code...

  1. $export_sql=str_replace("'", "", "$export_sql");
  2. list($idVillage, $coordX, $coordY, $peuple, $idVillage2, $nomVillage, $idJoueur, $pseudo, $idAlliance, $nomAlliance, $population) = explode(",", "$export_sql");



Merci d'avance pour vos lumiéres ;) 





Salutation

Il y a une solution simple avec cut :
ici ton séparateur de champ est la virgule, donc en fait ::
cat 'ton fichier' | cut -d"," -f6,7
tu obtiens exactement ce que tu recherches !!!!

-d pour délimiteur (ici la virgule)
-f pour field / champs (ici les 6 et 7eme champs)

Voila



Lassé par la pub ? Créez un compte