2017-07-06 12 views
0

私がする必要があるのは、.phpを別の.csvファイルにtestdata_new.csvという名前で実行するたびに、最初の行をtestdata.csvから移動できることですデータの追加)。PHPを使用してcsvから最初の行に移動

これは名前、年齢を含むデータの一例であり、ジョブ

例データtestdata.csv:

ジョン、32、科学者
メアリー、25、雇用
ニック、36 、デザイナー
Miky、46、セールス
アレックス、29、物流

これは.phpが実行する処理です。 testdata.csv(john、32、scientist)から最初の行を切り取り、最初の行(ヘッダ)の下の新しいtestdata_new.csvに貼り付けます。年齢の仕事 "です。 testdata_new.csvとtestdata.csvを残りの行で保存します。

私はいくつかのテストを行いましたが、まだ解決策から遠いです。

<?php 

    $file = "testdata.csv"; 
    $f = fopen($file, "r"); 
    $i = 0; 

    $file2 = str_replace(".csv", "_new.csv", $file); 
    $f2 = fopen($file2,"a"); 

    while ($i<2) { 
     $record = fgetcsv($f); 
     foreach($record as $field) { 
      echo $field . "<br>"; 
     } 

     $i++; 
    } 

    fwrite($f2,fread($f, filesize($file))); 

    fclose($f); 
    fclose($f2); 

?> 

template.csvファイル の最初の行を表示するスクリプトを実行し、次の行の名前template_new.csv持つ別のファイル生成されます:

メアリー、25、雇用
を ニック、36、デザイナー
Miky、46、セールス
アレックス、29、物流

私が本当にtemplate_new.csvファイルを持っている必要があることだけ表示される最初の行です:

ジョン、32、科学者

し、最初の行せずにもう一度template.csvを保存など

マリア、25、雇用
ニック、36、セールス
デザイナー
Miky、46、:アイデアは、以下のような行をカット&ペーストすることです0アレックス、29、ロジスティクス

ありがとうございました!

+0

のと同じくらい簡単?あなたのコードは何ですか、何が叫んでいますか? – Mischa

+0

コードを実行する必要があるのは、コードブロックの前に記載されています。しかし、.csvから最初の行を移動することはできません。これまでは、最初の行をたどりましたが、残りの行(最初の行を除く)を新しいファイルにペーストします。 –

+0

まだ2つのオープンポイント...あなたはどこで苦労していますか?あなたのコードは何ですか?私はあなたを助けたいと思っていますが、正確に何をしているのかを知るためにコードをコピーしたくないので、私たちに教えてください。 – Mischa

答えて

0

あなたが苦労している。この;-)

$old_file = 'testdata.csv'; 
$new_file = 'testdata_new.csv'; 

$file_to_read = file_get_contents($old_file); // Reading entire file 
$lines_to_read = explode("\n", $file_to_read); // Creating array of lines 

if ($lines_to_read == '') die('EOF'); // No data 

$line_to_append = array_shift($lines_to_read); // Extracting first line 

$file_to_append = file_get_contents($new_file); // Reading entire file 

if (substr($file_to_append, -1, 1) != "\n") $file_to_append.="\n"; // If new file doesn't ends in new line I add it 

// Writing files 
file_put_contents($new_file, $file_to_append . $line_to_append . "\n"); 
file_put_contents($old_file, implode("\n", $lines_to_read)); 
+0

こんにちはNetVivius、あなたの答えに感謝!スクリプトを初めて実行するときは完璧に動作します。 old_fileから最初の行を切り取り、それをnew_fileに追加します。まさに私が探していたもの。問題は、スクリプトをもう一度実行していることです。 old_fileの残りの行(最初の行だけでなく)をすべてnew_fileに追加します。スクリプトを実行するたびに、同じことを行う必要があります(最初の行のみを切り取る)。ありがとう –

+0

スクリプトを何度も実行していませんか? 'array_shift'関数は"古い "ファイルの最初の行だけを取ります。私はそれをテストし、それは動作するはずです。もう一度チェックしてください。 – NetVicious

+0

本当に変です。私はそれを何度も何度も何度も試します。新しいファイルと古いファイルをサーバーから削除して、それらを最初から作成します。あなたの答えの10分前にもう一度試します。それは常に同じです。最初はすべてOK、2回目はすべての行を古いファイルから新しいファイルに移動します。私はちょうどタイミングの問題を避けるために、最初から5分後にスクリプトを実行する。何も同じ振る舞い... –

関連する問題