Manipulation de données issues d'1 fic Excel [Résolu/Fermé]

Signaler
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
-
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
-
Bonjour,

Je souhaite traîter des données contenues dans un fichier Excel !
J'ai choisi pour commencer d'utiliser perl et son module Spreadsheet::ParseExcel.

J'ai donc récupéré les données dans un fichier txt :

( 0 , 0 ) =>Version ,,V2.0
( 1 , 0 ) =>This File ,,C:\Scanworks\w0000963\ex01em01\CellStats\cstats_B02_ex01em01.csv
( 2 , 0 ) =>MIN. Threshold ,,30
( 3 , 0 ) =>MAX. Threshold ,,225
( 4 , 0 ) =>Min size in pixels ,,3
( 5 , 0 ) =>Max size in pixels ,,30
( 6 , 0 ) =>Nb of Particles ,,854
( 7 , 0 ) =>Reference ExEm pair ,,ex01em01
( 10 , 0 ) =>No ,Area (px),Pos.X ,Pos.Y ,ex01em01 ,ex02em02
( 11 , 0 ) =>7 ,14 ,383 ,31 ,549 ,348
( 12 , 0 ) =>8 ,19 ,367 ,44 ,790 ,469
( 13 , 0 ) =>9 ,10 ,373 ,48 ,448 ,250
( 14 , 0 ) =>10 ,3 ,349 ,49 ,100 ,76
( 15 , 0 ) =>11 ,3 ,356 ,52 ,99 ,73
( 16 , 0 ) =>12 ,11 ,358 ,58 ,411 ,277
( 17 , 0 ) =>18 ,11 ,393 ,27 ,432 ,251
...
n lignes


Le but du jeu :

faire un fichier A (en éliminant les 10 premières lignes) afin que chaque ligne ne contienne que les 6 valeurs (virer les espaces, les virgules).

Réinjecter ces données dans un nouveau fichier Excel de telle manière que chaque ligne du nouveau fichier Excel contiennent 6 cellules avec 1 valeur par cellule !
(Remarque : les valeurs pour chaque ligne du fichier Excel de départ sont contenues dans 1 ou 3 cellules).

toutes les idées sont les bienvenues !

D'avance merci !

-:))

6 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 741
Salut Bob,

faire un fichier A (en éliminant les 10 premières lignes) afin que chaque ligne ne contienne que les 6 valeurs (virer les espaces, les virgules).
Virer les 10 premières lignes ça j'ai compris et c'est faisable, par contre virer les virgules et les espaces ???

Réinjecter ces données dans un nouveau fichier Excel de telle manière que chaque ligne du nouveau fichier Excel contiennent 6 cellules avec 1 valeur par cellule !
Avec le bout de fichier du dessus, peux-tu nous mettre un exemple de ce que tu attends en sortie s'il te plaît, cmerci.

