Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 21/07/2011, 13h55   #1
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Par défaut Extraire des portions de textes d'un fichier

Bonjour à tous,

J'ai un fichier texte sous la forme suivante :

Citation:
1
Titre-1
texte
Titre-2
texte
Titre-3
texte


2
Titre-1
texte
Titre-2
texte
Titre-3
texte

3
Titre-1
texte
Titre-2
texte
Titre-3
texte

....
Comment extraire, la partie n° 2, et scinder cette partie selon les titres avec leurs texte respectifs ?

Merci.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h13   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
numérote les lignes et extrait toutes les ligne n*x+y
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 16h52   #3
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Code :
numérote les lignes et extrait toutes les ligne n*x+y
Je ne crois pas que ça va marcher, parce que le contenu de "texte" peut contenir 2,3 ou même 20 lignes.

On ne peut pas obtenir une répétition fixe.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 17h48   #4
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Couper la string tous les 2 sauts de lignes ?

type (à larache)

http://codepad.viper-7.com/ghziXg

dans mon exemple et c'est good

(et oui, les \n sont invisibles quand tu "echo" ta variable mais essaye depuis un fichier)
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 20h01   #5
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Le numéro qui superpose chaque bloc désigne le jour actuel du mois.

Y a-t-il une possibilité d'avoir des blocs de texte selon le numéro de chaque bloc ?

Par exemple aujourd’hui j=21, alors on devra avoir le 21eme bloc.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 01h10   #6
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
j'ai essayé avec ce code, mais pas de résultat :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
define('FICHIER', 'txt.txt');
 
//$d = date("d");
$d=2;
 
$existe = FALSE;
@$fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
while (!feof($fp) && !$existe) {
    $ligne = fgets($fp, 1024);
	if (trim($ligne)==$d) 
	{
		// recuperer par exemple le texte entre le bloc 2 et le bloc 3
		if (preg_match("$d([^$d+1]*)i", $fp, $resultat)) echo "resultat 1 = ".$resultat[1]."<br />"; 
        $existe = TRUE;
    }
}
fclose($fp);
 
?>
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 10h37   #7
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
pas de @ lorqu'on code: c'est interdit par la loi ça favorise les vilains sur les gentils, c'est une drogue qui fait croire que tout va bien alors que c'est tout bugué.

je comprend toujours pas comment est fichu ton texte modèle. tu en aurais pas un sous la forme "lorem ipsum" si c'est confidentiel ?

y manque un truc dans ta regex. il manque le délimiteur de début et de fin et si tu lisais attentivement tes messages d'erreurs tu le saurais déjà.
http://us2.php.net/manual/en/function.file.php
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 12h17   #8
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Citation:
Envoyé par gene69 Voir le message
pas de @ lorqu'on code: c'est interdit par la loi ça favorise les vilains sur les gentils, c'est une drogue qui fait croire que tout va bien alors que c'est tout bugué.
Merci de cette information

Citation:
je comprend toujours pas comment est fichu ton texte modèle. tu en aurais pas un sous la forme "lorem ipsum" si c'est confidentiel ?
Voila un extrait identique :

