Remplacement d'un caractére conditionnel...

  • Auteur de la discussion dtom
  • Date de début

dtom

Expert
Bonjour à tous.

Je vous expose mon problème.

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

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

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...

[cpp]$export_sql=str_replace("'", "", "$export_sql");
list($idVillage, $coordX, $coordY, $peuple, $idVillage2, $nomVillage, $idJoueur, $pseudo, $idAlliance, $nomAlliance, $population) = explode(",", "$export_sql");[/cpp]


Merci d'avance pour vos lumiéres ;)

 

zeb

Modérateur
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
 

dtom

Expert
putain vous etes lourds....

j'ai compris et j'ai lu ce cours

http://cyberzoide.developpez.com/php4/regex/

mais j'ai pas exactement compris pour la soluce

Quand on formule une demande polis, courtoise et bien expliqué, la moindre des choses et de rendre l'appareil, et pas coller un mot suivie d'un smyley d'énervement!

je m'en vais sur un forum ou les gens sont plus polis...
 

KangOl

Grand Maître
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 :
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...
 

zeb

Modérateur
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!!
 

dtom

Expert
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...".
 

boub popsyteam

Grand Maître
Bin tu fais un str_replace juste avant sur la (ou les) chaine(s) pouvant poser problème :ange:

cf:
 

boub popsyteam

Grand Maître
Oui mais ton champ tu l'as bien de façon isolé AVANT ta requete non ?
 

dtom

Expert
il me faudrais reussir a dire :

- SI une virgule se trouve entre deux quotes, alors on la modifie.

C'est pas plus compliqué que ca littéralement^^
 

dtom

Expert
j'ai tenté ca, sans succés

Code:
$rech=ereg_replace('\'.+,+\'',',',$chaine);
 

dtom

Expert
voici un code plus logique, mais le problème c'est que je remplace tout, et que je ne récupére pas le contenu...
Code:
$rech=ereg_replace('\'+.+,+.+\'',',',$chaine);
 

marsien

Grand Maître
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 :
Code:
$chaine = preg_replace('!([A-Za-z]+)(,){1}!', '$1,', $chaine);
 

dtom

Expert
Merci pour la réponse, mais admettons qu'un joueur met une étoile avant la virgule?
 

boub popsyteam

Grand Maître
Je redis ce que j'ai dis plus haut:

Qd ton joueur rentre son info tu l'as en dehors de toute requete SQL donc tu peux remplacer en dur toutes les virgules sans te prendre la tete ....
 

marsien

Grand Maître
A ce moment-là, faut que tu listes tous les caractères possibles, ou plus simple que tu exclues le ' devant une virgule.
 

dtom

Expert
mais boub... je ne suit pas maître des données, puisqu'elles proviennent d'un export sous la forme d'un sql... donc je suis obligé de faire avec.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 845
Membres
1 586 372
Dernier membre
Meeithot
Partager cette page
Haut