Aller au contenu

Reformater une Chaîne


Phénol

Sujets conseillés

Bonjour,

J'ai un fichier TXT à importer, ou le premier "champs" est le nom complet des personnes :

Exemple :

DUPONT Marc

DE LA FONTAINE Jean

Etc.

Je voudrais séprarer le nom du prénom, le problème est que je ne peux pas utiliser un list($nom, $prenom) = split(" ", $nom_complet); car le nom de famille peut être composé d'espaces...

Comment ne considérer QUE le dernier espace par exemple ? Comment couper le nom du prénom dans mon cas ?

Merci par avance pour votre aide !

P.S. : A aucun moment les prénom ne sont composés d'espaces ! ;)

Lien vers le commentaire
Partager sur d’autres sites

Salut ;)

Voilà :

$chaine = "DE LA FONTAINE Jean";
$tableau = explode(' ', $chaine, -1);
$prenom = $tableau[1];
$nom = $tableau[0];

Voir la fonction explode qui accepte une limite en troisième argument à partir de PHP 5.01.

Lien vers le commentaire
Partager sur d’autres sites

oui, mais on peut ne pas avoir PHP5 d'activé ou + simplement travailler sous php4 :)

// PHP4
$chaine = "DE LA FONTAINE Jean";
$tableau = explode(' ', $chaine);
echo $tableau[count($tableau)-1];

sauf que là, cela ne retourne QUE le prénom :blush:

Modifié par georges
Lien vers le commentaire
Partager sur d’autres sites

Si pas PHP5, suffit d'inverser la chaîne, et de prendre le premier.. Puis de réinverser pour obtenir tout à l'endroit.

$chaine = "DE LA FONTAINE Jean";
$tableau = explode(' ', strrev($chaine), 1);
$prenom = strrev($tableau[0]);
$nom = strrev($tableau[1]);

Lien vers le commentaire
Partager sur d’autres sites

avec explode je suis arrivé avec :

$chaine = "DE LA FONTAINE Jean";
$combien = explode(' ', $chaine);

for ($i=0;$i<count($combien)-1;$i++)
{
$nom.=" ".$combien[$i];
}
$prenom=$combien[count($combien)-1];

echo $nom,' ',$prenom;

par contre avec le code que tu donnes avec strrev(), y a une erreur de d'offset de tableau.. mais va falloir que j'installe PHP5 un de ces quatre matins :smartass:

on peut sur le même ordinateur installer les 2 versions de PHP4 et PHP5 ? (je sais par ailleurs que l'on ne peut pas installer à la fois par exemple 1.6 et 1.8) ?

edit : tu auras compris que je parle de easyphp ;o)

Modifié par georges
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Une autre possibilité est de tirer avantage des expression régulières...

preg_match_all('/(.+) (.+)/i',$nom_complet,$matches);

Ensuite dans le tableau $matches tu trouvera dans l'ordre :

$matches[0] -> Nom complet

$matches[1] -> Nom de famille

$matches[2] -> Prénom

Le premier sous-masque signifie toutes suites de caractères quelconques ".+" (espaces compris) jusqu'à un espace (jusqu'à ce point l'expression n'est pas déterminante), ensuite le deuxième sous-masque est suivi de "$" qui indique la fin de la chaîne... Donc seul la dernière suite de caractères quelconques précédée d'un espace lui correspond.

Il subsiste un problème, si le prénom est composé avec un espace tu n'obtiendra que la dernière partie de ce prénom... par exemple deux prénoms, mais si ce cas n'apparaît pas dans ta liste cette expression rationnelle devrait te contenter. (Comme certain code précédents, je propose juste cette solution car elle te permet somme toute plus de flexibilité si la nature de tes données devait évoluer).

Bonne continuation.

P.S. : Pour PHP4 et PHP5 sur le même ordinateur, sous Windows, tu peux utiliser WAMP qui est également une solution qui intègre Apache, MySQL, PHP et qui offre un "plugin" pour PHP4 (car PHP5 est la version par défaut) et le changement se fait en un seul clic... toutefois les deux versions ne peuvent pas fonctionner en même temps avec cette solution. Je ne crois pas que EasyPHP permet ceci non plus, mais cela fait un moment que je n'ai plus utilisé cette application.

Lien vers le commentaire
Partager sur d’autres sites

Ah oui, je pensais que le "int" était la clef maximale du tableau retourné... Si c'est le nombre de valeurs différentes, il faut mettre 2 au lieu de 1, donc :

$chaine = "DE LA FONTAINE Jean";
$tableau = explode(' ', strrev($chaine), 2);
$prenom = strrev($tableau[0]);
$nom = strrev($tableau[1]);

$chaine = "DE LA FONTAINE Jean";
$tableau = explode(' ', $chaine, -2);
$prenom = $tableau[1];
$nom = $tableau[0];

Essaye avec ça..

Lien vers le commentaire
Partager sur d’autres sites

bon, là je crois bien qu'il a le choix maintenant :hypocrite:

Merci TheRec pour WAMP : sais-tu si l'on peut faire cotoyer WAMP et esayphp ? histoire de tester et de supprimer l'un ou l'autre après essai ?

Lien vers le commentaire
Partager sur d’autres sites

À mon avis la seule limitation que tu auras c'est que tu ne peux pas avoir plusieurs application qui utilisent le même port... en l'occurrence tes serveurs HTTP (celui de EasyPHP et celui de WAMP) ne devront pas utiliser le même port TCP (par défaut c'est le port 80 pour HTTP). Il suffit de spécifier deux ports différents dans les deux fichiers httpd.conf, cherche cette ligne :

Port 80

Et spécifie des ports différents... attention de ne pas choisir des ports utilise par d'autres applications (serveur FTP, MySQL, etc.) ensuite lorsque tu accèdes au serveurs avec ton navigateurs utilise le port adéquat : -http://localhost:<port spécifié dans httpd.conf>

P.S. : Pour plaider la cause de ma solution en PHP, elle ne tient qu'en une ligne également et est compatible avec PHP4 et PHP5 ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...