There are lots of ways how to export data in CSV format in Caché. Add here your or code, or some more information. How you did it, and after that we may help.
XLS, files much more difficult that plain CSV. And depends on which version you want. XLS - it is a binary format, but XLSX already bunch of XML files but compressed in one file.
You can try to use ZEN reports, which supports XLS as one of output formats.
set Header=$$Line("Sequence\HeatNo\Calalogue\First\Surname\Bisca No\LeftHand\Flexible\Country\Exhibitor No")
set NewFileName=$p(Target_"\"_$$$NewDocument(PageTitle),".",1)_".csv"setFile=##class(abc.file.FlatFile).%New(),xcount=0
doFile.WriteLine(Header)
set Seq=Seq+1,Line=Seq_"\"_$lg(ExportData,12)_"\"_CatNo_"\"_$lg(ExportData,3)_"\"_$lg(ExportData,4)_"\"_$lg(ExportData,16)_"\"_$lg(ExportData,18)_"\"_$lg(ExportData,17)_"\"_$lg(ExportData,15)_"\"_$lg(ExportData,10)
set Data=$$Line(Line) doFile.WriteLine(Data)
doFile.SaveFile(NewFileName)
kill FileQLine(str)
set ln=$l(str,"\"),New=""for lp=1:1:ln set New=New_$c(34)_$p(str,"\",lp)_$c(34,44)
quit $e(New,1,$l(New)-1)
q str
Procedure
build the Taget folder and make sure that the file Name is legal and ends in.csv
I built my row (line) data with a delimitor "\"
then I pass this through the $$Line(Line)
1) open the file and add a header to identify the columns
2) loop down the data build the Line of data and file the 'do file.WriteLine(Line)' for each row
Typically this is a very common issue I have observed many times.
If I have understood this correctly, you have comma(,) in values. You want to export that values into a comma(,) separated CSV file. So, the comma(,) in values are also being considered as delimiter.
Easy solution would be enclosed it with double quote. by default if you open the csv file into EXCEL, commas in values will not be considered as delimiter if its enclosed in double quote.
So, with reference to your code:
S file="C:\Export.CSV" O file:("RSN"):2 U file w """"_name_""","""_details_"""",! C file
Two double quote will represent one double quote finally in the output ("")->(").
Please let me know if you tried this, and this resolved your problem.
There are lots of ways how to export data in CSV format in Caché. Add here your or code, or some more information. How you did it, and after that we may help.
S file="C:\Export.CSV"
O file:("RSN"):2
U file w name_","_details,! ->we get the detlis (name,details) from table via result set.
C file
Hi Sansa,
Its not neccessarily the prettiest way to do it but this wil work :-
U file w $select(name[",":$c(34)_name_$c(34),1:name)_","_$select(details[",":$c(34)_details_$c(34),1:details),!
Personally I would use $c(13,10) as an end of line marker rather than "!" as using "!" can have issues with certain software/operating systems.
Steve
thanks steve ,it is working.
i need one more clarification how can i create xls file in cache?
XLS, files much more difficult that plain CSV. And depends on which version you want. XLS - it is a binary format, but XLSX already bunch of XML files but compressed in one file.
You can try to use ZEN reports, which supports XLS as one of output formats.
SQL to Excel
set Header=$$Line("Sequence\HeatNo\Calalogue\First\Surname\Bisca No\LeftHand\Flexible\Country\Exhibitor No") set NewFileName=$p(Target_"\"_$$$NewDocument(PageTitle),".",1)_".csv" set File=##class(abc.file.FlatFile).%New(),xcount=0 do File.WriteLine(Header) set Seq=Seq+1,Line=Seq_"\"_$lg(ExportData,12)_"\"_CatNo_"\"_$lg(ExportData,3)_"\"_$lg(ExportData,4)_"\"_$lg(ExportData,16)_"\"_$lg(ExportData,18)_"\"_$lg(ExportData,17)_"\"_$lg(ExportData,15)_"\"_$lg(ExportData,10) set Data=$$Line(Line) do File.WriteLine(Data) do File.SaveFile(NewFileName) kill File Q Line(str) set ln=$l(str,"\"),New="" for lp=1:1:ln set New=New_$c(34)_$p(str,"\",lp)_$c(34,44) quit $e(New,1,$l(New)-1) q str
Procedure
build the Taget folder and make sure that the file Name is legal and ends in.csv
I built my row (line) data with a delimitor "\"
then I pass this through the $$Line(Line)
1) open the file and add a header to identify the columns
2) loop down the data build the Line of data and file the 'do file.WriteLine(Line)' for each row
3) Close the file and kill the file object
Typically this is a very common issue I have observed many times.
If I have understood this correctly, you have comma(,) in values. You want to export that values into a comma(,) separated CSV file. So, the comma(,) in values are also being considered as delimiter.
Easy solution would be enclosed it with double quote. by default if you open the csv file into EXCEL, commas in values will not be considered as delimiter if its enclosed in double quote.
So, with reference to your code:
S file="C:\Export.CSV"
O file:("RSN"):2
U file w """"_name_""","""_details_"""",!
C file
Two double quote will represent one double quote finally in the output ("")->(").
Please let me know if you tried this, and this resolved your problem.
Thanks,
Tirthankar