.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

A voir également:

17 réponses

Urielxx Messages postés 190 Date d'inscription   Statut Membre Dernière intervention   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
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
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
tu pourrais nous montrer un bout du contenu du fichier.. et ce que tu dois récupérer exactement?
0
Urielxx Messages postés 190 Date d'inscription   Statut Membre Dernière intervention   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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Urielxx Messages postés 190 Date d'inscription   Statut Membre Dernière intervention   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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Urielxx Messages postés 190 Date d'inscription   Statut Membre Dernière intervention   46
 
Et vive la ligne de commande :)
0
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
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
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
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
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
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
Passpartout
 
Je peux l'executer sur Turbo C??
0
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Alors pourquoi ne pas faire une macro Excel ?

Tu devras l'utiliser souvent ou juste une seule fois ?
0
Passpartout
 
Juste cette fois.
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Connais-tu le chemin du fichier à lire ? par exemple "C:\temp\monfichier.txt" ?
0
Passpartout
 
Oui, oui, pas de problème en ce sens
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
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
Passpartout
 
Je savais pas qu'on pouvais repondre chaque reponse en sous-messages!!!!!!
0
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
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
Urielxx Messages postés 190 Date d'inscription   Statut Membre Dernière intervention   46
 
Peux-tu marquer ton problème résolu si c'est bien le cas ? Merci
0
Passpartout
 
Oh, je savais pas, pardon. Résolu

Merci de nouveau
0
Urielxx Messages postés 190 Date d'inscription   Statut Membre Dernière intervention   46
 
Merci, c'est juste pour s'y retrouver et pour ne plus qu'on essaie de résoudre le problème ;)
0
Passpartout
 
C'est bien?? Je trouve pas l'option pour le marquer comme résolu, il suffit de le dire???
RÉSOLU
0
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
Passpartout
 
Puuff, finalement j'ai pu le marquer
0