J'essaie de lire un gros fichier txt et d'enregistrer la première ligne comme en-tête et le reste du texte comme contenu, puis de l'exporter vers un fichier CSV.
Je crée un identifiant pour un CSV qui est incrémenté par itération, mais lorsque j'obtiens une erreur que je ne peux pas voir dans l'itération, car lorsqu'il enregistre le contenu dans le tableau, il ajoute le dernier contenu à la valeur.
Je dois créer un CSV avec 3 "colonnes" nommées id, titulo et contenido et enregistrer les informations dans un tableau par fichier. Un fichier txt, une itération de tableau.
Désolé pour mon mauvais anglais.
Voici mon code :
<?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;
Exemple de fichier à lire.
Fichier 1.txt
Titulo 1 texto 1
Fichier 2.txt
Titulo 2 texto 2
CSV
id, titulo, contenido, 0, Titulo 1, texto 1, 1, Titulo 2, texto 2
Merci beaucoup les amis.
J'utilise ce formulaire car je peux mieux formater mes réponses.
J'ai besoin que tout le contenu du fichier moins la première ligne soit dans la colonne $contenido.
Maintenant, utiliser votre code fonctionne bien, mais si le même fichier contient plus d'une ligne après le contenu, il utilisera chaque ligne comme une nouvelle ligne pour le résultat.
Par exemple, j'utilise ce fichier maintenant
Fichier 1.txt
Fichier 2.txt
Cela générera cet entradas.csv
Mais j'ai besoin de ça :
Il est très important que le contenu enregistre tous les espaces et n dans le fichier txt car le fichier txt est l'article de blog.
Exemple de fichier .txt
Tout le texte après le titre doit rester sur la même ligne pour enregistrer n et tout.
Un fichier n'a qu'une seule ligne au format CSV.
Merci beaucoup et je suis désolé pour mon anglais.
Défini en
$contenido
未定义,它试图将一个不存在的变量与.=
连接起来。$contenido
变量也不是必需的,因为每个存档行都在$datosparacsv
à la ligne 19.Il n'est pas nécessaire de définir
$delimitador
和$enclosure
, car la valeur définie est également la valeur par défaut.Il s'agit du code PHP correct avec la sortie CSV attendue et des commentaires expliquant chaque ligne modifiée.
Il préserve également les nouvelles lignes et espaces dans le contenu selon les besoins.
Fichier/1.txt
Fichier/2.txt
Cela enregistrera entradas.csv avec ces données.