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;