我正在嘗試讀取大量 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
非常感謝各位朋友。
P粉1986706032024-02-27 11:15:53
我使用這個形式是因為我可以更好地格式化我的答案。
我需要文件的全部內容減去第一行都在 $contenido 列中。
現在,使用您的程式碼可以正常工作,但如果同一文件在內容後面有多於一行,它將使用每一行作為結果的新行。
例如我現在使用這個檔案
檔案1.txt
Titulo 1 texto 1,texto 1 Some more text in file 1
檔案2.txt
Titulo 2 texto 2, texto 2, texto 2, texto 2, texto 2, texto 2 Some text 2 of the same archive
這會產生這個 entradas.csv
#ID,titulo,contenido 0,"Titulo 1","texto 1,texto 1" 1,"Titulo 1", 2,"Titulo 1","Some more text in file 1" 3,"Titulo 2","texto 2, texto 2, texto 2, texto 2, texto 2, texto 2" 4,"Titulo 2", 5,"Titulo 2","Some text 2 of the same archive"
但我需要這個:
ID,titulo,contenido 0,"Titulo 1","texto 1,texto 1 Some more text in file 1" 1,"Titulo 2","texto 2, texto 2, texto 2, texto 2, texto 2, texto 2 Some text 2 of the same archive"
內容保存 txt 檔案中的所有空格和 \n 非常重要,因為該 txt 檔案是部落格的貼文。
一個檔案.txt 的範例
¿ Como puedo comer galletas?<-- Title Las galletas se comen con la boca, poco a poco masticando.¿ Cuántos sabores de galletas hay?
Pues hay de todos los que puedas imaginar.
標題後的所有文字都必須保持在同一行,以保存 \n 和所有內容。
一個檔案在 CSV 中只有一行。
非常感謝你,我對我的英文感到抱歉。
P粉5485126372024-02-27 11:12:31
第 19 行的 $contenido
未定義,它試圖將一個不存在的變數與 .=
連接起來。 $contenido
變數也不是必需的,因為每個存檔行都在 $datosparacsv
中定義。
也不需要定義 $delimitador
和 $enclosure
,因為定義的值也是預設值。
這是正確的 PHP 程式碼,其中包含預期的 CSV 輸出以及解釋每個修改行的註解。
它還根據需要保留內容中的新行和空格。
#檔案/1.txt
Titulo 1 texto 1
檔案/2.txt
Titulo 2 texto 2 texto3 texto4
這將使用此資料保存 entradas.csv。
ID,titulo,contenido 0,"Titulo 1","texto 1" 1,"Titulo 2","texto 2 texto3 texto4"