Tu tiens absolument à faire ce traitement en Perl ? Parce que le spécialiste maison (lami20j) est absent pour 1 mois ;-((

;-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462
Salut Jipicy,

Tu tiens absolument à faire ce traitement en Perl

non pas nécessairement, je peux travailler directement sur le fichier txt (la réinjection des données dans un nouveau tableau Excel n'est pas primordiale)

dans ce cas : à partir du fichier txt ci-dessus (appelons le fichier A) obtenir un nouveau fichier (appelons le fichier B) ne contenant que les lignes qui contiennent les 6 valeurs avec par exemple un espace entre chaque valeur.
Ainsi je peux retravailler sur ce nouveau fichier (manipuler, extraire les données)

Merci à toi.

Bob
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 741
Re-
 sed -e '1,10d' -e 's/.*=>//' -e 's/,/ /g' < fichA > fichB
;-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462
Pardon j'ai pas répondu aux questions :

disons que le fichier final serait comme ça par exemple :

ligne 1 : 7 14 383 31 549 348
ligne 2 : 8 19 367 44 790 469
ligne 3 : 9 10 373 48 448 250
etc ...

je sais pas si c'est clair ...

:-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462
Excellent Mister Jipicy !!!!
Bien évidemment je pensais à quelque chose comme sed ou autre ! Je pense que ça m'ira pour le moment !
Je ne valide pas comme résolu car je pense qu'il y aura quelques détails à mettre au point .....

Mille merci !

-:))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462
Re,

Je reviens à la charge :

sed -e '1,9d' -e 's/.*=>//' -e 's/,/ /g' < titi.txt > tutu.txt


mon fichier tutu.txt :

7 14 383 31 549 348
8 19 367 44 790 469
9 10 373 48 448 250
10 3 349 49 100 76
11 3 356 52 99 73

n lignes

OK ....mais :
le "petit problème":

je souhaite homogénéiser la chose : je m'explique : prenons la ligne 7 (première ligne) :

7 (6 espaces) 14 (8 espaces) 383 (4 espaces) 31 (5 espaces) 549 (8 espaces) 348 ( 7 espaces)

et j'aurai souhaité : 1 seul espace (ou une virgule ...je sais pas encore) entre chaque valeur d'une même ligne !

Je me dit que lorsque je travaillerai sur ce fichier final, c'est peut-être mieux d'homogénéiser, non ?
Mais peut-être que ça ne posera pas de problème non plus ?

Merci !

Bob
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019

ok ! merci pour la seconde méthode ! Je prends aussi afin de l'étudier !
Une dernière question : est-il possible (au point ou en est ) par une programmation shell (en utilsant sed, awk ou que sais-je encore) de :

Récupérer des données d'un fichier Excel A et de réinjecter ces données dans un fichier Excel B !
je m'explique : le fichier Excel A contient n lignes (chaque ligne contient 6 valeurs) ! Le problème est que pour chaque ligne les 6 valeurs sont contenues dans 1 seule cellule !
Le but du jeu c'est d'avoir un fichier Excel B avec pour chaque ligne 1 seule valeur contenue dans 1 cellule (plus pratique pour qu'ensuite l'utilsateur puisse faire son travail).

:-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 741 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019

Ben je suppose que oui, mais faut me donner le fichier d'entrée (A) et l'exemple en sortie (B), histoire qu'on se comprenne bien sur ce qu'il faut faire ;-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019

ben le mieux est de t'envoyer le fichier d'entrée (Excel) ! tu verras mieux comme ça !
Pour le fichier de sortie (Excel aussi) c'est "tout bête" :
pour chaque ligne du fichier sortie chaque valeur doit se retrouver dans une cellule (soit 6 cellules par ligne puisqu'il y a 6 valeurs)
comme tu le verras sur le fichier d'entrée (Excel) les 6 valeurs sont contenues dans une même et grande cellule (1ère colonne) !

Tout ce que tu m'a appris ce soir va me servir beaucoup !
En fait j'anticipe en jouant sur les 2 tableaux (1 fichier Excel retravaillé pour l'utilisateur et des fichiers plats pour des manipulations de données plus poussées) :-))

@++

PS : j'ai essayé le script bob.sh directement sur des fichiers .xls ....juste pour voir ......et ....ça semble "marcher" bien que le fichier sortie soit illisible !
Des réglages à faire .... :-)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 741 >
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014

ben le mieux est de t'envoyer le fichier d'entrée (Excel) ! tu verras mieux comme ça !
Il arrive par coursier ou par pigeon voyageur ???

Bon au choix : Cjoint ou mail (voir profil) ;-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019

Bonjour Jipicy,

le fichier excel entrée se trouve ici :
https://www.cjoint.com/?eviFxCtlD5

comme tu le vois pour chaque ligne : les 6 valeurs sont dans une seule et même cellule.
Le but du jeu :
- virer les 9 premières lignes du fichier entrée qui ne servent à rien !
- virer les virgules, formater.
- réinjecter les données dans un fichier excel sortie avec pour chaque ligne : 1 valeur par cellule (soit 6 cellules pour chaque ligne).

Encore mille merci pour ton aide et ta patience !

:-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462
Re-,

J'en reste à la solution fournie par Jipicy et considère ce post comme résolu !

@++,

bob
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 741
Re-

Tiens essaie ça sur ton fichier d'entrée (en csv) :
sed '1,10d;s/\"//g;s/[ ]*//g' fichier_entrée.csv > fichier_sortie.csv
et pour l'ouverture, choisis la virgule comme séparateur.

;-))
Messages postés
8214
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
462
Tu es .....................Super ! C'est exactement ça !
:-))

Bigre !
La programmation shell ......c'est chouette tout de même (voir puissant ! ).
Et tout ce que je demandais tiens en ..............une demi-ligne : excellent !

Tu es vraiment formidable ! :-))
Y a plus qu'à prendre exemple !

Excellent week-end !

:-)))
Bobby