我正在嘗試讀取 txt 檔案,將其轉換為 csv 并將其顯示在電子表格中。這里有很多例子,我嘗試了很多,但結果是一樣的。我似乎有兩個問題。首先,我用來轉換 csv 行的代碼在末尾添加了一個額外的逗號,我無法將其洗掉。其次,即使輸入測驗字串,電子表格也不會打開。
當我讀入我的測驗檔案時,我得到一個這樣的陣列:
array [
Hunky Bill's Big Perogie / Pierogi Maker
9
4
10
5
5
1
2
1
]
我使用的代碼是
$csv_file = 'arry.txt';
$save_name = 'csvout.csv';
if (($fp = fopen($csv_file ,'r'))) {
while(! feof($fp)) {
$item = fgets($fp);
$item = rtrim($item, "\r\n");
$csv_string .= '"' . $item . '",';
// $csv_string = substr($csv_string, 0, -1);
// $csv_string[strlen($csv_string)] = '';
// $csv_string = rtrim($csv_string, ',');
}
fclose($fp);
}
header("Expires: Mon, 26 Nov 2162 00:00:00 GMT");
header("Last-Modified: " . gmdate('D,d M Y H:i:s') . ' GMT');
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: Application/octet-stream");
header("Content-Disposition: attachment; filename=$save_name");
echo $csv_string;
運行上面的程式會在螢屏上顯示:
"Hunky Bills Big Perogie Pierogi Maker","9","4","10","5","5","1","2","1","","",
如果我取消注釋要洗掉最后一個逗號的三行中的任何一行,則所有逗號都將被洗掉。這是為什么?
如果我跳過上面的內容并在 echo 陳述句之前輸入這一行,則電子表格仍然無法打開。它應該在電子表格程式中打開嗎?
$csv_string = '"Hunky Bills Big Perogie Pierogi Maker","9","4","10","5","5","1","2","1"';
誰能看到我的問題在哪里?
uj5u.com熱心網友回復:
您使用的 while 回圈在每個專案后添加一個逗號。“用于洗掉最后一個逗號的三行”位于 while 回圈內。為了解決這個問題,嘗試像這樣重新組織你的代碼,最后一個逗號洗掉在 while 回圈完成之后:
if (($fp = fopen($csv_file ,'r'))) {
while(! feof($fp)) {
$item = fgets($fp);
$item = rtrim($item, "\r\n");
$csv_string .= '"' . $item . '",';
}
$csv_string = substr($csv_string, 0, -1);
fclose($fp);
}
此外,echo $csv_string在代碼的末尾指示程式將字串輸出到螢屏,這就是您所看到的。您可能希望將 $csv_string 保存到擴展名為 .csv 的文本檔案中,然后嘗試使用電子表格程式打開它。
uj5u.com熱心網友回復:
首先,在除錯這種參考時,跳過所有的header和 Excel 的東西,直到你真正需要它。使用原始文本進行除錯要容易得多。
其次,它不是echo, check out var_dump,而是以更清晰的方式顯示變數的內容。
我的建議是將內容存盤在一個陣列中,并在末尾用逗號將其分解,更多詳細資訊請參閱評論。
// We'll store items here temporarily
$csv_items = [];
if (($fp = fopen($csv_file, 'r'))) {
while (!feof($fp)) {
$item = fgets($fp);
// Sanity check that we received something
if (false === $item) {
break;
}
// Trim both sides (unless you have a need for whitespace)
$item = trim($item);
// If we still have more than just an empty string
if ($item) {
// Append, optionally with quotes
$csv_items[] = '"'.$item.'"';
}
}
fclose($fp);
}
// Create final string
$csv_string = implode(',', $csv_items);
var_dump($csv_string);
演示在這里:https : //3v4l.org/Chk2M
此外,如果您的資料可能包含引號,您也可能需要處理它。我個人為此使用了一個庫,這通常是矯枉過正,但我??不需要擔心它。您還可以使用fputcsv和其他人撰寫 CSV 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376559.html
