我正在尝试读取大量 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
非常感谢各位朋友。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我使用这个形式是因为我可以更好地格式化我的答案。
我需要文件的全部内容减去第一行都在 $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。