人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpにて、1.csvと2.csvのファイルから3.csvのファイルを作成したいのです。
私の考える動き方としては、1.csvの先頭から順番に2.csvのデータを参照しながら、3.csvのデータを置き換えていくのですが、1.csvのeは2.csvにないため、2.csvに1005,eを追加して、さらに3.csvに1005を追加するとプログラムを作りたいのです。
どうかご教授お願いいたします。

1.csv(元々あるファイル)

a
b
c
d
e


2.csv(元々あるファイル)

1001,a
1002,b
1003,c
1004,d

2.csv(データが追加されたファイル)

1001,a
1002,b
1003,c
1004,d
1005,e

3.csv(新しく作るファイル)

1001
1002
1003
1004
1005

●質問者: miipa
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CSV PHP データ ファイル プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● regnif
●100ポイント ベストアンサー

こんな感じでしょうか?

画面には何もエコーしませんが、PHPと同階層に

1.csvがあれば、初回起動時は2.csvと3.csvを作ります。

2.csvはこれまでの対応テーブルがすべて存在すると解釈して良いんですよね?

その前提で、2回目以降は2.csvには存在しないデータが1.csvに追加されたときのみ2.csvも更新します。

3.csvは1.csvの品番のみのようなので、常に上書きしています。

define( "SERIAL_BASE", 1000 );

$data1 = file( "1.csv" );

if ( ! file_exists( "2.csv" ) ) {

$fp = fopen( "2.csv", "w" );

$serial = SERIAL_BASE;

foreach( $data1 as $value ) {

fputs( $fp, ++$serial . "," . $value );

$master[ $serial ] = $value;

}

fclose( $fp );

} else {

$tempCSV = file( "2.csv" );

foreach( $tempCSV as $value ) {

$tempDATA = explode( ",", $value );

$serial = $tempDATA[ 0 ];

$master[ $serial ] = $tempDATA[ 1 ];

}

}

$masterMAX = ++$serial;

$data1 = file( "1.csv" );

foreach( $data1 as $d1 ) {

$exist = false;

foreach( $master as $key => $value ) {

if ( $value == $d1 ) {

$exist = true;

$serial = $key;

break;

}

}

if ( $exist == true ) {

$output3[] = $serial;

} else {

$output2[] = $masterMAX++ . "," . $d1;

}

}

if ( is_array( $output2 ) ) {

$fp = fopen( "2.csv", "a" );

foreach( $output2 as $value ) {

fputs( $fp, $value );

}

fclose( $fp );

}

$fp = fopen( "3.csv", "w" );

foreach( $output3 as $value ) {

fputs( $fp, $value . "\n" );

}

fclose( $fp );

?>

◎質問者からの返答

回答ありがとうございます!

早速動かしています。

>3.csvは1.csvの品番のみのようなので、常に上書きしています。

3.csvに品名と品番を書くにはどうすればいいでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