ホームページ  >  に質問  >  本文

多数の txt ファイルを含む csv ファイルを作成する

大きな txt ファイルを読み取り、最初の行をヘッダーとして保存し、残りのテキストをコンテンツとして保存して、CSV ファイルにエクスポートしようとしています。

反復によって増加する CSV の ID を作成していますが、反復中に確認できないエラーが発生すると、配列の内容を保存するときに最後の内容が追加されるためです。値。

id、titulo、contenido という名前の 3 つの「列」を持つ CSV を作成し、各ファイルごとに情報を配列に保存する必要があります。 1 つの txt ファイル、1 つの配列の反復。

私の下手な英語でごめんなさい。

これは私のコードです:

<?php
/* Cogemos todos los archives txt de la carpeta archives del servidor */
$files = glob("archivos/*.txt");
/* 保護者向けのクリーモスと、重要な情報を収集します */
$datosparacsv=array(array("ID","タイトル","コンテンツ"));
/* クリーム色の配列とデータのインポート */
$id = 0;
/* 記録されたデータを記録する */
foreach($files as $file) {
    /* 主要なタイトルのアーカイブ txt */
    $titulo = トリム(fgets(fopen($file, 'r')));
    /* Sacamos el Resto del contenido pero quitamos la primera linea con el condicional if*/
    $archivo = ファイル($file);
    foreach ($archivo as $num=>$line){
        if ($num==0) {
            続く;
        }
        それ以外{
            $contenido .= $line."\n";
        }
    }
    /* CSV の配列を含むコンテニドの追加 */
    array_push($datosparacsv, array($id,$titulo,$contenido));
    /* スマモス ウノ アル ID パラ ケ シー ウーニコ */
    $id;
}
$delimitador = ','; // fputcsv のパラメータ
$enclosure = '"'; // fputcsv のパラメータ
//配列をcsvに変換
$archivocsv = fopen('entradas.csv', 'w ');
foreach ($datosparacsv as $data_line) {
    fputcsv($archivocsv, $data_line, $delimitador, $enclosure);
}

$data_read="";
巻き戻し($archivocsv);
//CSVを読み込む
while (!feof($archivocsv)) {
    $data_read .= fread($archivocsv, 8192); // カンマで区切られたすべてのデータの文字列を返します。
}
fclose($archivocsv);
エコー $data_read;

読み取るファイルの例。

ファイル1.txt

タイトル 1
テキスト 1

ファイル2.txt

タイトル 2
テキスト 2

CSV

id, タイトル, コンテンツ, 0, タイトル 1, テキスト 1, 1, タイトル 2, テキスト 2

本当にありがとう、友達。

P粉287254588P粉287254588210日前330

全員に返信(2)返信します

  • P粉198670603

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

    回答をより適切にフォーマットできるため、このフォームを使用します。

    $contenido 列には、最初の行を除いたファイルの内容全体が必要です。

    これで、コードを使用すると問題なく動作しますが、同じファイルの内容の後に複数行がある場合、各行が結果の新しい行として使用されます。

    たとえば、私は今このファイルを使用しています

    ファイル1.txt

    タイトル 1
    テキスト 1、テキスト 1
    
    ファイル 1
    にさらにテキストを追加

    ファイル2.txt

    タイトル 2
    テキスト 2、テキスト 2、テキスト 2、テキスト 2、テキスト 2、テキスト 2
    
    同じアーカイブの一部のテキスト 2

    これにより、entradas.csv が生成されます

    ID、タイトル、コンテンツ
    0,"タイトル 1","本文 1,本文 1"
    1、「タイトル1」、
    2,"タイトル 1","ファイル 1 にさらにテキストを追加"
    3、"タイトル 2"、"テキスト 2、テキスト 2、テキスト 2、テキスト 2、テキスト 2、テキスト 2"
    4、「タイトル2」、
    5,"タイトル 2","同じアーカイブのテキスト 2"

    しかし、これが必要です:

    ID、タイトル、コンテンツ
    0,"タイトル 1","本文 1,本文 1
    
    ファイル 1 にさらにテキストがあります」
    1,"タイトル 2","テキスト 2、テキスト 2、テキスト 2、テキスト 2、テキスト 2、テキスト 2
    
    同じアーカイブの一部のテキスト 2"

    txt ファイルはブログ投稿であるため、コンテンツのすべてのスペースと \n を txt ファイルに保存することが非常に重要です。

    ファイルの例 .txt

    ¿コモ・プエド・カメル・ガレタス?<-- Title
    
    Las galletas se comen con la boca, poco a poco masticando.
    
    

    ¿クアントス・サボレス・デ・ガレタスの干し草?

    \n とすべてを保存するには、タイトルの後のすべてのテキストを同じ行に置く必要があります。

    ファイルには CSV が 1 行しかありません。

    ありがとうございます。英語が悪くてごめんなさい。

    返事
    0
  • P粉548512637

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

    19 行目の

    $contenido は未定義です。存在しない変数を .= に接続しようとします。各アーカイブ行は $datosparacsv で定義されているため、$contenido 変数も必要ありません。

    $delimitador$enclosure は、定義された値がデフォルト値でもあるため、定義する必要はありません。

    これは、予想される CSV 出力と、変更された各行を説明するコメントを含む正しい PHP コードです。

    また、必要に応じてコンテンツ内の新しい行とスペースも保持します。

    ファイル/1.txt

    タイトル 1
    テキスト 1

    ファイル/2.txt

    タイトル 2
    テキスト2
    
    テキスト3
    
    
    
    テキスト4

    これにより、このデータを含む entradas.csv が保存されます。

    ID、タイトル、コンテンツ
    0,"タイトル1","タイトル1"
    1、「タイトル 2」、「テキスト 2」
    
    テキスト3
    
    
    
    texto4"

    返事
    0
  • キャンセル返事