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

EDI, CMS, Outils, Scripts et API PHP Discussion :

traitement fichier .txt


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut traitement fichier .txt
    Bonjour à tous,

    J'ai un fichier texte qui es de la forme :

    -------- Debut du fichier texte ---------
    test test test test test
    test test
    test test test test test test test
    test test
    test test test test test test test
    test test
    test test
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    test test test test test
    test test
    test test
    test test test test test
    test test
    test test
    test test test test test
    test test
    test test
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    ----------- fin du fichier texte ------------


    Je souhaite récupérer ce qu'il y a entre les "!" c'est à dire avoir 10 a récupérer.

    le fichier texte est à la racine de mes pages php.

    Je suis débutant et je ne vois pas du tout comment lui dire va de "!" à "!" sachant que ces des caractères identique.


    Je vous remercies de votre aide.

    Steven

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu pourrais utiliser preg_replace est une expression "sauf ce qui est entre !"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Merci de ta réponse.
    Donc je lit le fichier ligne par ligne et je faire un preg_replace avec une expression régulière ?

    Je vais tester ça alors.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non tu fais le preg_replace sur l'intégralité du fichier.

    Tu pourrais lire le fichier ligne par ligne et detecter les "!" mais c'est laborieux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    ha ok merci, je teste ca et je reviens poster ce que j ai comme
    résultats ! par contre niveau regex je débute ! sa ressemblerais a quoi ?


    merci

    j'ai pensé à faire cela mais sa ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    //ouvre le fichier et mets le contenu dans $fichier
    $fichier = file_get_contents("test.txt");
     
    //Ma regex
    $pattern = '!(.+)!';
     
    //et remplace par rien
    $replacement = ' ';
     
    echo preg_replace($pattern, $replacement, $fichier);

  6. #6
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    L'expression ci-dessous ne considère les point d'exclamation comme des séparateurs uniquement s'ils sont seuls.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/(^!$.+?^!$)/sm';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Haut
    !
    Test avec un point d'exclamation ! dans le texte.
    Ce dernier ne sera pas considéré comme un séparateur de bloc.
    Il sera donc supprimé avec le texte.
    !
    Bas

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    sabotage va faire les gros yeux, mais en attendant que tu trouve la bonne expression régulière, je te donne une solution assez basique en testant les lignes :
    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
    $texte = file('texte_test.txt');
    $texte = array_map('trim',$texte);
     
    $i = false;
    $j = 0;
    $tab_result = array();
     
    foreach ($texte as $value)
    {
    	if ($value == '!') $i = !$i; else if ($i) $tab_result[$j][] = $value; 
    	if ($value == '!' && $i == true) $j++;
    }
     
    echo '<pre>';
    print_r($tab_result);
    echo '</pre>';

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Merci ABCIWEB et sabotage , mais j'ai opter pour la solution de ABCIWEB.
    Merci encore de m'avoir aidé c'est un exercice que je dois rendre demain à condition que j'arrive à faire cela. J'y suis depuis ce matin 7h mais je sèche.

    Alors afficher ce qu'il y a entre les "!" "!" c'est ok

    Par contre on me demande d'afficher que lorsque j'ai une chaine de caractère précise.

    je m'éxplique si dans une page php je fais un formulaire et je fais passer le paramètre
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['chaine']=="recuperer"
    alors mon resultat devras être :

    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer

    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    devra être enlever :
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot

    fichier texte d'exemple ci dessous.




    -------- Debut du fichier texte ---------
    test test test test test
    test test
    test test test test test test test
    test test
    test test test test test test test
    test test
    test test
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    test test test test test
    test test
    test test
    test test test test test
    test test
    !
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    !
    test test
    test test test test test
    test test
    test test
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    ----------- fin du fichier texte ------------





    Merci encore vous m'avez fait beaucoup avancé et ainsi comprendre la chose

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Je vais vous montrer ce que j'ai essayé pour ne pas que vous pensez que je suis la à attendre la solution. Alors voila ce que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(in_array("recuperer",$tab_result[$j]))
    Mais vue que je me retrouve avec un tableau associatif je ne vois pas comment faire.


    Merci

    solution trouvé : . Je ne sais pas si c'est la meilleur mais voila ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for($m=1;$m<=count($tab_result);$m++)
    {
    	if(in_array($_POST['chaine'],$tab_result[$m]))
    	{
    		foreach($tab_result[$m] as $valeur)
    			echo $valeur."<br>";
    	}
     
    }
    A la fin de mon traitement je travaille avec $tab_result. J'ai ajouté du code afin de pouvoir lire plusieurs fichier.

    je viens de me rendre compte d'un problème

    Si j'ai un fichier comme celui la :

    test test test test test
    test test
    test test test test test test test
    test test
    test test test test test test test
    test test
    test test
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    test test test test test
    test test
    test test
    test test test test test
    test test
    !
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    il n'y a pas le mot
    !
    test test
    test test test test test
    test test
    test test
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    tous les a récupérer ne seront pas récupérer puisque qu'il se retrouverons comme ça


    a recuperer
    a recuperer
    a recuperer
    a recuperer
    a recuperer
    !
    donc pas entre !--------! mais --------!

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    voici mon problème final et aprés c'est ok :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    !
    ok
    ok
    !
    ok
    ok
    !
    La je récupère les 2 premiers ok

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    !
    ok
    ok
    !    // ici 2 "!" donc pour lui le prochain es entre "!" donc il garde.
    !
    ok
    ok
    !

    Je récupère tout les ok par contre je voudrais que sa fonctionne sans doubler les "!"




    merci

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Dans ton dernier exemple comment feras-tu pour reconnaître des éléments à ne pas récupérer qui seraient intercalés entre tes éléments à récupérer ? Ou alors tu n'as maintenant plus d'éléments "indésirables" et tous les éléments (quelques qu'ils soient) entourés par ! sont à récupérer ?

    T'as un problème d'organisation dans la création de ton fichier texte.

    Si tu veux un fichier texte facilement exploitable il faut t'en préoccuper dès lors de sa création et pas mettre des trucs en pagaille dedans pour ensuite essayer de faire le tri.

    Pour mieux pouvoir t'aider il nous faudrait connaitre les tenants et les aboutissants :
    - Comment est créé ce fichier texte, à partir de quelles données.
    - A quoi doit-il servir, que veux tu pouvoir récupérer ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Points : 53
    Points
    53
    Par défaut
    Voila mon programme fini cependant il ne m'affiche que lorsqu'il retrouve la chaîne de caractère exacte.

    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
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <?php
     
    if(isset($_POST['valider']))
    {
    $texte = file('test.txt');
    	$texte = array_map('trim',$texte);
     
    	$deb = -1;
    	$fin = -1;
    	$max = count($texte);
    	$presence_deb = false;
    	$presence_fin = false;
    	$j=0;
    	$k=0;
    	$resultat = array();
     
    	for($i=0;$i<$max;$i++) // on parcours le fichier
    	{
    		$presence_deb = false;
    		$presence_fin = false;
     
    		if($texte[$i]=='!') // Si on trouve '!'
    		{
    			$deb = $i; // On initialise la variable de début de la chaine
    			$presence_deb = true;
     
    			$j=$deb+1;
     
    			while($presence_fin == false && $j<$max)
    			{
    				if($texte[$j]=='!') // Si on retrouve un '!' 
    				{
    					$fin =$j;
    					$presence_fin = true;
     
    					$i= $j-1;
    				}
     
    				$j++;
    			}
     
    			if($presence_deb == true)
    			{
    				if($presence_fin == true)
    				{
    					$s=0;
    					for($z=$deb+1;$z<$fin;$z++)
    					{
     
    						$resultat[$k][$s] = $texte[$z];
    						$s++;
    					}
    					$k++;
    				}
    			}
    		}
    	}
     
     
     
     
     
     
    	for($i=0;$i<count($resultat);$i++)
    	{
    		if(isset($resultat[$i]) && is_array($resultat[$i]))
    		{
     
    		if($resultat[$i]!='')
    		{
    		if(in_array($_POST['chaine'],$resultat[$i]))
    			{
     
    				foreach($resultat[$i] AS $valeur)
    				{
     
     
    					echo $valeur.'<br>';
     
    				}
    			echo '<br>--<br>';
    			}
     
    			}
    		}
    	}
     
     
     
     
    }
     
     
    ?>
     
     
     
     
     
     <html>
     <head>
     </head>
     <body>
     <form action="index.php" method="post">
     <input type="text" name="chaine">
     <input type="submit" name="valider"  value="rechercher">
     </form>
     
     
     </body>
     </html>

    Merci encore de votre aide.

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Tu trace mais tu n'a toujours pas répondu à ces questions :

    Citation Envoyé par ABCIWEB Voir le message
    Pour mieux pouvoir t'aider il nous faudrait connaitre les tenants et les aboutissants :
    - Comment est créé ce fichier texte, à partir de quelles données.
    - A quoi doit-il servir, que veux tu pouvoir récupérer ?
    Il est très probable que nous aurions pu te conseiller quelque chose de plus optimisé et plus simple si tu avais pris le temps d'exposer toutes les données de ton problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traitement fichier txt pour Excel
    Par jouclar dans le forum Général Python
    Réponses: 2
    Dernier message: 02/03/2011, 17h22
  2. [PERL]: Help script traitement fichier txt tabulaire
    Par Piccolupo13 dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2007, 20h37
  3. [CSV] Traitement fichiers txt/csv avec php
    Par cirtey dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2007, 16h46
  4. Traitement fichier .txt (gestion des '','')
    Par clemasson dans le forum Access
    Réponses: 1
    Dernier message: 11/12/2006, 15h26
  5. Optimiser traitement fichier [.txt]
    Par Metallic-84s dans le forum Langage
    Réponses: 14
    Dernier message: 16/03/2006, 13h33

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