PHP et csv

Résolu/Fermé
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 - 14 juin 2011 à 19:39
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 - 28 juin 2011 à 13:35
Bonsoir,

j'ai besoin de votre aide pour résoudre un problème qui me prend la tête grave.
J'explique, j'ai un fichier excel contenant des informations provenant de ma base de
données. le Hic est que j'ai les noms et prénoms dans une même colonne et je souhaiterai
les séparés mais je sais pas comment faire dans la mesure ou si je sépare avec excel
je fausse tout puisque les nom set prénom n'ont pas les mêmes longueurs et avec PHP
j'ai auncune idée

HELP ME PLEASE LES AMIS

A voir également:

26 réponses

vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
14 juin 2011 à 19:42
Salut,

Ce que tu peux faire c'est une séparation sur l'espace se trouvant entre le nom et le prénom.
Tu peux le faire avec l'utilisation de Regex sous PHP, genre :
([^ ]+)\s*[^ ]+)
qui peut se traduire par :
([^ ]) : tout caractère sauf un espace
\s* : un espace

R'as de très bon manuels sur le web
1
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
Modifié par bigbik le 14/06/2011 à 19:44
imaginons que j'ai un champ nom : ALEXANDRE LE ROI et un champ nom JEAN MICHEL

comment ça va se passer dans ce cas ?
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
Modifié par vlmath le 14/06/2011 à 19:49
Le problème est le suivant :

Tu peux avoir des prénoms multiples OU des nom multiples.
Dans les deux cas, le prog ne peut pas savoir comment découper, et donc tu devras le faire à la main.

Ce que tu peux faire, c'est dire que si t'as plusieurs espaces, il ne les faits pas et te demande de le faire à la main.

Faisable avec PHP
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
14 juin 2011 à 19:51
parce que dans ce cas j'ai besoin que php me sépare le nom et le prénom de sorte que :

nom1= LE ROI Prénom1=Alexandre

nom2=Michel Prénom2= LE ROI
0

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

Posez votre question
help me please
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
14 juin 2011 à 20:06
Bon déjà que pour une personne dans ton exemple le nom se trouve avant et une fois après, que le nom de l'un est le prénom de l'autre, et que le prénom n'est qu'à moitié par rapport à la donnée, hein ...

Je ne comprends rien à ce que tu veux

Je t'ai donné une idée, tu me dis où ça se pose problème dans la prog de regex en PHP ...

Non ?
0
tu sais les regex c'est pas ma tasse de thé. je n'y vois que du noir. si tu me donne un exemple avec un bout de code alors je pourrai suivre.

merci d'avance
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
14 juin 2011 à 20:18
<?php

$src = file_get_import( );

$patt = "@([^ ])+\\s+([^ ]+)@Ui";

preg_match_all( $patt, $src, $output );

print_r( $output );

?>

Code non testé et fait à l'arrache.
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
14 juin 2011 à 21:44
voici le résultat que j'obtiens en testant avec le nom ALEXANDRE LE ROI. je comprend pas :

Array ( [0] => Array ( [0] => ALEXANDRE L [1] => E R ) [1] => Array ( [0] => E [1] => E ) [2] => Array ( [0] => L [1] => R ) )
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
14 juin 2011 à 23:30
t'as utilisé ma regex ?

petite correction ...
$patt = "@([a-z]+)\\s+([a-z ]+)@i";


Je l'avais un peu fait à l'arrache ...
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
Modifié par bigbik le 14/06/2011 à 23:52
ton code est hyper interessant pour moi et je pense qu'il peut résoudre mon problème mais j'ai des questions :

- peux-tu m'expliquer les lignes en détail. dans mon cas nous avons pris le nom sous la forme PRENOM+NOM. comment faire si on avait un NOM+PRENOM ?

- comment récupérer les informations séparer sous forme de variable ?
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
15 juin 2011 à 00:16
Le problème est qu'il ne peut pas reconnaitre ce qui est un nom ou un prénom : tu dois avoir une structure constante pour pouvoir le faire automatiquement.
Pour le script, il va uniquement voir une suite de caractères, rien de plus.

Pour les variables, tu les as déjà : ici, c'est un tableau ($output). Pour l'accès, tu mets simplement $output[0][1] pour accéder à la variable en 0,1 (t'as les indexes dans le print_r ci-dessus.
https://www.php.net/manual/fr/language.types.array.php pour plus de détails.
0
Leviathan49 Messages postés 257 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 22 juillet 2011 70
15 juin 2011 à 08:30
Si tu as les nom de la forme NOM et les prenom de la forme Prenom tu peut utiliser cette regex : https://www.developpez.net/forums/d371731/php/php-base-donnees/sql-separer-nom-prenom-places-cellule-unique/#post2276309
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
25 juin 2011 à 11:07
Bonjour les amis,

J'avais un souci avec mon LAPTOP raison pour laquelle j'avais plus donné signe de vie.

La formule de Leviathan49 est intéressante mais ne marche que si les noms sont écris en majuscule alors que dans mon cas les noms sont écris de la manière suivante "Carvalho Jean-Pierre" par exemple

En fait le sépareur c'est l'espace et pour les noms composés j'ai un "-" d'une manière générale
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
25 juin 2011 à 11:15
Pour être clair, quel est la structure exacte des couples nom-prénom ? Est-ce qu'elle est uniforme pour tout le fichier ?
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
25 juin 2011 à 11:53
Oui la structure est uniforme à 90%, ce qui me est satisfaisant pour moi.

voici des nom extraits de mon fichier:

- Leduc Pierre-Michel

-Gustave-Daniel Michaël

- Henry Maurice
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
25 juin 2011 à 12:49
ben tu vois déjà entre le premier et le deuxième, t'as une inversion ...
Tu ne pourrais pas enlever les 10% qui ne sont pas comme le reste, et on pourra faire une RegEx pour le reste ....
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
Modifié par bigbik le 25/06/2011 à 13:12
Justement c'est pas une inversion. je t'explique ce que je dois faire. les noms et prénoms sont séparés par des espaces comme indiqué ci-dessous dans mon exemple.

Donc si j'ai un nom du genre Leduc Pierre-Michel cela veut dire que LEDUC est le nom et Pierre-Michel le prénom. c'est la même chose pour les autres exemples.
NOM<espace>prénom

toujours le dernier groupe est le prénom et le dernier le nom sachant que pour les noms composés par exemple Gustave-Daniel Michaël, tu as le nom Gustave-Daniel et le prénom Michaël
0
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 1
25 juin 2011 à 13:26
MERCI D'AVANCE POUR TON AIDE
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
25 juin 2011 à 14:00
Bon, ben dans ce cas là, tu peux utiliser :
$patt = "@([^ ]+)\\s+([^ ]+)@i";
(pas testé, mais ça devrait aller).
0