大きな 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粉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 行しかありません。
ありがとうございます。英語が悪くてごめんなさい。
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"