Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1573 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Extraction donnée TXT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraction donnée TXT

n°2325152
dartz001
Posté le 30-11-2018 à 15:21:51  profilanswer
 

Bonjour,
 
Je suis en possession d'un GROS fichier TXT (+ de 5000 lignes) où je dois extraire les 12 premiers caractères de chaque ligne pour pouvoir les compter.
 
Voici un petit exemple du fichier :
04ZZZZF00524871044738435000076
04ZZZZF00624871075511444100012
04ZZZZF00722732254090864000080
04RAA5200002733093314054600008
04RAA5200002733093324360500004
04RAA5200002733093324361200001
04RAA5200002733093324363600004
04RAA5200002800109060940300002
04RAA5200002800109060959500002
 
 
Voici ce que je je voudrais en termes de réponse :
04ZZZZF00524 = 1
04ZZZZF00624 = 1
04ZZZZF00722 = 1
04RAA5200002 = 6
 
Je me tourne vers vous pour savoir quelle méthode utiliser.
 
 

mood
Publicité
Posté le 30-11-2018 à 15:21:51  profilanswer
 

n°2325161
rufo
Pas me confondre avec Lycos!
Posté le 30-11-2018 à 16:15:03  profilanswer
 

Ca dépend de pas mal de choses : ton niveau en dév, les outils à ta disposition, qui peuvent d'ailleurs dépendre de l'OS de la machine où tu fais le traitement.
Sous Linux, t'as Awk.
 
Après, en Perl, PHP ou Python, tu peux facilement faire un script qui lit ton fichier, extrait les 12 premiers caractères et utilise cette chaîne comme clé dans un tableau associatif, clé à laquelle tu associes un compteur. Si la clé n'existe pas dans le tableau, tu l'ajoutes et tu initialise le compteur à 1 ; si elle existe déjà tu fais +1 sur le compteur.
 
A la fin, tu fais une boucle sur le tableau : tu affiches chaque clé avec son compteur. Script qui se fait en 5 min quand on a l'habitude.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2325163
mechkurt
Posté le 30-11-2018 à 16:20:26  profilanswer
 

Pareil que Rufo : ca vas être dur de t'aider sans connaitre ton niveau et les outils à disposition !
 
Ça doit même pouvoir se faire avec un tableur type Calc ou Excel...
 
...par contre je suis nul en tableur je pourrais pas aider, mais ça me semble jouable sans passer par du code ! ^^


---------------
D3
n°2325167
rufo
Pas me confondre avec Lycos!
Posté le 30-11-2018 à 16:51:46  profilanswer
 

Oui, via Excel c'est possible mais avec les macros en VBA. Je vois pas trop comment faire avec des formules :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2325186
MaybeEijOr​Not
but someone at least
Posté le 30-11-2018 à 20:35:49  profilanswer
 

Colonne 1 : les données
(trier les données de la colonne 1 par ordre croissant ou décroissant)
Colonne 2 : =GAUCHE(cellule colonne 1;12)
Colonne 3 : =NB.SI(colonne 2;cellule colonne 2)
Colonne 4 : =EQUIV(cellule colonne 2;colonne 2;0)
Colonne 5 : =SI(LIGNE(cellule colonne 5)=cellule colonne 4;cellule colonne 2;"" )
Colonne 6 : =SI(LIGNE(cellule colonne 5)=cellule colonne 4;cellule colonne 3;"" )

 

Les résultats sont dans la colonne 5 et 6.

Message cité 1 fois
Message édité par MaybeEijOrNot le 30-11-2018 à 20:37:04

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2325201
dartz001
Posté le 30-11-2018 à 22:10:12  profilanswer
 

Effectivement le passage par excel avec les macro en VBA me semble la solution la plus simple pour moi car je ne suis pas trop caller en terme de programmation.
 
Ensuite, je suis en train de me mettre sur linux donc je garde Awk en tête.
 
Pour ce qui est des autres langages cités, je les garderais en tête à l'avenir ;)
 
Je suis plus orienté réseau, mais il me faut des bases pour la programmation.
 
Un grand merci à tous pour vos réponses !


---------------
C'est pas faux
n°2325202
MaybeEijOr​Not
but someone at least
Posté le 30-11-2018 à 22:23:06  profilanswer
 

