Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 16h20   #1
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
Par défaut traitement fichier .txt

Bonjour à tous,

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

-------- Debut du fichier texte ---------
Citation:
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
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h01   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu pourrais utiliser preg_replace est une expression "sauf ce qui est entre !"
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h19   #3
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
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.
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h30   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 20h23   #5
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
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 :
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);
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 00h35   #6
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

L'expression ci-dessous ne considère les point d'exclamation comme des séparateurs uniquement s'ils sont seuls.
Code :
$pattern = '/(^!$.+?^!$)/sm';
Code :
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
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 01h14   #7
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 559
Points : 1 559
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 :
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>';
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 09h55   #8
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
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 :
$_POST['chaine']=="recuperer"
alors mon resultat devras être :

Citation:
a recuperer
a recuperer
a recuperer
a recuperer
a recuperer

a recuperer
a recuperer
a recuperer
a recuperer
a recuperer
devra être enlever :
Citation:
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 ---------
Citation:
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
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 10h05   #9
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
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 :
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 :
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 :

Citation:
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


Citation:
a recuperer
a recuperer
a recuperer
a recuperer
a recuperer
!
donc pas entre !--------! mais --------!
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 13h49   #10
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
voici mon problème final et aprés c'est ok :

Code :
1
2
3
4
5
6
7
8
 
!
ok
ok
!
ok
ok
!
La je récupère les 2 premiers ok

Code :
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
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 19h24   #11
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 559
Points : 1 559
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 ?
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 10h03   #12
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 36
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 36
Points : 15
Points : 15
Voila mon programme fini cependant il ne m'affiche que lorsqu'il retrouve la chaîne de caractère exacte.

Code :
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.
steven78700 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 05h53   #13
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 559
Points : 1 559
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éalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h38.


 
 
 
 
Partenaires

Hébergement Web