我正在嘗試讀取大量 txt 檔案並將第一行儲存為標題,將其餘文字儲存為內容,然後匯出到 CSV 檔案。
我為 CSV 創建一個透過迭代增加的 id,但是當我遇到迭代中看不到的錯誤時,因為當它保存數組中的內容時,會將最後一個內容添加到該值。
我需要建立一個 CSV,其中包含 3 個“列”,分別命名為 id、titulo 和 contenido,並按每個檔案將資訊保存在數組中。一個 txt 文件,一次數組迭代。
抱歉我的英文不好。
這是我的程式碼:
<?php /* Cogemos todos los archivos txt de la carpeta archivos del servidor */ $files = glob("archivos/*.txt"); /* Creamos el array para guardar los datos y le metemos la primera línea que es el nombre de los campos a importar */ $datosparacsv=array(array("ID","titulo","contenido")); /* Creamos el id que tendrá cada campo del array para después poder importar */ $id = 0; /* Recorremos cada archivo para coger los datos */ foreach($files as $file) { /* Sacamos el título de la primera línea del archivo txt */ $titulo = trim(fgets(fopen($file, 'r'))); /* Sacamos el resto del contenido pero quitamos la primera linea con el condicional if*/ $archivo = file($file); foreach ($archivo as $num=>$line){ if ($num==0) { continue; } else{ $contenido .= $line."\n"; } } /* Añadimos el contenido extraido al array para luego pasarlo a CSV */ array_push($datosparacsv, array($id,$titulo,$contenido)); /* Sumamos uno al id para que sea único */ $id ; } $delimitador = ','; //parameter for fputcsv $enclosure = '"'; //parameter for fputcsv //convert array to csv $archivocsv = fopen('entradas.csv', 'w '); foreach ($datosparacsv as $data_line) { fputcsv($archivocsv, $data_line, $delimitador, $enclosure); } $data_read=""; rewind($archivocsv); //read CSV while (!feof($archivocsv)) { $data_read .= fread($archivocsv, 8192); // will return a string of all data separeted by commas. } fclose($archivocsv); echo $data_read;
要讀取的檔案範例。
檔案1.txt
Titulo 1 texto 1
檔案2.txt
Titulo 2 texto 2
CSV
id, titulo, contenido, 0, Titulo 1, texto 1, 1, Titulo 2, texto 2
非常感謝各位朋友。
我使用這個形式是因為我可以更好地格式化我的答案。
我需要文件的全部內容減去第一行都在 $contenido 列中。
現在,使用您的程式碼可以正常工作,但如果同一文件在內容後面有多於一行,它將使用每一行作為結果的新行。
例如我現在使用這個檔案
檔案1.txt
檔案2.txt
這會產生這個 entradas.csv
但我需要這個:
內容保存 txt 檔案中的所有空格和 \n 非常重要,因為該 txt 檔案是部落格的貼文。
一個檔案.txt 的範例
標題後的所有文字都必須保持在同一行,以保存 \n 和所有內容。
一個檔案在 CSV 中只有一行。
非常感謝你,我對我的英文感到抱歉。
第 19 行的
$contenido
未定義,它試圖將一個不存在的變數與.=
連接起來。$contenido
變數也不是必需的,因為每個存檔行都在$datosparacsv
中定義。也不需要定義
$delimitador
和$enclosure
,因為定義的值也是預設值。這是正確的 PHP 程式碼,其中包含預期的 CSV 輸出以及解釋每個修改行的註解。
它還根據需要保留內容中的新行和空格。
#檔案/1.txt
檔案/2.txt
這將使用此資料保存 entradas.csv。