Bug dans modification de chaine de caracteres

Résolu
cs_eikichi Messages postés 9 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 9 mai 2011 - 26 janv. 2011 à 16:05
cs_eikichi Messages postés 9 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 9 mai 2011 - 27 janv. 2011 à 14:40
Bonjour a tous,

J'ai un petit probleme avec la fonction substr_replace.
Dans la fonction addSpace que vous pourrez voir ci-dessous, je ne parviens pas à rajouter un espace entre deux ";". Pour etre plus explicite, voici un exemple de chaine de caractere que je traite:

;;98 Crater Drive;Denver;CO;80301

il s'agit d'une adresse stockée dans une vcard, les ";" indiquent un nouveau champ d'adresse (;adresse;complement;ville;Etat;code postal)

je desire stocker chaque champ dans un tableau, je le fais donc avec explode mais le souci est que les champs vides (comme le ;; du debut de la chaine) ne seront pas pris en compte et je décide donc de rajouter un espace (ou un caractère spécial) entre ces deux ";"

function addSpace($str){
//print_r($str);
for ($i=0;$i<count($str); $i++){
//echo'
'.$str[$i].'
';
print_r($str[$i]);
if (($str[$i] == ";")&&($str[$i+1] == ';')){
print_r($str[$i]);
//echo'
'.$str[$i].'
';
$newstr = substr_replace($str,' ',$i);

}

}
return $newstr;
}


Mais cela ne marche pas et seuls les deux premiers caracteres (ici: ;;) de la chaine sont renvoyes.
Mon test conditionnel doit etre faux mais je ne vois pour le moment pas d'autre alternative. :(

Quelqu'un aurait-il une suggestion qui pourrait m'éclairer?

Merci pour vos réponses ^^

6 réponses

cs_ludwig59 Messages postés 128 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 6 mai 2011 2
26 janv. 2011 à 16:44
Bonjour

Je pense que la fonction str_replace est suffisante.
$chaine = ";;98 Crater Drive;Denver;CO;80301 ";
/* remplace tous les double points virgules par des points virgules séparés par un espace */
$chaine = str_replace(";;","; ;",$chaine);
3
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 janv. 2011 à 16:58
Salut,

mais le souci est que les champs vides (comme le ;; du debut de la chaine) ne seront pas pris en compte

Et bien justement si.

-> php -r 'var_dump(explode(";", ";;98 Crater Drive;Denver;CO;80301 "));'
array(6) {
  [0]=>
  string(0) ""
  [1]=>
  string(0) ""
  [2]=>
  string(15) "98 Crater Drive"
  [3]=>
  string(6) "Denver"
  [4]=>
  string(2) "CO"
  [5]=>
  string(6) "80301 "
}
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
26 janv. 2011 à 17:27
bonjour
pourquoi pas ?
A++

<?php
function addSpace($str){


  $str =explode(";",$str);
  
  echo '';
  print_r($str);
echo '

';
  
  
  foreach ($str as $value){
  echo " ".$value;
  }                    
 
}

$chaine=";;98 Crater Drive;Denver;CO;80301"; 

echo addSpace($chaine);


?>
0
cs_LDDL Messages postés 33 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 7 mars 2013
27 janv. 2011 à 08:37
Bonjour,
Cela n'est t'il pas possible de charger directement ton fichier avec fgetcsv() ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
27 janv. 2011 à 10:39
Salut,

@LDDL : Le format vCard c'est pas du CSV en soit, j'ai un doute sur le fait que fgetcsv() soit le plus adapté.
0
cs_eikichi Messages postés 9 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 9 mai 2011
27 janv. 2011 à 14:40
@Ludwig59: merci pour la réponse, tout fonctionne.
@TychoBrahe: merci aussi a toi, j'aurais du penser au var_dump pour le debug, je vais voir ça de plus près.
0
Rejoignez-nous