IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Un peu d'aide pour ecriture expression reguliere


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Un peu d'aide pour ecriture expression reguliere
    Bonjour,

    J'ai du texte brut (reservation aerienne)

    1.DUPONT/HELENE MRS 2.DUPONT/MAXIME
    3.DUPONT/MARIE MADELEINE 4.DUPONT/OLIVIA(CHD/30JAN17)
    5.DUPONT/OLIVIER(CHD) 6.ALBERT/FABRICE(INF/SYLVIE/30DEC16)
    Je cherche a extraire les nom et prenom et categoriser en adulte, enfant, et bebe

    Ici nous avons 7 passagers

    P1 DUPONT HELENE qui est un adulte
    P2 DUPONT MAXIME qui est un adulte
    P3 DUPONT MARIE MADELEINE qui est un adulte aussi
    P4 DUPONT OLIVIA qui est un enfant (avec sa date de naissance apres le CHD/ )
    P5 DUPONT OLIVIER qui est un enfant (sans date de naissance )
    P6 ALBERT FABRICE qui est un adulte avec un bebe rattaché
    P7 ALBERT SYLVIE qui est un bébé (il porte le meme nom de famille que l'adulte P6 a qui il est joint) et (avec une date de naissance)


    pour filtre les enfants, j'utilise cette formule
    /(\d)[.]([A-Z\s]+)[\/]([A-Z\s]+)\(CHD(\)|\/(\d\d\w\w\w\d\d)\))/


    comment faire pour les adultes
    qui peuvent etre seul, ex :2.DUPONT/MAXIME
    qui peuvent etre attaché à un bébé, ex : 6.ALBERT/FABRICE(INF/SYLVIE/30DEC16)

    merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Vu le nombre de cas de figure possible, m'est d'avis que cela est très difficilement faisable avec une regex.
    Oriente toi plutôt vers un traitement avec parser de texte.

    Comment s'affichent les noms composés ?

  3. #3
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Je suis d'accord, difficile avec une seule règle...

    Pour faire bien, il faudrait 2 règles :

    test.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    1.DUPONT/HELENE MRS 
    2.DUPONT/MAXIME 
    3.DUPONT/MARIE MADELEINE 
    4.DUPONT/OLIVIA(CHD/30JAN17) 
    5.DUPONT/OLIVIER(CHD) 
    6.ALBERT/FABRICE(INF/SYLVIE/30DEC16)
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    $file = "test.txt";
     
    $passengers = array();
    function create_passenger($id,$firstname,$lastname,$type,$naissance='',$option='') {
    	global $passengers;
    	$key = count($passengers)+1;
    	$passengers[$key] = array(
    		"numero" => $id,
    		"nom" => $firstname,
    		"prenom" => $lastname,
    		"type" => $type
    	);
    	if(!empty($naissance)) $passengers[$key]["naissance"]=$naissance;
    	if(!empty($option)) $passengers[$key]["option"]=$option;
    }
     
    if(file_exists($file)) {        
     
    	$pattern = '#(\d)\.(\w+)/([\w\s]+)(.*)?#';
    	$pattern_children = '#(\w+)/*(\w+)*/*(\w+)*#';
     
    	$handle = fopen($file,"r");	
    	while(!feof($handle)) {
     
    		$texte = fgets($handle);
     
    		if(preg_match($pattern, $texte, $matches)) {
     
     
    			$id= 			$matches[1];
    			$firstname= 	$matches[2];
    			$lastname= 		trim($matches[3]);
    			$naissance=		"";
     
    			// cas des enfants
    			if(preg_match($pattern_children, $matches[4], $matches_children)) {
     
    				// si bebe attache a un parent
    				if($matches_children[1] == "INF") {
    					create_passenger($id, $firstname, $lastname, "adulte", $naissance, "parent de ".$firstname." ".$matches_children[2]);
    					if(isset($matches_children[3])) $naissance = $matches_children[3];
    					create_passenger($id, $firstname, $matches_children[2], "enfant", $naissance, "enfant de ".$firstname." ".$lastname);	
     
    				// si enfant
    				}else {
    					if(isset($matches_children[2])) $naissance = $matches_children[2];
    					create_passenger($id, $firstname, $lastname, "enfant", $naissance);
    				}
     
    			// cas des adultes
    			}else {
    				create_passenger($id, $firstname, $lastname, "adulte");
    			}
     
    		}
     
    	}
     
    	fclose($handle);
    	echo "<h5>Résultats : </h5><pre>".print_r($passengers, true)."</pre></hr>";
    }


  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je pense que la 1ère question à se poser est : "la structure du fichier brut est-elle pertinente ?"

    Plus clairement, n'y aurait-il pas un problème de CONCEPTION du remplissage de ce fichier ?

    Ca manque de séparateurs (l'espace n'est pas un séparateur pertinent), de passages à la ligne...

    Ensuite, comment gérer :
    • les noms composés (avec ou sans tiret, avec apostrophe, particule) ?
    • les accents ?
    • les "enfants" qui n'ont pas le même nom que les parents ? (dans les familles recomposées actuelles, ce n'est pas anodin)
    • ...

Discussions similaires

  1. Un peu d'aide pour un debutant
    Par Auvergnator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 18/09/2006, 21h16
  2. [XPath] aide pour une expression
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/07/2006, 11h55
  3. Besoin d'aide pour une expression reguliere
    Par Jim_Nastiq dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2006, 09h11
  4. Besoin d'aide pour une expression régulière
    Par planetiss dans le forum Langage
    Réponses: 5
    Dernier message: 16/02/2006, 19h04
  5. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo