2010-02-11 73 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