Coldfusion cffile在存储表时创建空行

Coldfusion cffile在存储表时创建空行,coldfusion,cffile,Coldfusion,Cffile,我有一个保存表格的cfsavecontent标记。后来我使用cffile将保存的内容写入文件。当我查看该文件时,我看到在表中的标记之后插入了许多空行;在标记后插入很少的空行。(虽然代码在一行上显示时不会这样做。) 目前,我有一个包含其中两个表的文件。这些表在循环中生成,并使用cffile append创建输出文件。这个文件有915行,其中可能有30行是非空的。我的所有后续代码都正常工作,但这只是测试数据。在现实世界中,我可能有1000个或更多的表,我担心的是文件大小 守则: <cfset

我有一个保存表格的cfsavecontent标记。后来我使用cffile将保存的内容写入文件。当我查看该文件时,我看到在表中的
标记之后插入了许多空行;在
标记后插入很少的空行。(虽然代码在一行上显示
时不会这样做。)

目前,我有一个包含其中两个表的文件。这些表在循环中生成,并使用cffile append创建输出文件。这个文件有915行,其中可能有30行是非空的。我的所有后续代码都正常工作,但这只是测试数据。在现实世界中,我可能有1000个或更多的表,我担心的是文件大小

守则:

<cfset head1 = 'from = "moxware" '>
<cfset head2 = 'to = "#hrep.PersonEmail#" '>   
<cfset head3 = 'replyto = "#replyto#" '>
<cfset head4 = 'subject = "#subject#" '>
<cfset head5 = 'type = "html" '>      

<cfsavecontent variable = "abc">
  <cfoutput>
   #head1#
   #head2#
   #head3#
   #head4#
   #head5# >
    #xyz#
  </cfoutput>
</cfsavecontent>

<cffile action = "append"
    file = "/var/www/reports/moxrep/#reportout#.cfm"
    output = "<cfmail"
    mode = "777" >

<cffile action = "append"
       file   = "/var/www/reports/moxrep/#reportout#.cfm"
       output = "#abc#"
       mode   = "777"> 

<cffile action = "append"
    file = "/var/www/reports/moxrep/#reportout#.cfm"
    output = "</cfmail>"
    mode = "777" >

#标题1#
#标题2#
#总目3#
#总目4#
#标题5#>
#xyz#
关于xyz,我正在从文件中读取它:

      <cffile action = "read"
      file   = "/var/www/reports/moxrep/#reportname#.cfm"
      variable = "xyz">

文件如下所示:

   <link rel="stylesheet" href="sample.css">
  <link rel="stylesheet" type = "text/css" href ="betty.css"/>
  <p style="margin-left:40px"><span style="font-size:14px"><span style="font- family:georgia,serif">Dear Customer,</span></span></p>

尊敬的客户:

