皆さまこんにちは。
現在自身のロジック力が壊滅的なので勉強中です。
最初の質問が簡易的過ぎたのと、仕様が変わったなどありましたので今更ながら修正します。
例えばファイルを読み込んで、最終的には出力が、
奇数行の時にはaファイルへ保存
偶数行の時にはbファイルへ保存
というような処理にしたいです。
読み込むファイルは、お客様情報が2行1セットになっている
下記のようなtxtファイルです。
id,購入品,個数,価格,注文番号,お客様番号,お名前,生年月日,住所,作成日 1,お餅,10,200,0001,11111,null,null,null,201206161200 →aファイル(お客様注文ファイル.txt)へ保存 2,null,null,null,null,11111,テスト太郎,19800101,千葉県ほげ区,201206161200 →bファイル(お客様情報ファイル.txt)へ保存
ファイル出力結果↓↓↓
a.txt商品データ id,購入品,個数,価格,注文番号,お客様番号,作成日 1,お餅,10,200,0001,11111,202006161200 b.txt顧客データ id,お客様番号,お名前,生年月日,住所,作成日 1,11111,テスト太郎,19701201,千葉県ほげ区,202006161200
上記を踏まえ現状下記のようにして実装としました。
//test.txt//////////////////////////////////////////////////////// //id,購入品,個数,価格,注文番号,お客様番号,お名前,生年月日,住所,作成日 //1,お餅,10,200,0001,11111,'','','',202006161200 //2,'','','','',11111,テスト太郎,19800101,千葉県ほげ区,202006161200 ////////////////////////////////////////////////////////////////// $data = file_get_contents('test.txt'); $data = mb_convert_encoding($data,'utf-8','sjis'); // 行ごとに分解:1行目:ヘッダ、以降奇数:注文情報、以降偶数:お客様情報 $data = explode("\n",$data); $header = explode(',',$data[0]); //ヘッダ格納 file_put_contents('order.txt',$header[0].',',FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('order.txt',$header[1].',',FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('order.txt',$header[2].',',FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('order.txt',$header[3].',',FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('order.txt',$header[4].',',FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('order.txt',$header[5].',',FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('order.txt',$header[9],FILE_APPEND); // 注文情報ファイルへ保存 file_put_contents('customer.txt',$header[0].',',FILE_APPEND); // お客様情報ファイルへ保存 file_put_contents('customer.txt',$header[5].',',FILE_APPEND); // お客様情報ファイルへ保存 file_put_contents('customer.txt',$header[6].',',FILE_APPEND); // お客様情報ファイルへ保存 file_put_contents('customer.txt',$header[7].',',FILE_APPEND); // お客様情報ファイルへ保存 file_put_contents('customer.txt',$header[8].',',FILE_APPEND); // お客様情報ファイルへ保存 file_put_contents('customer.txt',$header[9],FILE_APPEND); // お客様情報ファイルへ保存 $cnt = count($data); //1行目[0]はヘッダなので飛ばす for ($i=1; $i < $cnt; $i++) { // 奇数の場合 お客様情報ファイルとして保存 if ($i % 2 != 0) { file_put_contents('order.txt',str_replace('\'\',','',$data[$i])."\n",FILE_APPEND); // 偶数の場合 お客様注文ファイルとして保存 } else { file_put_contents('customer.txt',str_replace('\'\',','',$data[$i])."\n", FILE_APPEND); } }
file_put_contensのあたりとかファイルの存在確認とか書きようがまだあるのかなと思いますが、
ちょっと他の案が思い浮かばずです。
何となくで上手く行った→これ以上自分で突き詰められないので次へ、といった繰り返しで
皆さまの様な綺麗なコードにすることが出来ず困っています。
このようなコードのロジック力を鍛えるにはどのような練習が効果的でしょうか?
やはり我武者羅にコードを組み上げるしかないのでしょうか?
有識者様方々の厳しいご指導・ご指摘をお待ちしております。
またコードに対する突っ込みもあればお願いします。
何卒宜しくお願い致します。
回答6件
あなたの回答
tips
プレビュー