使用 ColdFusion 在多个 CSV 文件中分离查询?

Separating Query in multiple CSV Files Using ColdFusion?

我想做的是

一个用户输入了一个日期 他们按下下载按钮,这将运行一个查询,生成他们输入日期的结果。在执行此操作时,它会将这些文件以 .CSV 格式写入我的服务器。我将最终压缩它们,文件将开始以 zip 格式下载。

我有代码可以将查询写入我们的服务器,但我的问题是它将所有内容放入一个大文件中,我希望将结果分成每个文件 2000 个结果。这可能吗?如果是这样,我该怎么做?

我的当前代码用于查询和将数据写入服务器。调整了一些东西。

<cfquery name="users" datasource="#request.db#">
    SELECT DISTINCT firstname
    FROM Users
    WHERE Users.Date=#Date#
</cfquery>

<cfset filePath="D:/Users/Users.csv">
<cfset content = "firstname">

<cffile
    action="write"
    file="#filePath#"
    output="#content#">

<cfoutput query="users">
    <cfset content = "">
    <cfset content = "#firstname#">
    <cffile
        action="append"
        file="#filePath#"
        output="#content#">
</cfoutput>

<cfheader name="Content-Disposition" value="attachment; filename=#getFileFromPath (filePath)#">
<cfcontent file="#filePath#" type="application/octet-stream" deletefile="yes">

此代码将运行查询,将文件写入服务器并自动下载。但只下载并写入一个文件。如何将其分成多个小结果文件?

你想做这样的事情吗?

<cfloop from="1" to="#users.recordcount#" step="2000" index="section">


  <cfoutput query="users" startrow="#section#" maxrows="2000">

    <cfset content = "#firstname#">
    <cffile
        action="append"
        file="#filePath##section#.csv"
        output="#content#">
  </cfoutput>

</cfloop>

...

然后压缩生成的文件

<cfset maxrows = 2000>
<cfset onrow = 1>
<cfset filen = 1>
<cfset filelist = "">
<cfloop condition="#onrow# lte #users.recordcount#">
  <cfsavecontent variable="MakeContents"><cfoutput query="users" startrow="#onrow#" maxrows="#maxrows#">#firstname#
</cfoutput></cfsavecontent>
  <cfset MakeContents = trim(MakeContents)><!--- trimming gets rid of an extraneous return at the end of makecontents --->
  <cfset filepath = "d:\users\users_#filen#.csv">
  <cfset onrow = onrow + maxrows>
  <cfset filelist = listAppend(filelist,"users_#filen#.csv")>
  <cffile...> <!---write MakeContents to a file--->
  <cfset filen = filen + 1>
</cfloop>

<cfzip...>
  <cfloop list="#filen#" index="fi">
    <cfzipparam source="d:\users\#fi#">
  </cfloop>
</cfzip>

这会将结果集的所有内容放入变量中,将变量写入文件并将文件存储在列表中。

所有文件创建完成后,cfzip 通过遍历列表获取所有文件。

您可以为文件名添加一个唯一标识符并保留它们,也可以之后删除它们。