While I agree that my solution requires a dedicated print queue (which could be abstracted of course), it has the advantage of having only 1 moving part.
Dan On Sun, Sep 26, 2010 at 4:09 PM, Simon Verona <[email protected]>wrote: > Dan > > I've always used an alternative technique for getting spool jobs from the > spooler, take this code for example : > > TESTREP > 001 Command=SENTENCE() > 002 Command=Command[LEN(FIELD(SENTENCE(),' ',1))+2,999] > 003 > 004 EXECUTE 'SP-ASSIGN HF0' > 005 EXECUTE Command > 006 > 007 PrintJobNo=SYSTEM(20) ;*** This is the last print job no > 008 DATA 'D:\DMS\OUTGOING FILE.TXT' > 009 EXECUTE 'SP-EDIT ':PrintJobNo:' (I' > > This code will create a file d:\dms\outgoing\file.txt from pretty much any > command that will generate a print... > > eg TESTREP LIST ONLY MD (P > > You can then open and parse the file in a loop, redisplaying as necessary. > This has the benefit of not requiring a dedicated print spool queue.... > > I use this technique for all sorts of things.. Including a LISTCSV command, > which will do a report and then convert it to a csv file for loading > directly in excel.. > > > So taking the above code, you can easily do an OPENSEQ on the file, and > then a READSEQ and parse just as you have. > > eg : > > 001 INCLUDE JBC.H > 002 EXECUTE 'SP-ASSIGN HF0; > 003 EXECUTE 'SORT TRANS BY DATE BREAK-ON DATE "'VL'" TOTAL 2 (D)' > 004 tmpFile= 'tmpfile.txt' ; *** for jbase 3.4 - use > CHANGE(UNIQUEKEY(),'/',']2F') > on 4.1 > 005 DATA 'C:\TEMP ':tmpFile > 006 EXECUTE 'SP-EDIT ':SYSTEM(20):' (I' > 007 OPENSEQ 'C:\TEMP\':tmpFile TO File ELSE STOP > 008 Eof=0 > 009 LOOP > 010 READSEQ Line FROM File ELSE Eof=1 > 011 UNTIL Eof DO > 012 IF INDEX(Line,'0.00',1)=0 ELSE CRT Line > 012 REPEAT > 013 CLOSESEQ File > 012 EXECUTE 'DEL C:\TEMP\':tmpFile > > I think this solution is equal in effect to yours? > > My solution works > > Simon > > > On 26/09/2010 20:11, Daniel Klein wrote: > > I've posted this code in one form or another before, so I'm not going to go > into long explanations on the how's and why's; you can search > http://jbase.markmail.org if you are interested. Or you can email me > off-list to my gmail.com address: danielkleinad > > Simply put, all this program is doing is grabbing the spooler output and > sending it to a file. However, it is also doing something 'special' with > each line of the report (see program lines 19 thru 21); it is testing the > required condition in order to process the 'line'. IOW, it will > 'print' every line (iow send the line to the sequential file) that does NOT > contain a '0.00' in it. If your report is more complex than what you posted > then you will have to parse each line as necessary to determine whether or > not the 'line' gets 'processed'. > > [Note: lines 9 and 11 to 13 only work on jBASE 4.1 and above. Let me know > if you need a jBASE 3 solution.] > > 0001 PROGRAM jlp_special > 0002 * Redirects spooler output to a text file > 0003 * > 0004 * Create spooler queue with something like: SP-CREATE TEXTFILE PROG > c:\home\bin\jlp_special.exe > 0005 * Where: > 0006 * 'c:\home\bin' is the directory where the 'jlp_special' executable > lives > 0007 * > 0008 INCLUDE JBC.h > 0009 id = CHANGE(UNIQUEKEY(),'/',']2F') > 0010 tempdirname = 'c:\temp' ;* This dir must have 'read/write' > permissions > 0011 OPENSEQ tempdirname:DIR_DELIM_CH:id TO outstream ELSE > 0012 CREATE tempdirname:DIR_DELIM_CH:id ELSE NULL > 0013 END > 0014 LOOP > 0015 numchars = SYSTEM(14) > 0016 WHILE numchars DO > 0017 INPUT line, numchars > 0018 line := CHAR(13) ;* This line is only needed for Windows > I think > 0019 IF INDEX(line,"0.00",1) ELSE > 0020 WRITESEQ line ON outstream ELSE NULL > 0021 END > 0022 REPEAT > 0023 WEOFSEQ outstream ELSE NULL > 0024 CLOSESEQ outstream > 0025 > 0026 *---At this point we have the file saved as > 'tempdirname:DIR_DELIM_CH:id' > 0027 *---so we can do whatever we want with it. > 0028 *---Typically you would EXECUTE some command against this file. > 0029 *---For example, you could build up a command to email the file, or > convert the file to PDF. > 0030 > 0031 *---Finally remove the temporary file... > 0032 OPEN tempdirname TO tempdir THEN DELETE tempdir, id > > I don't know if you would consider this 'integrated' but, given the tools > you have at hand, it's the closest you are going to come to it. > > Dan > > On Sun, Sep 26, 2010 at 10:36 AM, Simon Verona <[email protected]>wrote: > >> Dan >> >> There seems to be an iphone app for everything else.... >> >> I can (and do) spool and process the file, just wondered it there was a >> more "integrated" way of doing it! >> >> Regards >> Simon >> >> On 26/09/2010 14:12, Daniel Klein wrote: >> >> There's no iphone app that will do that? ;-) >> >> Seriously, you would spool the report to a file and then post-process >> the file. >> >> Dan >> >> >> On Sun, Sep 26, 2010 at 7:00 AM, Simon Verona <[email protected]>wrote: >> >>> Hi all >>> >>> This may or may not be a stupid question. >>> >>> I have a transaction file, with many thousands of entries in, which >>> should total zero both on a daily basis (there is a date field in the file) >>> and overall. >>> >>> If I have a problem, then a check is to find which dates do not come back >>> to zero... >>> >>> So, I execute a jQL query like : >>> >>> SORT TRANSACTIONS BY DATE BREAK-ON DATE "'VL'" TOTAL 2 (D) >>> >>> Which produces a list like : >>> >>> 02/07/2010 0.00 >>> 01/07/2010 0.00 >>> 30/06/2010 0.00 >>> 29/06/2010 -585.31 >>> 28/06/2010 0.00 >>> 27/06/2010 0.00 >>> etc etc >>> >>> All I want to see though is the dates that don't come to zero.... >>> >>> Can this be done using jQL? >>> >>> Thanks >>> Simon >>> >>> -- >>> Please read the posting guidelines at: >>> http://groups.google.com/group/jBASE/web/Posting%20Guidelines >>> >>> IMPORTANT: Type T24: at the start of the subject line for questions >>> specific to Globus/T24 >>> >>> To post, send email to [email protected] >>> To unsubscribe, send email to [email protected] >>> For more options, visit this group at >>> http://groups.google.com/group/jBASE?hl=en >>> >> >> -- >> Please read the posting guidelines at: >> http://groups.google.com/group/jBASE/web/Posting%20Guidelines >> >> IMPORTANT: Type T24: at the start of the subject line for questions >> specific to Globus/T24 >> >> To post, send email to [email protected] >> To unsubscribe, send email to [email protected] >> For more options, visit this group at >> http://groups.google.com/group/jBASE?hl=en >> >> >> -- >> Please read the posting guidelines at: >> http://groups.google.com/group/jBASE/web/Posting%20Guidelines >> >> IMPORTANT: Type T24: at the start of the subject line for questions >> specific to Globus/T24 >> >> To post, send email to [email protected] >> To unsubscribe, send email to [email protected] >> For more options, visit this group at >> http://groups.google.com/group/jBASE?hl=en >> > > -- > Please read the posting guidelines at: > http://groups.google.com/group/jBASE/web/Posting%20Guidelines > > IMPORTANT: Type T24: at the start of the subject line for questions > specific to Globus/T24 > > To post, send email to [email protected] > To unsubscribe, send email to [email protected] > For more options, visit this group at > http://groups.google.com/group/jBASE?hl=en > > > -- > Please read the posting guidelines at: > http://groups.google.com/group/jBASE/web/Posting%20Guidelines > > IMPORTANT: Type T24: at the start of the subject line for questions > specific to Globus/T24 > > To post, send email to [email protected] > To unsubscribe, send email to [email protected] > For more options, visit this group at > http://groups.google.com/group/jBASE?hl=en > -- Please read the posting guidelines at: http://groups.google.com/group/jBASE/web/Posting%20Guidelines IMPORTANT: Type T24: at the start of the subject line for questions specific to Globus/T24 To post, send email to [email protected] To unsubscribe, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jBASE?hl=en
