.txt Comment extraire données

Résolu
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. 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...
    1. 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
      1. Salut,
        tu pourrais nous montrer un bout du contenu du fichier.. et ce que tu dois récupérer exactement?
    2. 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)
      1. Le fichier est plein de lignes du types

        "66 documents 46.542.424 users"

        J'ai a extraire justement les numeros avant les mots
        1. 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"
          1. 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.
            1. Contributeur
              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
              
              
              1. Et vive la ligne de commande :)
              2. 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)
              3. 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?
              4. 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
            2. 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)
              1. 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)
                1. 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; 
                  } 
                  

                  @+
                2. Je peux l'executer sur Turbo C??
              2. 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
                1. Alors pourquoi ne pas faire une macro Excel ?

                  Tu devras l'utiliser souvent ou juste une seule fois ?
                2. Juste cette fois.
                3. Connais-tu le chemin du fichier à lire ? par exemple "C:\temp\monfichier.txt" ?
                4. Oui, oui, pas de problème en ce sens
                5. 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)
              3. 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
                1. Je savais pas qu'on pouvais repondre chaque reponse en sous-messages!!!!!!
                  1. 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
                    1. Contributeur
                      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
                      1. 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
                        1. Peux-tu marquer ton problème résolu si c'est bien le cas ? Merci
                        2. Oh, je savais pas, pardon. Résolu

                          Merci de nouveau
                        3. Merci, c'est juste pour s'y retrouver et pour ne plus qu'on essaie de résoudre le problème ;)
                        4. C'est bien?? Je trouve pas l'option pour le marquer comme résolu, il suffit de le dire???
                          RÉSOLU
                      2. 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