.txt Comment extraire données

Résolu
Passpartout -  
 Passpartout -
Voyant les amis,

J'ai un .txt gigantesque d'ou j'ai a extraire certaine information, mais ayant en compte le volume du fichier, il est imposible de le faire manuellement, alors on m'a recomendé de le faire en faisant un programme en C qu'appliqué au fichier peut faire le travail de forme automatisée, le problème est que je n'est aucune idée de programmation. Les données qu'interessent son Numeros suivis de mots clées comme: "Documents" et "Users" et se trouvent partout au document. J'ai teléchargé Turbo C, je me demandais si quelqu'un peut m'aider avec le fichier .C

Merci

17 réponses

Résumé de la discussion

Un utilisateur cherche à extrair des numéros suivis des mots clés Documents et Users dans un fichier texte volumineux, sans intervention manuelle, et envisage un programme en C. Plusieurs options sont proposées, notamment écrire un script en C sous Turbo C sur Windows XP, ou utiliser une macro Excel en VB pour cibler et filtrer l'information. Des vidéos ou méthodes en ligne évoquent aussi findstr et des scripts de type for /f pour générer un CSV exploitable par Excel. Certaines réponses suggèrent d’obtenir des données dans un fichier CSV ou une feuille Excel, afin d’automatiser l’extraction et la consolidation des résultats.

