teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

要件変更に際しての質問意図の更新

2020/06/16 07:17

投稿

nedekee
nedekee

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,42 +1,82 @@
1
1
  皆さまこんにちは。
2
2
 
3
3
  現在自身のロジック力が壊滅的なので勉強中です。
4
+ 最初の質問が簡易的過ぎたのと、仕様が変わったなどありましたので今更ながら修正します。
5
+
4
- 例えばファイルを読み込んで、出力
6
+ 例えばファイルを読み込んで、最終的には出力が、
7
+
8
+ 奇数行の時にはaファイルへ保存
9
+ 偶数行の時にはbファイルへ保存
10
+
11
+ というような処理にしたいです。
12
+
13
+ 読み込むファイルは、お客様情報が2行1セットになっている
14
+ 下記のようなtxtファイルです。
5
15
  ```
16
+ id,購入品,個数,価格,注文番号,お客様番号,お名前,生年月日,住所,作成日
17
+ 1,お餅,10,200,0001,11111,null,null,null,201206161200
6
- 1行目 aaa
18
+ →aファイル(お客様注文ファイル.txt)へ保存
19
+ 2,null,null,null,null,11111,テスト太郎,19800101,千葉県ほげ区,201206161200
7
- 2行目 bbb
20
+ →bファイル(お客様情報ファイル.txt)へ保存
8
21
  ```
22
+ ファイル出力結果↓↓↓
9
23
 
24
+ ```
10
- のようにしたい場合、下記のプログラムで
25
+ a.txt商品データ
11
- 動かそうとしていますが、上手く行きません。
26
+ id,購入品,個数,価格,注文番号,お客様番号,作成日
27
+ 1,お餅,10,200,0001,11111,202006161200
12
28
 
29
+ b.txt顧客データ
30
+ id,お客様番号,お名前,生年月日,住所,作成日
31
+ 1,11111,テスト太郎,19701201,千葉県ほげ区,202006161200
32
+
13
33
  ```
34
+ 上記を踏まえ現状下記のようにして実装としました。
35
+
36
+ ```
37
+ //test.txt////////////////////////////////////////////////////////
14
- // test.txt = aaa,bbb,ccc,ddd,eee,fff,ggg の文字列が入った.txt
38
+ //id,購入品,個数,価格,注文番号,お客様番号,お名前,生年月日,住所,作成日
39
+ //1,お餅,10,200,0001,11111,'','','',202006161200
40
+ //2,'','','','',11111,テスト太郎,19800101,千葉県ほげ区,202006161200
41
+ //////////////////////////////////////////////////////////////////
42
+
15
- $data = file_get_contents(test.txt);
43
+ $data = file_get_contents('test.txt');
44
+ $data = mb_convert_encoding($data,'utf-8','sjis');
45
+ // 行ごとに分解:1行目:ヘッダ、以降奇数:注文情報、以降偶数:お客様情報
46
+ $data = explode("\n",$data);
47
+ $header = explode(',',$data[0]);
16
- $odd = 0; // 奇数
48
+ //ヘッダ格納
49
+ file_put_contents('order.txt',$header[0].',',FILE_APPEND); // 注文情報ファイルへ保存
50
+ file_put_contents('order.txt',$header[1].',',FILE_APPEND); // 注文情報ファイルへ保存
51
+ file_put_contents('order.txt',$header[2].',',FILE_APPEND); // 注文情報ファイルへ保存
52
+ file_put_contents('order.txt',$header[3].',',FILE_APPEND); // 注文情報ファイルへ保存
53
+ file_put_contents('order.txt',$header[4].',',FILE_APPEND); // 注文情報ファイルへ保存
54
+ file_put_contents('order.txt',$header[5].',',FILE_APPEND); // 注文情報ファイルへ保存
17
- $even = 0; // 偶数
55
+ file_put_contents('order.txt',$header[9],FILE_APPEND); // 注文情報ファイルへ保存
56
+ file_put_contents('customer.txt',$header[0].',',FILE_APPEND); // お客様情報ファイルへ保存
57
+ file_put_contents('customer.txt',$header[5].',',FILE_APPEND); // お客様情報ファイルへ保存
58
+ file_put_contents('customer.txt',$header[6].',',FILE_APPEND); // お客様情報ファイルへ保存
59
+ file_put_contents('customer.txt',$header[7].',',FILE_APPEND); // お客様情報ファイルへ保存
60
+ file_put_contents('customer.txt',$header[8].',',FILE_APPEND); // お客様情報ファイルへ保存
61
+ file_put_contents('customer.txt',$header[9],FILE_APPEND); // お客様情報ファイルへ保存
18
62
  $cnt = count($data);
63
+ //1行目[0]はヘッダなので飛ばす
19
- for ($i=0; $i < $cnt; $i++) {
64
+ for ($i=1; $i < $cnt; $i++) {
20
- if ($i % 2 == 0) { // 数の場合
65
+ // 数の場合 お客様情報ファイルとして保存
21
- if ($even > 0) {
66
+ if ($i % 2 != 0) {
67
+ file_put_contents('order.txt',str_replace('\'\',','',$data[$i])."\n",FILE_APPEND);
22
- $even += $odd + 1;
68
+ // 偶数の場合 お客様注文ファイルとして保存
23
- } else {
69
+ } else {
24
- $even += 2;
25
- }
26
- echo $even . '行目' . $data[$i].'<br>';
70
+ file_put_contents('customer.txt',str_replace('\'\',','',$data[$i])."\n", FILE_APPEND);
27
- } else { // 奇数の場合
28
- if ($odd > 0) {
29
- $odd += $even;
30
- } else {
31
- $odd++;
32
- }
33
- echo $odd . '行目' . $data[$i].'<br>';
34
71
  }
35
72
  }
36
73
  ```
74
+ file_put_contensのあたりとかファイルの存在確認とか書きようがまだあるのかなと思いますが、
75
+ ちょっと他の案が思い浮かばずです。
37
- 何となく計算部分が上手く行っていないのは分かるのすが
76
+ 何となく上手く行った→これ以上自分で突き詰められないので次へといった繰り返しで
38
- にすることが出来ず困っています。
77
+ 皆さまの様な綺麗なコードにすることが出来ず困っています。
39
78
  このようなコードのロジック力を鍛えるにはどのような練習が効果的でしょうか?
40
79
  やはり我武者羅にコードを組み上げるしかないのでしょうか?
41
80
  有識者様方々の厳しいご指導・ご指摘をお待ちしております。
81
+ またコードに対する突っ込みもあればお願いします。
42
82
  何卒宜しくお願い致します。