Rumah  >  Soal Jawab  >  teks badan

Buat fail csv yang mengandungi sejumlah besar fail txt

Saya cuba membaca fail txt yang besar dan menyimpan baris pertama sebagai pengepala dan teks yang lain sebagai kandungan, kemudian eksport ke fail CSV.

Saya mencipta id untuk CSV yang ditambah dengan lelaran, tetapi apabila saya mendapat ralat yang tidak dapat saya lihat dalam lelaran, kerana apabila ia menyimpan kandungan dalam tatasusunan, ia menambah kandungan terakhir pada nilai.

Saya perlu mencipta CSV dengan 3 "lajur" bernama id, gelar dan kandungan dan menyimpan maklumat dalam tatasusunan setiap fail. Satu fail txt, satu lelaran tatasusunan.

Maaf atas bahasa Inggeris saya yang teruk.

Ini kod saya:

<?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;

Contoh fail untuk dibaca.

Fail 1.txt

Titulo 1
texto 1

Fail 2.txt

Titulo 2
texto 2

CSV

id, titulo, contenido, 0, Titulo 1, texto 1, 1, Titulo 2, texto 2

Terima kasih banyak kawan.

P粉287254588P粉287254588259 hari yang lalu390

membalas semua(2)saya akan balas

  • P粉198670603

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

    Saya menggunakan borang ini kerana saya boleh memformatkan jawapan saya dengan lebih baik.

    Saya memerlukan keseluruhan kandungan fail tolak baris pertama untuk berada dalam lajur $contenido.

    Kini, penggunaan kod anda berfungsi dengan baik, tetapi jika fail yang sama mempunyai lebih daripada satu baris selepas kandungan, ia akan menggunakan setiap baris sebagai baris baharu untuk hasilnya.

    Sebagai contoh, saya menggunakan fail ini sekarang

    Fail 1.txt

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

    Fail 2.txt

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

    Ini akan menjana entradas.csv

    ini
    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"

    Tetapi saya perlukan ini:

    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"

    Amat penting kandungan menyimpan semua ruang dan n dalam fail txt kerana fail txt adalah catatan blog.

    Contoh fail .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.

    Semua teks selepas tajuk mesti kekal pada baris yang sama untuk menyimpan n dan segala-galanya.

    Fail hanya mempunyai satu baris dalam CSV.

    Terima kasih banyak-banyak dan saya minta maaf atas bahasa Inggeris saya.

    balas
    0
  • P粉548512637

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

    Ditakrifkan dalam $contenido 未定义,它试图将一个不存在的变量与 .= 连接起来。 $contenido 变量也不是必需的,因为每个存档行都在 $datosparacsv pada baris 19.

    Tidak perlu mentakrifkan $delimitador$enclosure, kerana nilai yang ditentukan juga merupakan nilai lalai.

    Ini ialah kod PHP yang betul dengan output CSV yang dijangkakan dan ulasan yang menerangkan setiap baris yang diubah suai.

    Ia juga mengekalkan baris dan ruang baharu dalam kandungan mengikut keperluan.

    Fail/1.txt

    Titulo 1
    texto 1

    Fail/2.txt

    Titulo 2
    texto 2
    
    texto3
    
    
    
    texto4

    Ini akan menjimatkan entradas.csv dengan data ini.

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

    balas
    0
  • Batalbalas