Yet Another Way to Build a Tab-Delimited File
April 6, 2005 Hey, Ted
Thanks for the tip on creating CSV files with SQL. If the data itself contains commas or double quotes, import programs such as Microsoft Excel may get confused on where fields start and end. I think it’s much safer to use a tab (X’05’) as the delimiter and use the PC file extension “txt”.
Keep up the great work!
That sounded like a good suggestion to me, so I gave it a whirl, Chris. You were right. I had no trouble opening a tab-delimited file with embedded commas in Microsoft Excel. But that’s not to say I didn’t have any trouble.
CRTPF FILE(QTEMP/CUSTEXPORT) RCDLEN(512)
Next, I used SQL/400 to load some data into the file.
INSERT INTO QTEMP/CUSTEXPORT SELECT char(CUSNUM)||x'05'||LSTNAM||x'05'||INIT||x'05'|| CITY||x'05'||STATE||x'05'||char(baldue) from qiws/custody
Then I copied the program-described file to a stream file.
CPYTOSTMF FROMMBR('/qsys.lib/qtemp.lib/custexport.file/custexport.mbr') TOSTMF(custexport.txt) STMFCODPAG(*PCASCII)
I FTP’ed the file to my PC and opened it with Excel, which made me go through an import wizard, but it made the correct guesses. By the way, the file that is generated with the SQL command shown above doesn’t have any commas in the fields, but I did test with data that included commas.
That seems to work OK. However, when I tried to use Qshell to create the IFS file, I ran into a small problem. Qshell’s db2 command generates header and trailer lines in addition to the data. In the original version of this tip, Joe used the stream editor, sed, to select only the data lines. And how did he do that? By selecting lines that contained commas. Making sed select lines that contain a tab is another matter, since sed doesn’t allow escape sequences for control characters in the command expression. There may be a way to make this work, but I haven’t had enough time to find it yet.
Click here to contact Ted Holt by e-mail.