|
Membre régulier
Date d'inscription: mars 2006
Messages: 133
|
optimisation d'un code
j'ai récupéré un code en ksh j'aimerai l'optimiser avant de le convertir en perl
je vais vous publier les bouts de codes qui reviennent assez souvent
Code :
function FORMAT_PTF
{
INPUT=$1
OUTPUT=$2
CONTROL=$3
NBLINE=`wc -l ${INPUT} | awk '{print $1}'`
#DEBUT CONTROLE ET FORMATAGE DU FICHIER ARPSON
echo "DEBUT CONTROLE ET FORMATAGE DU FICHIER $INPUT"
cat "$INPUT | awk '"
#
#Initialisation des variables
BEGIN {
#initialisation du separateur des champs
FS="\t";
#initialisation de la 1er ligne du tableau bidimensionnel FIELDS avec le nom, longueur champs,
#Type de champ
FIELDS[1,1] = "PTF_13_F";
FIELDS[1,2] = "COMPANY_2_F";
FIELDS[1,3] = "DESK_3_T";
FIELDS[1,4] = "BOOK_3_T";
FIELDS[1,5] = "SYSTEM_1_T";
FIELDS[1,6] = "DESKARPSON_10_T";
FIELDS[1,7] = "CODE_12_T";
FIELDS[1,8] = "TYPE_1_T";
FIELDS[1,9] = "CODEARPSONISIN_4_T";
#initialisation de la 2eme ligne du tableau bidimensionnel FIELDS avec les libelles des champs
FIELDS[2,1] = "Portefeuille";
FIELDS[2,2] = "Departement du siege de la CEP";
FIELDS[2,3] = "Affectation DRG";
FIELDS[2,4] = "ACT";
FIELDS[2,5] = "A pour Arpson";
FIELDS[2,6] = "Affectation Arpson";
FIELDS[2,7] = "Code Isin tronque ou num histo";
FIELDS[2,8] = "Typologie produit";
FIELDS[2,9] = "";
#Definition des codes retours et les messages associes
CodLengthErr[0] = "1001"; CodLengthErr[1] = "Longueur chaine de caracteres incorrecte";
CodFormatDatErr[0] = "1002"; CodFormatDatErr[1] = "Format date incorrect";
CodFormatIntErr[0] = "1003"; CodFormatIntErr[1] = "Format entier numerique incorrecte";
CodFormatDblErr[0] = "1004"; CodFormatDblErr[1] = "Format numerique incorrect";
CodDataErr[0] = "1005"; CodDataErr[1] = "Donnee obligatoire";
CodDefaultValErr[0] = "1006"; CodDefaultValErr[1] = "Valeur par defaut";
#intialisation des champs du fichier log des anomalies
IdentFile="PTF.ast";
IdentField="";
IdentWarn=0;
IdentlineWarn="";
CodWarn = "";
FormatWarn = "";
DataWarn = "";
#initialisation des variables temporaires
MESSAGE="";
NbLineWarn=0;
PROBLEM="FALSE";
ValTypCod=""; #Valeur selon ISIN/NumHist
#initialisation des champs du fichier PTF.ast
B_PTF1=""; #1er champs:Code du portefeuille
B_PTF2=""; #2eme champs:Code du protefeuille
B_GRP=""; #3eme champs:Groupe
#Version 1.1: voir description
#initialisation du tableau ReplaceChar contenant les caracteres a rempalcer par espace
ReplaceChar[1,1]="-"; ReplaceChar[1,2]=" ";
ReplaceChar[2,1]="_"; ReplaceChar[2,2]=" ";
ReplaceChar[3,1]="\\"; ReplaceChar[3,2]=" ";
ReplaceChar[4,1]="/"; ReplaceChar[4,2]=" ";
LenRepChar=4;
}
Code :
function GetWarning()
{
return sprintf("%s\t%s\t%s\t%s\t%s\t%s\t%s",IdentFile,IdentField,IdentWarn,IdentlineWarn,CodWarn,FormaWarn,DataWarn);
}
function LTrim(Field)
{
for(j=0;substr(Field,j,1) == " ";j++);
return substr(Field,j,length(Field)-j+1);
}
#Version 1.1: voir description
function CharToSpace(Field,ReplaceChar,LenRepChar)
{
sField = Field;
for (i=1; i<=LenRepChar; i++)
{
sChar = ReplaceChar[i,1];
if ( sChar == "\\" )
{
gsub("\\"sChar, ReplaceChar[i,2], sField);
}
else
{
gsub(sChar, ReplaceChar[i,2], sField);
} }
return sField;
}
Citation:
#Corps du programme : Controle de la structure du fichier
/[^$]/{
#Recuperation du code ISIN/NumHist
if ( substr($9,1,4) == "ISIN" )
{
ValTypCod=sprintf("%s%s",substr($7,1,1),substr($7,3,length($7)-3));
}
else
{
ValTypCod=sprintf("%s",substr($7,3,length($7)-2));
}
B_PTF1 = sprintf("%s%s%s%s%s%s%s",$2,$3,$4,$5,$6,ValTypCod,$8);
#Controle des champs
for (i=1; i<NF-1; i++)
{
split(FIELDS[1,i],SUBTAB,"_");
#Control anomalie 1001
if ( length($i) != SUBTAB[2])
{
IdentField = FIELDS[2,i];
IdentWarn++;
IdentlineWarn = B_PTF1;
CodWarn = CodLengthErr[0];
FormaWarn = CodLengthErr[1];
DataWarn = $i;
MESSAGE = sprintf("%s%s\n",MESSAGE,GetWarning());
PROBLEM="TRUE";
}
#Control anomalie 1005
if(LTrim($i) == "")
{
IdentField = FIELDS[2,i];
IdentWarn++;
IdentlineWarn = B_PTF1;
CodWarn = CodDataErr[0];
FormaWarn = CodDataErr[1];
DataWarn = $i;
MESSAGE = sprintf("%s%s\n",MESSAGE,GetWarning());
PROBLEM="TRUE";
}
}
#Incrementation des nombres de lignes en anomalies
if ( PROBLEM == "TRUE" )
{
NbLineWarn++;
}
#Construction d un enregistrement
B_PTF2 = B_PTF1;
B_GRP = sprintf("%s%s%s%s%s",$2,$3,$4,$5,$6);
#Version 1.1: voir description
printf("%s\t%s\t%s\t%s\t\t\n",$1,CharToSpace(B_PTF1,ReplaceChar,LenRepChar) \
,CharToSpace(B_PTF2,ReplaceChar,LenRepChar) \
,CharToSpace(B_GRP,ReplaceChar,LenRepChar));
TABNR[NR] = MESSAGE;
#Initialisation des variables
B_PTF1="";
B_PTF2="";
B_GRP="";
MESSAGE = "";
PROBLEM = "FALSE";
}
#
#Recuperation des lignes erronnees ainsi que le nombre des lignes erronnees
END {
for ( i=1 ;i<=NR ;i++)
{
printf("%s",TABNR[i]);
}
printf("%s\n",NbLineWarn);
}"'" >${OUTPUT}.tmp
CODERR=$?
|
Code :
#RECUPERATION DU FICHIER DE CONTROLE
if [ $CODERR -ne 0 ]
then
echo "[Erreur] : le fichier ${OUTPUT}.tmp n a pu etre cree"
exit 1
else
#FIN CONTROLE ET FORMATAGE DU FICHIER ARPSON
echo "FIN CONTROLE ET FORMATAGE DU FICHIER $INPUT"
NBLINE_TOT=`wc -l ${OUTPUT}.tmp | awk '{print $1}'`
#Recuperation du nombre de lignes reel traite sans la ligne consacre au nombre des lignes en erreur
REALNBLINE_TOT=`echo ${NBLINE_TOT}-1|bc`
if [ ${REALNBLINE_TOT} -ne ${NBLINE} ]
then
echo "PROBLEME SUR LE FICHIER PTF GENERE"
#recuperation du nombre des lignes en anomalies
NBLINE_ANO=`cat ${OUTPUT}.tmp | tail -1`
echo "RECUPERATION DU FICHIER USER LOG"
#il faut soustraire la ligne portant le nombre des lignes erronnees et les lignes des messages d erreurs
NBLINE_LOG=`echo ${REALNBLINE_TOT}-${NBLINE}|bc`
NBLINE_MES=`echo ${NBLINE_LOG}+1 |bc`
echo "Nombre de ligne en entree: "$NBLINE | tee -a $CONTROL
echo "Nombre de ligne avec anomalie: "$NBLINE_ANO | tee -a $CONTROL
echo "Nombre de ligne en sortie: "$NBLINE | tee -a $CONTROL
echo "Nombre d'anomalies: "$NBLINE_LOG | tee -a $CONTROL
echo "\nErreur sur les lignes suivantes:" | tee -a $CONTROL
cat ${OUTPUT}.tmp | tail -$NBLINE_MES | head -${NBLINE_LOG} | tee -a $CONTROL
cat ${OUTPUT}.tmp | head -${NBLINE} > ${OUTPUT}
else
cat ${OUTPUT}.tmp | head -${NBLINE} > ${OUTPUT}
touch $CONTROL
echo "PAS DE PROBLEMES SUR LE FICHIER PTF GENERE"
fi
rm -f ${OUTPUT}.tmp
fi
}
si y'en a qui ont des idées
|