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 :

parser un txt


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut parser un txt
    Bonjour a tous,

    je suis debutant en PHP et je voudrais faire un exercice un peu compliqué.

    J'ai 2 fichiers appelons les data et keys
    Dans le fichier data j'ai une serie de registres (ce sont des doc biliographiques).
    Dans le segond fichier j'ai a peu pret la meme chose + des ID.
    Chaque ID est unique et correspond a une chaine bien specifique.

    Pour diferencier les registres du fichier data, l'on peu utiliser le premier champ
    =LDR
    un ligne blanche separe les registre, voici un exemple du fichier:

    Code : 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
    =LDR  01228nam  2200301 b 4500
    =001  00000000000001
    =005  20090429:10082000
    =008  060403\2004\\\\\\\\\\\\\\\\\\\\\\\\baq
    =008  120114s9999\\\\xx\\\\\\\\\\\\000\0\und\d
    =019  \\$aM-34416-2004
    =020  \\$a84-667-3834-7
    =027  \\$a11100
    =024  \\\$a9
    =100  1\$aFerrero, Luis
    =245  10$aMatematika$b :2:  Irakasleentzako materiala$c / Luis Ferrero, María del Carmen Jiménez, María Gregoria Martín
    =260  \\$aMadrid$b : Anaya-Haritza$c, 2004
    =300  \\$a4 bolumen dituen karpeta  (159, 31, 39, 95 or.)$c ; 32 x 26 cm
    =440  \0$aApain eta dotore
    =500  \\$a2004.10.19
    =505  0\$a1. bolumena: Proposamen didaktikoa$a -- 2. bolumena: Programazioa$a -- 3. bolumena: Ebaluazioa$a -- 4. bolumena: Aniztasunaren tratamendua
    =521  0\$a2.maila
    =650  \4$aLMH - Matematika
    =700  1\$aJimenez, Maria del Carmen
    =700  1\$aMart��n, María Gregoria
    =856  \\$u http://www.anaya.es$z Argitaletxearen web-orria
    =856  \\$u http://www.hezkuntza.ejgv.euskadi.net/r43-573/eu/contenidos/informacion/dih6/eu_15733/adjuntos/8466738347.pdf$z Aurkibidea
    =952  \\$p1000001$8LH$d05/04/06$aEK$bEK$oI LH2 MAT 1 04$eANA$s05/04/06
    =998  \\9
     
    =LDR  01239nam  2200373 b 4500
    =001  00000000000003
    =005  20081212:09412200
    ...
    et ainsi de suite.

    l'exercice consiste a parser le champ 650 du fichier data:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =650  \4$aLMH - Matematika
    Ça peu aussi etre comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =650  \4$a Etika
    =650  \4$aPatristika
    =650  \4$aFilosofia
    ou comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =650  \4$aMusika$x-Historia eta kritika
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =650  \4$a Haurren heziketa$j-Ipuinak$j-Haur eta gaztentzako liburuak
    Les champs 650 sont composés de sous champs visibles par des lettres.
    a, ou x ou j ou y, z

    Pour toutes les combinaisons du fichier data il existe une correspondance dans le fichier keys.
    L'ecercice consiste a recuperer l'ID du fichier keys et de le coller a la fin de la ligne 650 du fichier data.

    voici comment se presente les données dans keys:
    Code : 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
    ..MARC..
    TITN
         15
    LD05
         n
    LD06
         a
    LD07
         m
    LD18
         b
    T001
         00000000000006
    T005
         20091214:11502100
    T008
         060403s2005    espa   c      000 1 baq c
    T019
    ...
    T650
         ' 4''a' Haurren heziketa'j'-Ipuinak'j'-Haur eta gaztentzako liburuak'ZZ0004537'
    ..MARC
    Voyez dans le fichier keys, j'ai aussi un champs 650 (T650) et il termine par un numero...C'est ce numero que je soouhaite recuperer.

    Dans notre exemple ça serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =650  \4$a Haurren heziketa$j-Ipuinak$j-Haur eta gaztentzako liburuak$90004537

    J'ai commencer avec ce petit bout de code, mais je sais pas comment mettre dans une variable une chaine et ensuite la comparer dans l'autre fichier:

    Code : 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
    <?
    if (!$fp = fopen("cata.txt","r")) {
    echo "Echec de l'ouverture du fichier";
    exit;
    }
    else {
    	while(!feof($fp)) {
    	// On récupère une ligne
    		$Ligne = fgets($fp,255);
     
    	// On affiche la ligne
    		echo $Ligne;
     
    	// On stocke l'ensemble des lignes dans une variable
    		$Fichier .= $Ligne;
    	}
    	fclose($fp); // On ferme le fichier
    }
     
    ?>
    J'aurais besoin de quelque clefss s'il vous plait.
    Cordialement

  2. #2
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonjour,

    Citation Envoyé par Idiaz
    je suis debutant en PHP et je voudrais faire un exercice un peu compliqué.
    Ah ah ! Pardon
    C'est en se lançant des défie qu'on progresse

    Alors si j'ai bien compris tu souhaite récupérer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ' 4''a' Haurren heziketa'j'-Ipuinak'j'-Haur eta gaztentzako liburuak'ZZ0004537'
    Et plus particulierement le numéro à la fin : 'ZZ0004537'.

    Est-ce que tous les numéros que tu souhaites récupéré possède des ' en début et fin de chaîne ?

    Si c'est le cas ce serra très simple avec explode().

    Citation Envoyé par Idiaz
    je sais pas comment mettre dans une variable une chaine
    Rien de plus simple il te suffit d'écrire $maVar = $Ligne; une fois que tu est sûr que c'est la bonne. Et il faut bien évidement déclarer la variable avant la boucle pour pouvoir l'utiliser à l'exterieur.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut
    oui tous les numero du fichier keys ont des '' pour delimieter.

    Le probleme c'est que si un champs 650 possede la lettre a x et j
    c'est different de la meme chose avec a et x
    ou a et z
    Meme si a possede la meme valeur.

    Et en plus, comment passer l'ID au fichier data et le coller a la bonne place?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Je n'ai pas très bien compris ce que tu souhaite faire, mais tu devrais te diriger vers les regex (expressions régulières), c'est assez lourd mais pratique.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut a tous,

    je vais essayer de simplifier ma demande.

    Pour ce faire, je vais expliquer par fonction.
    La premiere chose que je souhaite faire c'est lire un fichier txt... Pour ça j'ai ce petit bout de code qui marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
     $fichier="out.txt"; 
     $tabfich=file($fichier); 
     for( $i = 1 ; $i < count($tabfich) ; $i++ ){
    	echo $tabfich[$i];
     }
    ?>
    Dans ce fichier, je dois detecter un champ specialement, celui qui commence par =650:

    La deja je sais pas comment faire pour dire a php de seulement ce centrer sur ce qui commence par =650 et passer du reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    =500  \\$a2004.07.16
    =521  0\$a3.maila
    =650  \4$aDBH - Gizarte Zientziak, Geografia eta Historia$90002964=856  \\$u http://www.oup.com$z Argitaletxearen web-orria
    =952  \\$p1000151$8DBH$d28/04/06$aEK$bEK$oI DBH3 GE0 24 04$eOXF$s28/04/06
    ...

    J'essaye ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php 
     $fichier="out.txt"; 
     $tabfich=file($fichier); 
    	for( $i = 1 ; $i < count($tabfich) ; $i++ ){
    		if(substr($tabfich[$i],0,4)=="=650")
    			echo $tabfich[$i];
    	}
    ?>
    Ça marche j'ai tous les =650 et pas le reste.

    Et dans ce champ je dois recuperer tout le texte qui se trouve entre el $a et le $9

    C'est a dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBH - Gizarte Zientziak, Geografia eta Historia
    J'essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
     $fichier="out.txt"; 
     $tabfich=file($fichier); 
    	for( $i = 1 ; $i < count($tabfich) ; $i++ ){
    		if(substr($tabfich[$i],0,4)=="=650")
    			preg_match("(^a)", $tabfich[$i], $resultat);
    	}
    	echo $resultat;
    ?>
    Et la...j'y arrive pas.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    foreach pour parcourir un tableau

Discussions similaires

  1. parser un .txt
    Par dimtri16 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 09/09/2011, 15h01
  2. Script shell pour parser un fichier txt
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/09/2008, 10h32
  3. Comment parser un fichier.txt sous Access?
    Par takepaf dans le forum VBA Access
    Réponses: 5
    Dernier message: 31/05/2007, 12h15
  4. Parser un fichier txt
    Par takepaf dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/05/2007, 12h29
  5. Parser un fichier TXT
    Par Blaireau dans le forum Langage
    Réponses: 5
    Dernier message: 08/08/2006, 21h28

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