Evaluating the results of FTP transfers

Using FTP from CL is easy, but it isn't so easy to determine if a transfer succeeded. Different FTP servers use different response codes, and the responses are buried in English-text output. The FTP results program is my solution.

The program simply scans the OUTPUT file for the specified string and returns the number of times it occurs. It uses embedded SQL to do the search with wildcards and forced capitalization, simplifying the process.


Typical use:

 
&search is character 50; &#found is decimal 6,0.
CHGVAR     VAR(&SEARCH) VALUE('226 transfer complet') 
CALL       PGM(FTPRESULTS) PARM(&SEARCH &#FOUND)      
IF         COND(&#FOUND *eq 1) then(do)
(complete sample in code)
I found the "226 transfer complet" string and the number of times it should appear by looking at the output of the last successful transfer.   
    
FTP results SQL RPGLE:
------------------------
 * Scan the OUTPUT file for the string specified by SEARCHSTSTR,       
 * returning the number of times found in COUNT.                       
 * Use OVRDBF to point OUTPUT at the correct member of file FTP        
 * Spaces are replaced with wild cards. Data forced to upper case.     
 * ex: dcl &search *char 50 '226 transfer complete'                    
 *     dcl &#found *dec (6 0)                                          
 *     call ftpresults (&search &#found)                               
 * or                                                                  
 *     call     'ftpresults'                                           
 *     parm                  string          50                        
 *     parm                  #found           6 0                      
 *                                                                     
d UPPER           c                   const('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
d lower           c                   const('abcdefghijklmnopqrstuvwxyz')
d Search          s             50    varying                    
                                                                 
c                   if        %parms = 2                         
C     *entry        plist                                        
C                   parm                    searchstr        50  
C                   parm                    count             6 0
c                   eval      search='%'+%trim(searchstr)+'%'    
c     ' ':'%'       xlate     search        search               
c     lower:UPPER   xlate     search        search               
c/exec sql                                                       
c+ select count(*) into :COUNT from OUTPUT                       
c+ where upper(srcdta) like :SEARCH                              
c/end-exec                                                       
c                   endif                                        
c                   return                                       
--------------
Sample CL
pgm                                
dcl &search *char 50   
dcl &#found *dec (6 0) 
clrpfm file(ftp) mbr(billzipO)         
ovrdbf input tofile(ftp) mbr(billzipI) 
ovrdbf output tofile(ftp) mbr(billzipO)
ftp rmtsys('FTP.SERVICEBUREAU.COM')                             
CHGVAR     VAR(&SEARCH) VALUE('226 transfer complet')
CALL       PGM(FTPRESULTS) PARM(&SEARCH &#FOUND)     
IF         COND(&#FOUND *ne 1) then(do)              
sndmsg msg('Billzip ftp failed') tousr(*sysopr)
enddo
endpgm

  
  

==================================
MORE INFORMATION ON THIS TOPIC
==================================

The Best Web Links: tips, tutorials and more.

Ask your programming questions--or help out your peers by answering them--in our live discussion forums.

Ask the Experts yourself: Our application development gurus are waiting to answer your programming questions.

This was first published in May 2003

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.