Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 21/08/2008, 14h27   #1 (permalink)
Membre régulier
 
Date d'inscription: mars 2006
Messages: 133
Par défaut 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
Baldric de Dol est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 19h50.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2008 www.developpez.com - Legal informations