h1

Avez-vous pensé à lire votre log de manière automatique

septembre 12, 2010

Vous savez comment lire un fichier .txt avec SAS mais avez-vous déjà envisager lire votre programme ou encore votre log et d’en faire un data set pour pouvoir fouiner un peu dedans ? Voici donc un exemple très basique côté programmation mais qui peut se révéler très utilise si vous faites preuve d’un peu d’imagination.

1. Commentaires sur l’exemple

Dans l’exemple qui suite la log sauvegardée de manière permanente sur le disque dur est importée dans SAS. Une ligne est égale à une observation. Le délimiteur est le caractère hexadécimal 09. Le nombre maximum de caractères par observation est ici de 1000. A vous de trouver la valeur qui vous semble la mieux appropriée pour éviter que le texte soit coupé sans pour autant sur-consommer votre capacité de stockage.

2. L’exemple

data mylog;
infile ‘c:/sasref/test.log’ dlm=’09’x;
length x $1000;
input x $;
run;

3. Aller plus loin

Ensuite pour vous entraîner, sortez les lignes où il y a le mot NOTE, les lignes avec le mot REAL TIME ou encore les lignes contenant un mot-clé qui vous est propre à l’aide de fonctions caractères.

Dans ce dernier cas, vous pouvez inclure dans votre programme les titres des grandes rubriques de votre programme et ensuite les extraire avec cette méthode. Pratique pour retrouver rapidement la structure d’ensemble de son programme, mettre à jour son en-tête, etc.

Lectures complémentaires

2 commentaires

  1. Sur la même base, ci-joint une macro SAS de Thierry Hennekes que j’aime bien utiliser pour remonter les erreurs dans l’exécution d’un process automatique.
    La macro doit être lancée à la fin du traitement pour scanner les mots clés de la LOG.
    J’ai rajouté quelques traductions en Français.

    %MACRO chklog(chemin);

    /* Zorgen dat deze code geen log genereerd */
    PROC PRINTTO log= »G:\AID\nolog.log »;RUN;

    /* Actief log wegschrijven */
    dm log ‘file « &chemin. » replace’;

    /* Log importeren */
    DATA work.saslog (drop=rec);
    INFILE « &chemin. » TRUNCOVER;

    length logrij 5.;
    length srt $25.;
    length rec $200.;
    length melding $200.;

    INPUT
    rec 1-200;

    *Error;
    IF upcase(substr(rec,1,5)) in (‘ERROR’,’ERREUR’) THEN DO;
    srt = ‘1. ERROR’;
    melding = rec;
    logrij = _N_;
    OUTPUT;
    END;

    *Warning;
    ELSE IF UPCASE(SUBSTR(rec,1,7)) in (‘WARNING’,’AVERTISSEMENT’) THEN DO;
    srt = ‘2. WARNING’;
    melding = rec;
    logrij = _N_;
    OUTPUT;
    END;

    *Other;
    ELSE IF UPCASE(SUBSTR(rec,7,14)) = ‘MISSING VALUES’ OR
    INDEX(UPCASE(rec),’UNINITIALIZED’) NE 0 THEN DO;
    srt = ‘3. Other’;
    melding = rec;
    logrij = _N_;
    OUTPUT;
    END;

    RUN;

    PROC SORT DATA=saslog;
    BY srt logrij;
    RUN;

    title ‘Report LOG SCAN by Thierry Hennekes’;
    *options pagesize=120 linesize=120;

    PROC PRINT DATA=saslog;
    BY srt;
    RUN;

    title ‘The Sas System’;

    PROC DATASETS LIBRARY=work NOLIST;
    DELETE saslog;
    QUIT;

    /* Log weer displayen in window */
    PROC PRINTTO log=log;
    RUN;

    %MEND chklog;


  2. Il y a également l’utilisation des macro variables automatiques SYSERR et SQLRC pour identifier une erreur.
    Plus contraignant à utiliser car on doit les tester après chaque étape data ou procédure exécutée.



Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :