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 :

Cherche et stoker une chaine entre 2 chaines dans ligne fichier texte


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Cherche et stoker une chaine entre 2 chaines dans ligne fichier texte
    Bonjour à tous.

    voilà un gros problème ou je planche depuis un moment.
    Mon point de depart est un fichier pdf compose de plusieurs pages.
    chaque page contient les infos d'un client : nom, prenom, adresse etc...

    j'ai donc converti ce pdf en 1 fichier texte.
    apres consultation ce fichier txt ne contient qu'une seule ligne avec toutes le informations des clients

    Conretement un exmple de la ligne :

    facture 1 nom ... : mrxadresse .......: adresse1facture 2 nom ... : mryadresse .......: adresse2facture 3 nom ... : mrzadresse .......: adresse3

    j'ai essaye de recuperer dans un premier temps tous les noms et les afficher.

    voici mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $source = "mon fichier.txt" ;
    $source2=fopen($source,"r") or die("Fichier manquant");
    while (!feof($source2))
    	{
    $chainedebutnom = "nom ... : " ;
    $chainefinnom = "adresse .......:" ;
    $source3 = file_get_contents_utf8($source);
    $un = explode($chainedebutnom,$source3);
    $deux = explode($chainefinnom,$un[1]);
    echo $deux[0]; 
    	}
    fclose($source2);
    Le resultat ma'ffiche bien "mrx".

    Mais comment faire pour afficher en fait tous les noms ( puis pa la suite les stockees dans base sql )

    Par exemple
    mrx
    mry
    mrz

    j'ai tout essayé : foreach, while mais rien n'y fait.

    Si vous avez des idees je suis preneur.

    merci à tous.



    Pour info voici ma fonction "file_get_contents_utf8"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function file_get_contents_utf8($fn) 
    {
         $content = file_get_contents($fn);
          return mb_convert_encoding($content, 'UTF-8',
              mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
    }

  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
    Pus simplement avec une expression regulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $fichier = "mon fichier.txt" ;
    $contenu = file_get_contents_utf8($fichier);
    preg_match_all('#nom \.\.\. : (.+)adresse \.\.\.\.\.\.\.: (.+)\b#U', $contenu , $output, PREG_SET_ORDER);
    foreach ($output as $value) {
      echo $value[1] . ':' . $value[2];
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Merci et merci ...dernier question
    Merci pour ton aide.
    J'ai donc travaillé avec la fonction preg_match_all que je n'avais jamais utilisé.
    Ensuite j'ai refait ma chaine de caractere car le continu de mon fichier etait un exemple.

    Par contre aurais tu une idée pour travailler l'adresse car en fait l'adresse se cumule, exemple :
    1 ALLEE CHAMPLAIN77 LESIGNY ou 2 ALLEE DES CHEVREAUX77185 LOGNES

    Donc le code postal peut etre sur 2 ou 5 caracteres.
    Le numéro de rue present ou absent.

    As tu une idee de traiter la chose ?

  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
    A quoi ressemble ton vrai fichier ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Bout de fichier
    Voici un bout de mon fichier avec 4 clients

    Nom, prénom......................... : Mme PICSOUNom marital........................... : RANTANPLANNationalité............................. : FRANCAISEDate et lieu de naissance.......: 18/03/1952 àAdresse privée....................... :2 RUE DU PAVET77176 SAVIGNY LE TEMPLENom, prénom......................... : M. DALTON FranþoisNom marital........................... :Nationalité............................. : FRANCAISEDate et lieu de naissance.......: 10/08/1954 àAdresse privée....................... :3 ALLEE CHAMPLAIN77 MELUNNom, prénom......................... : Mme IRON MAN Nom marital........................... : SPIDERMANNationalité............................. : FRANCAISEDate et lieu de naissance.......: 01/11/1968 àAdresse privée....................... :8 ALLEE DES CHEVREAUX77185 MEAUXNom, prénom......................... : M. XXX FABRICENom marital........................... :Nationalité............................. : FRANCAISEDate et lieu de naissance.......: 16/11/1947 à PARISAdresse privée....................... :1 SQUARE PARIS-VERSAILLES77 LE MEE-SUR-SEINE



    J'arrive donc à récupérer mes infos mais comment traiter l'adresse en distinguant le code postal et la ville de manière distincte ?

    Merci

  6. #6
    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
    Si le code postal était bien renseigné on pourrait isoler la séquence de 5 chiffres mais ce n'est pas le cas (77 MELUN)
    On peut bricoler une expression qui marchera dans 90% des cas.

    Comment passes-tu du PDF au texte ?
    Je ne pense pas que les expressions soient collées (CHEVREAUX77185) ; Il y a plus probablement un caractère non affichés entre les deux.
    Est-ce que tu peux mettre en pièce-jointe ici ton fichier txt ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Pour passer du Pdf au texte je passe par la fonction d'Adobe ou pas une fonction trouvée sur le net.
    Le résultat est le fichier txt dont je t'ai mis le contenu plus haut.
    Par contre si cela fonctionne dans 90% des cas je suis preneur quand même.
    On peut faire remonter les anomalies ( code postal < 5 chiffres ) dans un tableau que les gens modifieront car le nom de la ville quant à lui sera présent.

  8. #8
    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
    Il faut dans tout les cas identifier le caractère séparateur pour "décoller" ça : MELUNNom

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Voilà ce à quoi je pense.
    On met le pointeur avant "NOM" puis on prendre toutes les lettres avant pour former la ville.
    Dés qu'on arrive sur un chiffre, cela ne peut être que le code postal qui est composé entre 2 ou 5 chiffres..
    En général in n'y a pas de chiffre dans le ville.
    Le plus important pour moi est de récupérer le ville et le code postal.

    Je sais pas si mon idée est bonne

  10. #10
    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
    C'est du bricolage : s'il y a un caractère séparateur il faut l'exploiter.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Je sais bien.
    Mais aucun séparateur n'est présent.
    Toutes les infos sont stockées sur une ligne unique dans le fichier texte.

  12. #12
    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
    Comme je t'ai dit, il y a peut être un caractère non affiché, une tabulation par exemple.
    Il faut regarder precisement.

    En bricolage, je te propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    preg_match_all('#Adresse privée\.+ :(.+)([0-9]{2,5}) ([A-Z\s\-]+)(Nom|$)#Us', $contenu , $output, PREG_SET_ORDER);
    foreach($output as $value) {
      echo $value[1] . ' *** ' . $value[2] . ' *** ' . $value[3] . '<br/>'; 
    }

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    fusionsite.pdf

    Voici mon pdf d'origine.

    Peut etre que ma fonction de convertion de pdf vers txt est mauvaise.

  14. #14
    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
    Il faudrait le code de conversion aussi

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    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
    function ExtractTextFromPdf ($pdfdata) {
    	if (strlen ($pdfdata) < 1000 && file_exists ($pdfdata)) $pdfdata = file_get_contents ($pdfdata); //get the data from file
    	if (!trim ($pdfdata)) echo "Error: there is no PDF data or file to process.";
    	$result = ''; //this will store the results
    	//Find all the streams in FlateDecode format (not sure what this is), and then loop through each of them
    	if (preg_match_all ('/<<[^>]*FlateDecode[^>]*>>\s*stream(.+)endstream/Uis', $pdfdata, $m)) foreach ($m[1] as $chunk) 
    	{
    		$chunk = gzuncompress (ltrim ($chunk)); //uncompress the data using the PHP gzuncompress function
    		//If there are [] in the data, then extract all stuff within (), or just extract () from the data directly
    		$a = preg_match_all ('/\[([^\]]+)\]/', $chunk, $m2) ? $m2[1] : array ($chunk); //get all the stuff within []
    		foreach ($a as $subchunk) if (preg_match_all ('/\(([^\)]+)\)/', $subchunk, $m3)) $result .= join ('', $m3[1]) ; //within ()
    	}
    	else echo "Error: there is no FlateDecode text in this PDF file that I can process.";
    	return $result ; //return what was found
    }

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Il est vrai que je n'ai pas pensé à regarder de ce côté là....merci

  17. #17
    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
    Ton code de conversion ne me donne rien de bon avec le fichier pdf de test que tu as donné.

    J'ai vu la classe PDFParser qui analyse correctement par contre :
    http://www.pdfparser.org/demo

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    j'avais déjà regarde cette classe qui effectivement me met une erreur aprés l'upload du fichier.

    Par contre pour ta solution qui fonctionne à 90% je suis preneur pour me dépanner en attendant.

  19. #19
    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
    Je te l'ai déjà fournie un peu plus haut

    PdfParser fonctionne chez moi avec ton fichier.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Voici un nouveau fichier texte retravaillé avec adobe reader

    Merci
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/07/2011, 13h19
  2. [Batch] Rechercher et renommer une chaine de caractère complexe dans un fichier texte
    Par mrcanardwc dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 24/06/2011, 13h02
  3. Réponses: 14
    Dernier message: 12/12/2007, 17h08
  4. Réponses: 11
    Dernier message: 05/11/2007, 14h38

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