-
<cffunction name="queryToCsv2" access="public" output="false" returntype="string">
-
<!--- required arguments --->
-
<cfargument name="query" required="true" type="query">
-
<!--- optional arguments --->
-
<cfargument name="headers" required="false" type="string" default="">
-
<cfargument name="cols" required="false" type="string" default="">
-
<!--- delimiter: comma, tab, pipe, or semicolon --->
-
<cfargument name="delimiter" required="false" type="string" default="comma">
-
<!--- TODO: maybe add qualifier --->
-
<cfscript>
-
/**
-
* Convert the query into a CSV format using Java StringBuffer Class.
-
*
-
* @argument query The query to convert. (Required)
-
* @argument headers A list of headers to use for the first row of the CSV string. Defaults to all the columns. (Optional)
-
* @argument cols The columns from the query to transform. Defaults to all the columns. (Optional)
-
* @argument delimiter comma, tab, pipe, or semicolon. Defaults to comma (optional)
-
* @return Returns a string in CSV format.
-
* @author Qasim Rasheed (qasimrasheed@hotmail.com), modified by Aaron Longnion
-
* @version 1, March 23, 2005
-
* @version 2, April 18, 2007
-
*/
-
var csv = createObject('java', 'java.lang.StringBuffer');
-
var i = 1;
-
var j = 1;
-
var endOfLine = chr(13) & chr(10);
-
var delim = "";
-
if (arguments.delimiter IS "comma") {
-
delim = ",";
-
} else if (arguments.delimiter IS "tab") {
-
delim = chr(9);
-
} else if (arguments.delimiter IS "pipe") {
-
delim = "|";
-
} else if (arguments.delimiter IS "semicolon") {
-
delim = ";";
-
}
-
if (ArrayLen(arguments) gte 2) {
-
headers = arguments[2];
-
}
-
if (ArrayLen(arguments) gte 3) {
-
cols = arguments[3];
-
}
-
if (not len( trim( cols ) ) ) {
-
cols = arguments.query.ColumnList;
-
}
-
if (not len( trim( headers ) ) ) {
-
headers = cols;
-
}
-
headers = ListToArray( headers );
-
cols = ListToArray( cols );
-
for (i = 1; i lte ArrayLen( headers ); i = i 1) {
-
csv.append( '"' & headers[i] & '"#delim#' );
-
}
-
csv.append( endOfLine );
-
for (i = 1; i lte arguments.query.RecordCount; i= i 1) {
-
for (j = 1; j lte ArrayLen( cols ); j=j 1) {
-
csv.append( '"' & arguments.query[cols[j]][i] & '"#delim#' );
-
}
-
csv.append( endOfLine );
-
}
-
return csv.toString();
-
</cfscript>
-
</cffunction>