LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (November 1998, week 1)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Mon, 2 Nov 1998 11:35:56 -0500
Reply-To:     Phil Schaeffer <Phil.Schaeffer@FAA.GOV>
Sender:       "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU>
From:         Phil Schaeffer <Phil.Schaeffer@FAA.GOV>
Subject:      NAMEPIPE
Content-Type: text/plain; charset=US-ASCII

Re the discussion on pipes and Windows.

A while back I wrote a program for a client and he has succesfully run it under Windows 95 on a number of occasions. The program allows the user to select desired file types, using DOS naming convention, from a "read" directory, process the files by means of the SAS program, and then write a print (text) file to the "write" directory. (The "write" directory is first checked for the existence of the file(s) being created and if one exists, the new one has a "2" added to the name.)

The relevent portions of this rather long program follow: (The SAS comments are intended to guide the user in entering the needed macro values.)

Phil Schaeffer, FAA Headquarters

/********************************************************************* *1. FIRST %LET - ENTER FULL DIRECTORY PATH FOR RAW HAME FILES. * * DO not PUT QUOTES AROUND DIRECTORY * *********************************************************************/ %LET READDIR=D:\TEMP\;

/********************************************************************* * 2. SECOND %LET - ENTER DOS "DIR" COMMAND SPECS FOR THIS DIRECTORY. * * FOLLOW DOS WILD CARD RULES, no quotes * *********************************************************************/ %LET READFILE=*.ZDV;

/********************************************************************* * 3. THIRD %LET - ENTER DOS "DIR" COMMAND SPECS FOR THE WRITE DIRECT.* * DO not PUT QUOTES AROUND DIRECTORY * *********************************************************************/ %LET WRITEDIR=D:\TEST\;

/********************************************************************* * 4. do PUT QUOTES AROUND DIRECTORY * * LIBNAME - ENTER DIRECTORY FOR HAME LIST FILE FOR THE BATCH JOB. * *********************************************************************/ LIBNAME HAMELIST 'D:\TEST\';

/********************************************************************* * C:\SASPROGS\STAFPROG\ARTCC\HAMEPIPE.SAS * * * * WRITTEN BY PHILIP SCHAEFFER, FAA HQ, ABC-220, MARCH, 1998 * * * * USES HAME DATA TO CREATE TEMPORARY SAS DATA SETS AND A PRINT FILE * * LIKE THAT PRODUCED BY THE 1989 PASCAL PROGRAM. THE TEMPORARY * * SAS DATA SETS ARE DELETED AND MACROS SET TO NULL AT END OF PROGRAM * *********************************************************************/

%MACRO HPIPEMAC(DATFILE);

/********************************************************************* * ISSUES FILEREFS POINTING TO THE EXTERNAL FILE. * *********************************************************************/

FILENAME INTRK "&READDIR&DATFILE";

/********************************************************************* * THE FIRST (HEADER) RECORD GIVE LOCID, DATE, AND TRAFFIC COUNT * *********************************************************************/

DATA HEADER; INFILE INTRK OBS=1;

(the rest of the HPIPEMAC macro, which goes here, was eliminated for the sake of brevity)

%FCHECMAC;

FILE "&WRITEDIR&DSN";

IF _N_=1 THEN DO; PUT @1 "&LID" @5 "data for" @14 "&PDATE" / @1 "IPL Startup at"

(remaining "put" statements go here)

RUN; QUIT;

%MEND HPIPEMAC;

/********************************************************************* * MACRO WHICH CHECKS FOR EXISTENCE OF PRINT FILE BEING CREATED - IF * * IT EXISTS, THE SECOND FILE HAS A "2" PREFIX TO THE NAME * *********************************************************************/

%MACRO FCHECMAC;

%IF %SYSFUNC(FILEEXIST(&WRITEDIR&DSN)) %THEN %DO; %LET DSN=&I&NOZDSN; %END;

%MEND FCHECMAC;

/********************************************************************* * MACRO WHICH REPEATEDLY INVOKES THE HPIPEMAC MACRO UNTIL THE MAX * * NUMBER OF FILES IN THE %LET READFILE DESIGNATION IS MET * *********************************************************************/

%MACRO FNUMBMAC(COUNT); %DO I=1 %TO &COUNT; %HPIPEMAC(&&RFILE&I); %END; %MEND FNUMBMAC;

/********************************************************************* * FILENAME STATEMENT GETS MACRO VAR VALUE FROM %LET AT BEGINNING * * CREATES A SAS DATA SET LISTING EACH FILE READ * *********************************************************************/

FILENAME HAMERAW PIPE "DIR &READDIR&READFILE /B /O:N";

DATA _NULL_; INFILE HAMERAW TRUNCOVER;

LENGTH DATFILE $ 12; INPUT DATFILE $ 1-12;

/********************************************************************* * MACRO VARIABLES INCLUDE A FILEx FOR EACH FILE READ WITH THE VALUE * * FOR EACH BEING THE NAME AND TOTAL WHICH HAS TOTAL NUMBER OF FILES * *********************************************************************/

CALL SYMPUT ("RFILE"||LEFT(PUT(_N_,BEST.)),DATFILE); CALL SYMPUT ("TOTAL",LEFT(PUT(_N_,BEST.)));

RUN;

/********************************************************************* * INVOKES MACRO FNUMBMAC AND GIVES VALUE OF MACRO VAR TOTAL TO THE * * PARAMATER FOR THE %DO I - LOOP; THIS INVOKES HPIPEMAC MACRO AND * * GIVES IT VALUE OF MACRO VAR FILEx EACH TIME IT LOOPS * *********************************************************************/

%FNUMBMAC(&TOTAL);

RUN;

LIBNAME HAMELIST CLEAR; RUN;


Back to: Top of message | Previous page | Main SAS-L page