Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications
Applications Questions sur l'utilisation d'applications, du shell, et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2008, 12h40   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut pb formatage d'un fichier txt avec awk ou SHELL en géneral

Bonjour,

Je ne connais pas bien les shell et j'ai un fichier à formater.
en fait je récupère un champs de
type number(12,2) d'une base de donnée oracle. Je dois formater ce
champs en supprimant la virgule et en réservant les deux derniers
caractères au chiffre se trouvant après la virgule et les dix premiers
au chiffre précédant la virgule. Si le number ne tient pas sur 12 caractère, je le compléte avec des 0
Par exemple (2 --> 000000000200
2,5 --> 000000000250
et 2,55 --> 000000000255)

voici un exemple de mon fichier sortie que je dois formater (le séparateur entre les champs est ';'); le champs que je vais formater est le champs numéro 5

010;S;26/09/2008; ;222,7 ;0


Merci pour votre aide
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 15h25   #2
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 30
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juillet 2006
Messages : 30
Points : 29
Points : 29
Sans etre super fort en perl, j'ai fait un petit script qui effectue ce que tu souhaite :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
#! /usr/bin/perl
use strict;
 
my $_ligne = "010;S;26/09/2008; ;222 ;0 ";
my $_resultat = "";
my $_cpt = 0;
 
my @_buffer = split ( /\s*;\s*/ , $_ligne );
my @_field = split ( /\s*,\s*/ , @_buffer[4] );
 
while ( $_cpt + length($_field[0]) != 10 ) {
  $_resultat .= 0;
  $_cpt++;
}
 
$_resultat .= $_field[0];
 
if ( exists ($_field[1]) ) { 
  $_resultat .= $_field[1];
  $_resultat .= 0 if ( length($_field[1]) == 1 );
}
else {
  $_resultat .= "00";
}
 
print "$_resultat \n";
Apres il faut faire une boucle pour lire le fichier source ligne par ligne et rediriger le resultat vers un autre fichier. :p
mikado_O est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h22.


 
 
 
 
Partenaires

Hébergement Web