我正在尝试读取大量 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。