Extraire des portions de textes d'un fichier

Signaler
Messages postés
281
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
11 avril 2013
-
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonjour à tous,

J'ai un fichier texte sous la forme suivante :

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.

6 réponses

Messages postés
281
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
11 avril 2013

J'ai essayé avec ce code, mais rien ne vient encore :

<?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]."
"; 
        $existe = TRUE;
    }
}
fclose($fp);

?>
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Salut,

Il serait souhaitable d'en connaitre un peu plus sur le texte et ses caractéristiques (son formatage quoi)
Quelles sont les parties qui sont toujours identiques ?
Sur ce que tu donnes j'imagine que [titre-] est variable ?

... le mieux serait un exemple :)


Cordialement,



Kohntark -
Messages postés
281
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
11 avril 2013

Bonsoir kohntark,

Voila un exemple identique.

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
.... 

6
....
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Re,

"$d([^$d+1]*)i"

Il faut toujours essayer de faire le plus simple possible, ce qui est paradoxalement le plus difficile, mais là ta regex l'est vraiment trop.
tu ne matcheras rien du tout avec ça

<?php
$str =  '[ton texte]';
$regex = '`^
    (?<=\s{1})\d{1,2}\s
    (?:\ )?proverbe(?:\ )?\s
    (?.*)
    \s(?:\)?dicton(?:\)?\s
    (?<dicton>.*)
    \s(?:\)?anecdote(?:\)?\s
    (?.*)
    \s(?:\)?idée(?:\)?\s
    (?.*(? =\s\s|\Z))
    `xsmuU';


preg_match_all($regex, $str, $a, PREG_SET_ORDER);

echo 'Voici le dicton du premier chapitre :
'.$a[0]['dicton'].'

    et là le proverbe du troisième :
'.$a[2]['proverbe'].'

        et l\'idée est la suivante
'.$a[2]['idee'];

?>

Je n'ai pas testé à 200% et des améliorations sont sans doute possibles.

Cordialement,


Kohntark -
Messages postés
281
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
11 avril 2013

Non le BBCODE (Gras=[b ][ /b]) sont juste pour démontrer les sous-titres de chaque section qu'il faut extraire.

Même je l'ai enlever, mais ça ne donne rien

$regex = '`^

    (?<=\s{1})\d{1,2}\s
    (?:\)?proverbe(?:\)?\s
    (?.*)
    \s(?:\)?dicton(?:\)?\s
    (?<dicton>.*)
    \s(?:\)?anecdote(?:\)?\s
    (?.*)
    \s(?:\)?idée(?:\)?\s
    (?.*(?=\s\s|\Z))
    `xsmuU';
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
La regex fonctionne parfaitement sur le texte que tu as donné, je l'ai testé.
Le code retourne un tableau de la forme :
array(
['premier chapitre, soit l'index 0']=>
array(
'proverbe'=>'texte du proverbe',
'dicton'=>'texte du dicton',
'anecdote'=> 'texte de l'anecdote',
'idee'=> 'texte de l'idée'
['second chapitre, soit l'index 1] = > array(...)
[etc ...]
}

Si ça ne fonctionne pas chez toi avec le texte que tu fournis ici il se peut qu'il y ait des problèmes d'encodage. Tu peux dans ce cas essayer en virant l'option "u"

Dans les autres cas c'est que le texte sur lequel tu appliques la regex n'est pas structuré de la même façon que l'exemple que tu donnes.
L'idéal serait de voir le texte, sans aucune modification.

Non le BBCODE (Gras =[b ][ /b]) sont juste pour démontrer les sous-titres de chaque section qu'il faut extraire.

Si tu ne le précises pas il n'est pas possible de le deviner, surtout que le BBCode ne fonctionne pas à l'intérieur d'une balise [code]

Même je l'ai enlever, mais ça ne donne rien

La présence, ou non, des [b ][ /b] ne change de toute façon rien, il sont déjà optionnels.
Vu la manière dont tu les as supprimés c'est sur que ça ne risque pas de fonctionner, la regex elle même n'étant déjà plus valide (== plantage de preg_match_all())



Kohntark -