PPWIZARD is a free preprocessor for HTML, REXX, Visual Basic or any text files.
![]() | ![]() | ![]() | ![]() | ![]() |
Importing Fields, Each Record To Its Own File |
The follwoing shows the easiest way of solving the problem:
;--- Import the information (store in memory) --- #NextId #define IMPORT_#DATA TmpCsv ;;Import to memory #( #import "SomeCommaSeparatedFile.CSV" CMA "" "EmailAddress" ;;CSV Field #1 "Name" ;;CSV Field #2 "HomePage" ;;CSV Field #3 #) ;--- Create a HTML page per CSV record --- #{ FOR @@Record = 1 to <?Data:TmpCsv.?> ;--- Collect Information to be passed to the #included file --- #define+ CSV_NAME <?Data:TmpCsv.@@Record.2> #define+ CSV_EMAIL <?Data:TmpCsv.@@Record.1> #define+ CSV_WEBPAGE <?Data:TmpCsv.@@Record.3> ;--- Now create the HTML page (inline - would normally use #include) --- #output "out\CSV_<$CSV_NAME>.htm" ASIS <html> <head> <title>BASIC page for "<$CSV_NAME>"</title> </head> <body> ;--- Heading ------------------ <center><h1>BASIC page for "<$CSV_NAME>"</h1></center> ;--- Page body ---------------- <p><$CSV_NAME> has an email address of "<$CSV_EMAIL>" and a web address of "<$CSV_WEBPAGE>". ;--- Footer ------------------- <hr size=1 color=red> <center><?CompileTime><br><$CSV_NAME></center> </body> </html> #output #}
Not Using #DATA structures |
I wrote this example for someone who wanted to do pretty much what you see here, each record of a CSV file creates its own HTML page. The name of the file is determined by the record number. This was written before #data structures were available.
You should also have a look at the other multiple import example. The example on this page is similar but does things in a completely different way.
;---------------------------------------------------------------------------- ; MODULE NAME: IMPORT.IT ; ; DESCRIPTION: Example file of import of a comma delimited file where ; each record goes into its own file. The line number is ; used to name the file. ; ; ; Imported file looks like: ; ~~~~~~~~~~~~~~~~~~~~~~~~~ ; Dennis,Bareis,Programmer ; Wendy,Buxton,Librarian ; Fred,Nerk,Idiot ; ;---------------------------------------------------------------------------- ;--- Start and end main HTML file ------------------------------------------- <HTML> <HEAD> <TITLE>MAIN FILE</TITLE> </HEAD> <BODY> <H1>MAIN FILE</H1> <P>This is a fairly basic example kept simple on purpose to hopefully make things easier to understand. Basically we imported a comma delimited file (could have been fixed or other format) and generate the record into a new html page whose name depends on the line Number. ;--- Initialize a line count ------------------------------------------------ #RexxVar RecordLineCount = 0 ;--- Define HTML to start the import data files ----------------------------- #define StartsImportFiles \ ;--- Open the record's file ------------ -\ #output 'file_{$LineNum}.htm' ASIS -\ -\ ;--- Output Start of HTML page --------- -\ <HTML> %\ <HEAD> %\ <TITLE>IMPORTED: {$Desc}</TITLE> %\ <?PpwizardGeneratorMetaTags> %\ </HEAD> %\ <BODY> %\ <H1>IMPORTED: {$Desc}</H1> ;--- Define HTML to end the import data files ------------------------------- #define EndsImportFiles \ ;--- Output end of html page ----------- -\ </BODY></HTML> -\ -\ ;--- Close this HTML file -------------- -\ #output ;--- Prepare for import ----------------------------------------------------- #evaluate '' 'NL = d2c(10)' ;;NL = Newline Code #define IMPORT_PROTECT_START ;;We don't want imported data "protected" or #output etc won't get executed #define IMPORT_PROTECT_END #define IMPORT_HEADER ;;We will output our own headers #define IMPORT_BEFORE #define IMPORT_AFTER ;;We will output our own trailers #DefineRexx IMPORT_RECORD_FILTER ;--- Which output file should contain this record? --- RecordLineCount = RecordLineCount + 1; ;--- Make sure output will go to correct file -------- Codes = '<' || '$StartsImportFiles LineNum="' || RecordLineCount || '" Desc="FILE #' || RecordLineCount || '">' Codes = Codes || NL; Codes = Codes || ' <P>Column 1 = ' || Column.1; Codes = Codes || NL; Codes = Codes || ' <P>Column 2 = ' || Column.2; Codes = Codes || NL; Codes = Codes || ' <P>Column 3 = ' || Column.3; Codes = Codes || NL; Codes = Codes || '<' || '$EndsImportFiles>'; Codes = Codes || NL; Codes = Codes || NL; ThisRecordsCodes = Codes; #DefineRexx ;--- Import the data into the 'x' files ------------------------------------- #import INPUT.CMA CMA "" "First Name" "Surname" "Job" ;--- Report on the number of files created/records imported ----------------- <P>Thats all folks, created <??RecordLineCount $$AddComma> files. ;--- Finish off HTML for "control" page ------------------------------------- </BODY></HTML>