Bobot (l'IA à votre service)
  1. Urielxx Messages postés 223 Statut Membre 46
     
    A mon avis, le faire en C est probablement la solution la plus longue et la plus compliquée si tu n'en as jamais fait avant. Si tu es sous Windows, tu ne peux pas importer ton fichier sous Excel et récupérer ce qui t'intéresse ? Si tu est sous Linux, tu peux utiliser perl ou awk pour récupérer les colonnes que tu souhaites...
    0
  2. Passpartout
     
    Bonjour Urielxx,

    J'y avais pensé, mais le problème est que, lors de l'importation excel y word posent tout dans la même colonne avec tout mélangé et je complique encore la chose. J'ai a utilisé excel aprés mais avec les numeros filtrés du .txt
    0
    1. chuka Messages postés 980 Statut Membre 379
       
      Salut,
      tu pourrais nous montrer un bout du contenu du fichier.. et ce que tu dois récupérer exactement?
      0
  3. Urielxx Messages postés 223 Statut Membre 46
     
    Ton fichier .txt doit utiliser un séparateur (espace, point-virgule, tabulation). Tu peux indiquer à Excel d'utiliser un séparateur particulier : Données->Données Externes -> Importer sous Excel 2003)
    0
  4. Passpartout
     
    Le fichier est plein de lignes du types

    "66 documents 46.542.424 users"

    J'ai a extraire justement les numeros avant les mots
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Passpartout
     
    Un exemple du .txt:

    Liste 21061095

    11.385 american help 22
    11.385 british help 18
    11.807 cantonese help 23
    12.269 czech help 12
    11.465 danish help 15
    12.154 dutch help 15
    11.369 finnish help 15
    12.442 french help 22
    12.539 german help 21
    12.699 greek help 18
    12.010 italian help 16
    11.455 mandarin help 28
    11.303 norwegian help 15
    12.109 portuguese help 18
    12.145 romanian help 15
    12.071 spanish help 22
    11.543 swedish help 16
    11.754 taiwanese help 19
    18 documents 213.904 users 330

    Liste 21061096

    150320062220 37.816 american language
    150320062220 37.980 british language
    150320026220 18.004 cantonese language
    150320026220 41.008 czech language
    150320026220 38.148 danish language
    150320026220 41.128 dutch language
    150320026220 40.912 finnish language
    150320026220 44.256 french language
    150320062220 43.100 german language
    150320062220 45.658 greek language
    150320062220 43.622 italian language
    150320062220 17.964 mandarin language
    150320062220 38.946 norwegian language
    150320062220 43.400 portuguese language
    150320062220 42.110 romanian language
    150320062220 43.474 spanish language
    150320062220 38.070 swedish language
    150320062220 18.006 taiwanese language
    18 documents 673.602 users

    Quand j'applique ce tu m'a dit, il me conserve les données de tout les lignes (texte y numeros) en les posant dans des colonnes, moi, je suis interessé seulement aux numeros des lignes du type: "18 documents 213.904 users"
    0
  7. Urielxx Messages postés 223 Statut Membre 46
     
    Tu n'as pas accès à une machine Linux ? Ca se fait en ligne dans ce cas:

    awk '{if ($2=="documents") {print $1}}' /mon/fichier

    Sinon tu charges tout dans Excel et tu tries pour conserver uniquement les lignes qui t'intéressent, mais je sais qu'Excel a des limitations en nombre de lignes dans ses anciennes versions.
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    le fichier f2.txt contient les 2 listes:
    C:> type aa.bat
    @echo off
    
    for /f "tokens=1,3" %%a in ('findstr "documents users" f2.txt') do echo %%a %%b
    
    C:> aa
    18 213.904
    18 673.602
    
    
    0
    1. Urielxx Messages postés 223 Statut Membre 46
       
      Et vive la ligne de commande :)
      0
    2. Passpartout
       
      Bonjour dubcek

      Je viens de voir ton message que dois-je de ce que tu m'a envoyer (Excuse mon interrogaion, mais je suis verd un peu en programmation)
      0
    3. Passpartout
       
      EXTRAORDINNAIRE dubcek, JE VIENS DE LE FAIRE, MERCI BEAUCOUP.

      Juste une chose, les listes aparaient sue la ligne de commandes, comment passer les numeros sur excel? j'ai pensé en copy paste sur .txt et aprés faires ce que m'a dit Urielxx pour les passer en excel, t'as une milleur idée?
      0
    4. Passpartout
       
      Autre chose, quand j'exécute le fichier, il y a assez de données que la fenêtre de ligne de commande garde juste les derniers, ce que liste au commençement se perd, comment faire pour exporter les resultat directement a un fichier .txt ou excel directement
      0
  9. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Que dois-tu faire des données récupérées ? Les écrire dans un autre fichier ? les lister sur une feuille Excel ?

    ;o)
    0
  10. Passpartout
     
    Malheureusement, j'ai pas accés a une machine Linux.

    Effectivement Excel a des limitations en nombres de lignes, en plus les numeros ne sont pas alignés, alors pas de manière de les avoir sur la même colonne, et finalement le .txt est de 18MB!!! (Il ya des milliers et des milliers et encore des milliers de lignes), impossible de manipuler manuellement.

    Pour tous ses motifs que j'ai pensé a utilisé un programme C, le problème c'est que je n'est aucune idée par où commencé, je l'avais jamais fait avant (programmer, je voulais dire)
    0
    1. chuka Messages postés 980 Statut Membre 379
       
      Si tu veux un code en C...tu peux t'en inspirer...mais un batch semble la meilleur solution!!
      #include <stdio.h> 
      #include <stdlib.h> 
      #include <string.h> 
      int contains(char*buff,char*mot); 
      int main(int num,char**arg) 
      { 
        FILE * rFile; 
        FILE * wFile; 
        char buff[80]; 
        int i=0; 
        if ((rFile = fopen ("c:\\temp\\text.txt","r"))==NULL){ 
            return -1; 
        } 
        if ((wFile = fopen ("c:\\temp\\text0.txt","w+"))==NULL){ 
            return -1; 
        } 
        while (!feof(rFile)){ 
            while((buff[i++]=fgetc(rFile))!='\n') ; 
            buff[i]=0; 
            if (!contains(&buff[0],"documents")){ 
                fwrite(&buff[0],1,i,wFile); 
                fflush(wFile); 
            } 
            i=0; 
        } 
      
        fclose(rFile); 
        fclose(wFile); 
        return 0; 
      } 
      
      int contains(char*buff,char*mot) 
      { 
          int result=1; 
          while (*buff && result){ 
              result=strncmp(buff,mot,strlen(mot)); 
              buff++; 
          } 
          return result; 
      } 
      

      @+
      0
    2. Passpartout
       
      Je peux l'executer sur Turbo C??
      0
  11. Passpartout
     
    Bonjour Polux31,

    Doncs oui, les numeros je dois les lister sur excel pour les manipuler (+ y - básiquement), et après les representer sur des graphiques
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Alors pourquoi ne pas faire une macro Excel ?

      Tu devras l'utiliser souvent ou juste une seule fois ?
      0
    2. Passpartout
       
      Juste cette fois.
      0
    3. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Connais-tu le chemin du fichier à lire ? par exemple "C:\temp\monfichier.txt" ?
      0
    4. Passpartout
       
      Oui, oui, pas de problème en ce sens
      0
    5. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Dans l'éditeur VB d'Excel (pour l'ouvrir faire Alt + F11) > Menu > Insertion > choisir Module.

      Dans l'éditeur de texte du module copie/colle le code suivant :

      Option Explicit 
      
      Public mTableau()  'Variable global pouvant être lu par tous les modules 
      Private ind As Long    'Indice du tableau 
      
      Sub macro1() 
          LireFichier 
          AfficheDonnees 
      End Sub 
      
      Private Sub LireFichier() 
      Dim fp As Integer 
      Dim chaine As String 
      Dim chemin As String 
      
      fp = FreeFile 
      
      '/!\ CHANGEMENT A EFFECTUER 
      'Mettre ici le chemin complet du fichier chemin = "C:\ ....." 
      chemin = " "
      
      
      Open chemin For Input As #fp 
      While Not EOF(fp) 
          Line Input #fp, chaine 
          If InStr(1, chaine, "documents") <> 0 And InStr(1, chaine, "users") <> 0 Then 
                ReDim Preserve mTableau(ind) 
                mTableau(ind) = chaine 
                ind = ind + 1 
          End If 
      Wend 
      
      Close #fp 
      
      End Sub 
      
      Private Sub AfficheDonnees() 
      Dim i As Long 
      Dim ws As Worksheet 
      
          Set ws = ThisWorkbook.Worksheets(1) 
           
          With ws 
              For i = LBound(mTableau()) To UBound(mTableau()) 
                  .Range("A" & i + 2).Value = mTableau(i) 
              Next i 
          End With 
           
      End Sub


      Met le chemin de ton fichier sous les 2 lignes de couleur verte.

      Puis de la feuille Excel, lance l'exécuteur de Macro. Tu vas avoir une fenêtre avec macro1 en surbrillance, clique sur Exécuter.

      Reviens ici s'il y a un problème.

      ;o)
      0
  12. Passpartout
     
    Bonjour dubcek

    Je viens de voir ton message que dois-je de ce que tu m'a envoyer (Excuse mon interrogaion, mais je suis verd un peu en programmation)

    hello
    le fichier f2.txt contient les 2 listes:

    C:> type aa.bat
    @echo off

    for /f "tokens=1,3" %%a in ('findstr "documents users" f2.txt') do echo %%a %%b

    C:> aa
    18 213.904
    18 673.602
    0
  13. Passpartout
     
    Je savais pas qu'on pouvais repondre chaque reponse en sous-messages!!!!!!
    0
  14. Passpartout
     
    EXTRAORDINNAIRE dubcek, JE VIENS DE LE FAIRE, MERCI BEAUCOUP.

    Juste une chose, les listes aparaient sue la ligne de commandes, comment passer les numeros sur excel? j'ai pensé en copy paste sur .txt et aprés faires ce que m'a dit Urielxx pour les passer en excel, t'as une milleur idée?

    Autre chose, quand j'exécute le fichier, il y a assez de données que la fenêtre de ligne de commande garde juste les derniers, ce que liste au commençement se perd, comment faire pour exporter les resultat directement a un fichier .txt ou excel directement
    0
  15. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    modifier le script pour avoir une , comme séparateur
    for /f "tokens=1,3" %%a in ('findstr "documents users" f2.txt') do echo %%a,%%b
    exécuter le script en redirigeant dans un fichier .csv
    aa > fichier.csv
    et ouvrir ce fichier dans Excel, données externes -> importer fichier texte
    0
  16. Passpartout
     
    Merci dubcek et a tout le monde pour l'aide, je viens de crèer le fichier excel avec les données, juste pour votre information les lignes generès son 56234!! et ça sont juste celle-la que contenaient les numeros a representer, imaginez-vous le fichier d'origin!!. Merci de nouveau a tous et sans exception et a la prochaine les amis
    0
    1. Urielxx Messages postés 223 Statut Membre 46
       
      Peux-tu marquer ton problème résolu si c'est bien le cas ? Merci
      0
    2. Passpartout
       
      Oh, je savais pas, pardon. Résolu

      Merci de nouveau
      0
    3. Urielxx Messages postés 223 Statut Membre 46
       
      Merci, c'est juste pour s'y retrouver et pour ne plus qu'on essaie de résoudre le problème ;)
      0
    4. Passpartout
       
      C'est bien?? Je trouve pas l'option pour le marquer comme résolu, il suffit de le dire???
      RÉSOLU
      0
  17. Passpartout
     
    Je vois que la discution continue ouverte, tout juste c'est pour aviser qu'elle est RÉSOLU, j'ai pas trouvé la manière de le faire autrement qu'écrire ce message.

    Merci
    0
  18. Passpartout
     
    Puuff, finalement j'ai pu le marquer
    0