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 :

Extraire des portions de textes d'un fichier


Sujet :

Langage PHP

  1. #1
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut Extraire des portions de textes d'un fichier
    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.

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    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 : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    numérote les lignes et extrait toutes les ligne n*x+y
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    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)
    Je suis fervent 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 de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur 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…

  5. #5
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    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.

  6. #6
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    j'ai essayé avec ce code, mais pas de résultat :

    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
    <?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);
     
    ?>

  7. #7
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    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 : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    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 .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  8. #8
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    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

    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 :

    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 ?

  9. #9
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    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
    <?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;
      }
    }
    Je suis fervent 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 de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur 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…

  10. #10
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    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.

  11. #11
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    {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 )
    Je suis fervent 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 de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur 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…

  12. #12
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    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 : 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
    $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 />";

Discussions similaires

  1. extraire des parties de nom d'un fichier
    Par helaaa dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/05/2010, 11h34
  2. [Toutes versions] Extraire des données dans une liste de fichiers
    Par PATMA dans le forum Excel
    Réponses: 1
    Dernier message: 13/10/2009, 22h52
  3. Extraire des blocs de données dans un fichier. AWK?
    Par oliverjack dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2009, 19h56
  4. Réponses: 3
    Dernier message: 16/04/2009, 15h00
  5. Extraire des chaines de caractères dans un fichier
    Par cycy75 dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 27/03/2009, 14h56

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