Citation:
1
proverbe
Ex his quidam aeternitati se commendari posse per statuas aestimantes
eas ardenter adfectant quasi plus praemii de figmentis aereis sensu
carentibus adepturi, quam ex conscientia honeste recteque factorum,
easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo,
cum consiliis armisque regem superasset Antiochum. quam autem sit
pulchrum exigua haec spernentem et minima ad ascensus verae gloriae
tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato
monstravit. qui interrogatus quam ob rem inter multos... statuam non
haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam
quod est gravius cur inpetraverim mussitare.
dicton
Sed ut tum ad senem senex de senectute, sic hoc libro ad amicum
amicissimus scripsi de amicitia. Tum est Cato locutus, quo erat nemo
fere senior temporibus illis, nemo prudentior; nunc Laelius et sapiens
(sic enim est habitus) et amicitiae gloria excellens de amicitia
loquetur. Tu velim a me animum parumper avertas, Laelium loqui ipsum
putes. C. Fannius et Q. Mucius ad socerum veniunt post mortem Africani;
ab his sermo oritur, respondet Laelius, cuius tota disputatio est de
amicitia, quam legens te ipse cognosces.
anecdote
Illud tamen te esse admonitum volo, primum ut qualis es talem te esse
omnes existiment ut, quantum a rerum turpitudine abes, tantum te a
verborum libertate seiungas; deinde ut ea in alterum ne dicas, quae cum
tibi falso responsa sint, erubescas. Quis est enim, cui via ista non
pateat, qui isti aetati atque etiam isti dignitati non possit quam velit
petulanter, etiamsi sine ulla suspicione, at non sine argumento male
dicere? Sed istarum partium culpa est eorum, qui te agere voluerunt;
laus pudoris tui, quod ea te invitum dicere videbamus, ingenii, quod
ornate politeque dixisti.
idée
Has autem provincias, quas Orontes ambiens amnis imosque pedes Cassii
montis illius celsi praetermeans funditur in Parthenium mare, Gnaeus
Pompeius superato Tigrane regnis Armeniorum abstractas dicioni Romanae
coniunxit.

2
proverbe
Ex his quidam aeternitati se commendari posse per statuas aestimantes
eas ardenter adfectant quasi plus praemii de figmentis aereis sensu
carentibus adepturi, quam ex conscientia honeste recteque factorum,
easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo,
cum consiliis armisque regem superasset Antiochum. quam autem sit
pulchrum exigua haec spernentem et minima ad ascensus verae gloriae
tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato
monstravit. qui interrogatus quam ob rem inter multos... statuam non
haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam
quod est gravius cur inpetraverim mussitare.
dicton
Sed ut tum ad senem senex de senectute, sic hoc libro ad amicum
amicissimus scripsi de amicitia. Tum est Cato locutus, quo erat nemo
fere senior temporibus illis, nemo prudentior; nunc Laelius et sapiens
(sic enim est habitus) et amicitiae gloria excellens de amicitia
loquetur. Tu velim a me animum parumper avertas, Laelium loqui ipsum
putes. C. Fannius et Q. Mucius ad socerum veniunt post mortem Africani;
ab his sermo oritur, respondet Laelius, cuius tota disputatio est de
amicitia, quam legens te ipse cognosces.
anecdote
Illud tamen te esse admonitum volo, primum ut qualis es talem te esse
omnes existiment ut, quantum a rerum turpitudine abes, tantum te a
verborum libertate seiungas; deinde ut ea in alterum ne dicas, quae cum
tibi falso responsa sint, erubescas. Quis est enim, cui via ista non
pateat, qui isti aetati atque etiam isti dignitati non possit quam velit
petulanter, etiamsi sine ulla suspicione, at non sine argumento male
dicere? Sed istarum partium culpa est eorum, qui te agere voluerunt;
laus pudoris tui, quod ea te invitum dicere videbamus, ingenii, quod
ornate politeque dixisti.
idée
Has autem provincias, quas Orontes ambiens amnis imosque pedes Cassii
montis illius celsi praetermeans funditur in Parthenium mare, Gnaeus
Pompeius superato Tigrane regnis Armeniorum abstractas dicioni Romanae
coniunxit.

