Maison  >  Questions et réponses  >  le corps du texte

Créez un fichier csv contenant un grand nombre de fichiers txt

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.

P粉287254588P粉287254588210 Il y a quelques jours329

répondre à tous(2)je répondrai

  • P粉198670603

    P粉1986706032024-02-27 11:15:53

    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

    Titulo 1
    texto 1,texto 1
    
    Some more text in file 1

    Fichier 2.txt

    Titulo 2
    texto 2, texto 2, texto 2, texto 2, texto 2, texto 2
    
    Some text 2 of the same archive

    Cela générera cet 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"

    Mais j'ai besoin de ça :

    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"

    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

    ¿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.

    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.

    répondre
    0
  • P粉548512637

    P粉5485126372024-02-27 11:12:31

    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

    Titulo 1
    texto 1

    Fichier/2.txt

    Titulo 2
    texto 2
    
    texto3
    
    
    
    texto4

    Cela enregistrera entradas.csv avec ces données.

    ID,titulo,contenido
    0,"Titulo 1","texto 1"
    1,"Titulo 2","texto 2
    
    texto3
    
    
    
    texto4"

    répondre
    0
  • Annulerrépondre