我们非常高兴您注册了我们的一个项目。显然,您住在{{1.此外,我们注意到您是由{{2.介绍给我们的。下面请查找您注册的内容列表。

<p style="margin-left:40px"><span style="font-size:14px"><span style="font-    family:georgia,serif">{{r</span></span></p>

<p style="margin-left:40px"><span style="font-size:14px"><span style="font-family:georgia,serif">Sincerely Yours,</span></span></p>

<p style="margin-left:40px"><span style="font-size:14px"><span style="font-family:georgia,serif">John Jones<br />
President<br />
XYZ Corporation</span></span></p>

{{r

您诚挚的

约翰·琼斯
主席
XYZ公司

这个文件是由一个代码生成器创建的,不是我,所以有点麻烦。在后面的代码中,我替换了所有以{{开头的内容;特别是{{r被替换为一个表,这就是额外空间的来源

追加本身没有插入任何额外的行


有人知道是什么原因导致文件中出现这些多余的空行,以及如何消除这些空行吗?

Betty,如果您想避免空白,通常需要小心执行此操作。尤其是在查询中使用cfoutput会生成行。因此,以下代码:

<table>
<cfoutput query="myquery">
  <tr><td>#col1#</td><td>#col2#</td></tr>

</cfoutput>
</table>

#col1##col2#
将产生额外的行…但如果您这样做:

<cfsetting enablecfoutputonly="yes">

<cfoutput><table></cfoutput>
<cfloop query="myquery"><cfoutput><tr><td>#col1#</td><td>#col2#</td></tr></cfoutput></cfloop>
<cfoutput></table></cfoutput>

#col1##col2#
您将仔细控制允许添加到缓冲区的内容。enableoutputonly只执行它所说的内容…它不允许任何内容“进入缓冲区”,除非它包含在cfoutputs中

希望这能有所帮助。正如卡梅隆所说,你应该为这样的问题粘贴代码。答案通常就在这里

(您可能还需要试验cffile的“addnewline”属性——这取决于您的问题是否是文件末尾的一行)


为了回答您关于添加CFSETING的问题…在您的案例中,您正在将CF代码写入一个文件,然后稍后执行(顺便说一句,这通常不是一个好主意:)。因此在您的第一个Append语句中:

<cffile action = "append"
file = "/var/www/reports/moxrep/#reportout#.cfm"
output = "<cfmail"
mode = "777" >

将“输出”更改为:


但是Betty-您仍然需要删除cfsavecontent中的换行符(如果您的空格来自于该换行符),因为它们实际上位于cfoutput中。此外,创建插入表的代码可能出错,此处未列出

最后,由于这是cfmail,请看一看这篇关于换行符的文章,这些换行符可能有一些意义,也可能没有什么意义,但至少给了你一条信息:)


您可以考虑在CFaveCeCurror上使用CFStudioCudio指令。CF管理员中有一个设置,它可以压缩或保留不必要的空白,“启用空白空间管理”。-。使用cfprocessingdirective的suppressWhiteSpace属性,您可以覆盖特定页面或页面部分的此设置。因此,在您的情况下:

<cfprocessingdirective suppressWhiteSpace="true">
<cfsavecontent variable="myvar">....
...
...
</cfsavecontent>
</cfprocessingdirective>

....
...
...
可能会有帮助。同样,为了确保在生成文本电子邮件时保留空白,您可以使用suppressWhiteSpace=“false”


干杯,

如果没有看到您的代码,我们就无法在这里进行明智的评论。这不是CF添加空格,而是您的代码。您仍然没有包含相关代码。您这样说:“特别是{{r被替换为一个表,这就是额外空间的来源。”,但您不包括执行此操作的代码。您将在CFSAVECONTENT块中捕获缩进。如果您不想这样做,请使用字符串缩进而不是CFSAVECONTENT。您确定ADDNEWLINE没有问题吗?为了安全起见,我会将其添加到这些追加操作中(如cffile ADDNEWLINE=“否”)…append的默认行为是YES。Betty…好的,你说你替换了吗{{r有一个表,这就是空间的来源。但是创建表的代码在哪里?我不确定我在这里看到了吗?我已经粘贴了一些代码;很抱歉,我无法引导您访问网站,但我现在正在本地主机上运行。我不是通过查询填充文件。我在附加的末尾没有问题。正如您所看到的,cfcontent选项卡中的内容包含在cfoutputs中。我将查看enablecfoutputonly是否有效,然后报告。谢谢。它比这更简单。当您使用cfsavecontent时,源代码中的回车会包含在变量中。这就是此答案中的示例的全部内容。它使用测试文件进行了尝试,效果很好。我用真实的程序尝试了它,但它并没有起作用。Dan说的关于cfsavecontent的内容似乎就是正在发生的事情。但我不知道如何摆脱您给出的示例并没有说明如何将输出转换为cfsavecontent是好的。然而,若您不希望源代码中的回车包含在coldfusion中,那个么变量,不要在源代码中使用回车符。Mark的第二个代码示例演示了这一点。我最终使用cold fusion administrator抑制了空白。这并不完美,但是
<cfprocessingdirective suppressWhiteSpace="true">
<cfsavecontent variable="myvar">....
...
...
</cfsavecontent>
</cfprocessingdirective>