3
proverbe
Ex his quidam aeternitati se commendari posse per statuas aestimantes
eas ardenter adfectant quasi plus praemii de figmentis aereis sensu
carentibus adepturi, quam ex conscientia honeste recteque factorum,
easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo,
cum consiliis armisque regem superasset Antiochum. quam autem sit
pulchrum exigua haec spernentem et minima ad ascensus verae gloriae
tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato
monstravit. qui interrogatus quam ob rem inter multos... statuam non
haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam
quod est gravius cur inpetraverim mussitare.
dicton
Sed ut tum ad senem senex de senectute, sic hoc libro ad amicum
amicissimus scripsi de amicitia. Tum est Cato locutus, quo erat nemo
fere senior temporibus illis, nemo prudentior; nunc Laelius et sapiens
(sic enim est habitus) et amicitiae gloria excellens de amicitia
loquetur. Tu velim a me animum parumper avertas, Laelium loqui ipsum
putes. C. Fannius et Q. Mucius ad socerum veniunt post mortem Africani;
ab his sermo oritur, respondet Laelius, cuius tota disputatio est de
amicitia, quam legens te ipse cognosces.
anecdote
Illud tamen te esse admonitum volo, primum ut qualis es talem te esse
omnes existiment ut, quantum a rerum turpitudine abes, tantum te a
verborum libertate seiungas; deinde ut ea in alterum ne dicas, quae cum
tibi falso responsa sint, erubescas. Quis est enim, cui via ista non
pateat, qui isti aetati atque etiam isti dignitati non possit quam velit
petulanter, etiamsi sine ulla suspicione, at non sine argumento male
dicere? Sed istarum partium culpa est eorum, qui te agere voluerunt;
laus pudoris tui, quod ea te invitum dicere videbamus, ingenii, quod
ornate politeque dixisti.
idée
Has autem provincias, quas Orontes ambiens amnis imosque pedes Cassii
montis illius celsi praetermeans funditur in Parthenium mare, Gnaeus
Pompeius superato Tigrane regnis Armeniorum abstractas dicioni Romanae
coniunxit.

4
....

5
....
et chaque jour, je devrais afficher un bloc (désigné par un chiffre).

Je pensais à ajouter des délimiteurs, mais est-ce nécessaire ?
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 14h10   #9
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
define('FICHIER', 'txt.txt');
 
$d='2';
$existe = false;
 
$file = file_get_contents(FICHIER);
$aJour = preg_split("/(\r|\n|\r\n){4,}/", $file); // aJour est le tableau avec 1 case / jour
// echo var_export($aJour,true);
foreach($aJour as $index=>$jour){
  if(preg_match('/^'.$d.'(\r|\n|\r\n){2,}/', trim($jour))){
     $existe = true;
    echo $jour;
  }
}
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 19h03   #10
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
très bien ciblé Shikiryu

Je peux te demander une petite explication pour ceux-ci :

{4,} et {2,}

Je comprend qu'il signifie que depuis le 4eme caractères et depuis le 2eme caractères ajouter tous les caractères trouvés.

mais je n'ai pas compris, comment ca marche pour l'exemple ci-dessus ?

maintenant reste comment diviser la partie 2 résultante en quatre sous-parties :

1 - proverbe

2 - dicton

3 - anecdote

4 - idée

Merci d'avance.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 21h07   #11
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
{4,} = 4 caractères minimum de la combinaison précédente.

Pour séparer encore, il suffit de faire un preg_split sur les sauts de ligne.

Vu l'exemple précédent, je te laisse chercher comment faire. (en gros, comprendre, modifier en conséquence et tester... beaucoup tester )
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 00h50   #12
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
J'ai essayé avec ce code, mais rien de satisfaisant

J'ai testé avec {4,}, parfois en augmentant la valeur, en diminuant et parfois en enlevant ce paramètre ...

en fin de compte, la variable $content aura toujours la même valeur que $jour

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$texte = preg_split("/(\r|\n|\r\n){4,}/", $jour); // 
 
 echo "count texte = ".count($texte);
 echo "<pre>";
 print_r($texte);
 echo "</pre>";
foreach($texte as $index=>$content){
  if(preg_match('/^proverbe(\r|\n|\r\n){2,}/', trim($texte))
	|| preg_match('/^dicton(\r|\n|\r\n){2,}/', trim($texte))
	|| preg_match('/^anecdote(\r|\n|\r\n){2,}/', trim($texte))
	|| preg_match('/^idée(\r|\n|\r\n){2,}/', trim($texte))){
    $existe = true;
 
	$content .="<br />".$content;
	break;
  }
}
echo "<h3>4 Parties correspondante au jour ".$d."</h3>"; 
 
	echo "<br />content = '".$content."'<br />";
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h39.


 
 
 
 
Partenaires

Hébergement Web