Buat fail csv yang mengandungi sejumlah besar fail txt
P粉287254588
P粉287254588 2024-02-26 17:29:54
0
2
459

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粉287254588
P粉287254588

membalas semua(2)
P粉198670603

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

P粉548512637

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"
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan