質問編集履歴

1

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

2020/06/16 07:17

投稿

nedekee
nedekee

スコア4

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