La solution que je propose est sur Excel et sans Macro, juste à voir si Excel tire la tronche avec le tri de données s'il y en a vraiment beaucoup. Mais dans tous les cas, le calcul des doublons est de plus en plus lourd avec l'augmentation de la quantité de données.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2325203
rufo
Pas me confondre avec Lycos!
Posté le 30-11-2018 à 22:31:43  profilanswer
 

Jusqu'à 15000 à 20000 lignes, ça doit passer je pense.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2325210
gilou
Modérateur
Modzilla
Posté le 01-12-2018 à 00:11:55  profilanswer
 

rufo a écrit :

Ca dépend de pas mal de choses : ton niveau en dév, les outils à ta disposition, qui peuvent d'ailleurs dépendre de l'OS de la machine où tu fais le traitement.
Sous Linux, t'as Awk.
 
Après, en Perl, PHP ou Python, tu peux facilement faire un script qui lit ton fichier, extrait les 12 premiers caractères et utilise cette chaîne comme clé dans un tableau associatif, clé à laquelle tu associes un compteur. Si la clé n'existe pas dans le tableau, tu l'ajoutes et tu initialise le compteur à 1 ; si elle existe déjà tu fais +1 sur le compteur.
 
A la fin, tu fais une boucle sur le tableau : tu affiches chaque clé avec son compteur. Script qui se fait en 5 min quand on a l'habitude.

Yep!
en perl:

Code :
  1. my %h;
  2. open my $fh, "<", "fichier-de-data.txt";
  3. $h{substr($_, 0, 12)}++ while (<$fh> );
  4. print "$_ = $h{$_}\n" foreach (keys %h);
  5. close $fh;


et pour une variante un peu plus robuste et à la sortie triée

Code :
  1. use autodie;
  2. my %h;
  3. open my $fh, "<", 'fichier-de-data.txt';
  4. while (<$fh> ) {
  5.     $h{substr($_, 0, 12)}++ if (/^[0-9A-Z]{12}/);
  6. }
  7. print "$_ = $h{$_}\n" foreach (sort keys %h);
  8. close $fh;


A+,


Message édité par gilou le 01-12-2018 à 10:07:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2325222
MaybeEijOr​Not
but someone at least
Posté le 01-12-2018 à 12:43:57  profilanswer
 

MaybeEijOrNot a écrit :

Colonne 1 : les données
(trier les données de la colonne 1 par ordre croissant ou décroissant)
Colonne 2 : =GAUCHE(cellule colonne 1;12)
Colonne 3 : =NB.SI(colonne 2;cellule colonne 2)
Colonne 4 : =EQUIV(cellule colonne 2;colonne 2;0)
Colonne 5 : =SI(LIGNE(cellule colonne 5)=cellule colonne 4;cellule colonne 2;"" )
Colonne 6 : =SI(LIGNE(cellule colonne 5)=cellule colonne 4;cellule colonne 3;"" )

 

Les résultats sont dans la colonne 5 et 6.

 

Oups, pas besoin de tri, j'ai ajouté ça après en me disant que ça permettait d'éliminer les trous dans les colonnes de résultats, mais non. Ma solution est bonne mais les colonnes de résultats possèdent des trous (avec ou sans tri), à voir si une solution existe pour récupérer tous les résultats en haut des colonnes.

 

EDIT : il y a la possibilité de filtrer (les cellules non vides) les deux colonnes de résultats mais ça reste un filtre, c'est-à-dire que les références des cellules restent les mêmes, simplement des lignes sont cachées.


Message édité par MaybeEijOrNot le 01-12-2018 à 12:45:39

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
mood
Publicité
Posté le 01-12-2018 à 12:43:57  profilanswer
 

n°2325231
MaybeEijOr​Not
but someone at least
Posté le 01-12-2018 à 14:01:00  profilanswer
 

Possible en 100% Excel, 0% VBA :
 
https://reho.st/self/17627eaaf34bc2473ce106a7fb1d9309c578aad4.jpg
 
 
Me demander si c'est la solution choisie.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Extraction donnée TXT

 

Sujets relatifs
Conception de base de donnéeSauvegarde d'images dans une base de donnée
[RESOLU] Renseigner automatiquement une donnée de registre[SQL Server - Cobol] Donnée DATETIME2
injection donnée xls à partir d'une colone précise ?Vérification dans base de donnée
PHPUnit verifier le type de donnée dans un tableauVérifier si variable existe dans la base de donnée
Enregistrement dans la base de donnéebase de donnée enorme sur pc classique
Plus de sujets relatifs à : Extraction donnée TXT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR