2010-02-11 71 views
0

我有一堆写入文本文件的fwrites。但是,自从下一组数据插入到文本文件的最后一行之后,似乎我在每行之后所需的新行(“\ n”)不会被插入:Fwrite - 是否执行?

while(odbc_fetch_row($result)){ 

     if($counter==0){ 

      $counter3 = 1; 

      foreach($column_names as $column_names2){ 

       if($length!=$counter3){ 

        fwrite($write_file, '"'.$column_names2.'",'); 

       }else{ 

        fwrite($write_file, '"'.$column_names2.'"'); 

       } 

       $counter3++; 

      } 

      //echo 'Never gets executed???'; 
      fwrite($write_file, "\n"); 

      $counter = 1; 

     } 

关于发生了什么事情的任何想法?

我已将“\ n \ n”作为快速测试。奇怪的是,如果我在记事本中查看它仍然粘在一起,但如果我在写字板中查看它,它会显示换行符?!

回答

4

正如其他人所建议的,可能是因为换行您的操作系统的编码方式。

但是,我并不是明确地输出Windows特定的“\ r \ n”,而是建议您尝试以文本(而不是二进制)模式打开文件。在文本模式下打开的优点是系统会将行结束符转换为适合该操作系统的任何格式。这样,你的代码应该更加便携,并且应该(希望地)在Windows/Linux/Mac等上正常工作。

假设你使用PHP,你可以传递“文本模式转换标志”('t')进入fopen。

+0

这实际上对我帮助最大。即使我没有使用“t” - 我在窗口中使用了“b” - 强制二进制模式。我可以在记事本/写字板中看到换行符,更重要的是我的应用程序在没有任何错误的情况下接受了输入,而且没有以前那么多。感谢Eric Pi。 – Abs 2010-02-11 13:35:50

+0

+1不知道关于t国旗,很好的信息。 – 2010-02-11 13:36:59

1

该代码看起来为o.k.

是不是可以通过无法处理\n换行符的Windows应用程序查看文件?如果你用别的东西代替\n会发生什么?

0

尝试使用CRLF行结束:

"\r\n" 
1

阅读各种OS这个约newlines

视窗表示一个新行通过使用CR + LF(即\r\n),而UNIX(样)系统仅使用LF\n)。

CR =回车符
LF =换行

所以你可能需要使用\r\n。但是像写字板这样的其他程序似乎也明白\n - 也一样。


最好的办法是,你使用它使用当前操作系统的结束线指标PHP constant PHP_EOL,脚本运行:

fwrite($write_file, PHP_EOL); 
+0

+1。我不知道这个,但我想我可能是强迫Windows使用二进制模式。 – Abs 2010-02-11 13:37:07

1

这不是你的代码中的问题,但是你的观众有问题。改变观众将解决您的问题。将行终止符更改为您的观众理解的内容(\ r \ n)也将解决问题。重要的是以这种方式编写行结束符,以后将会消耗它的程序将理解。如果只是查看器,则更改行结束符。如果它的另一个预计只是一个换行符的程序,改变观众。

+0

谢谢,很好的建议。我继续使用“\ n” - 并使用fopen中的“b”标志强制执行二进制模式。 – Abs 2010-02-11 13:36:29