質問編集履歴

6

内容変更

2020/07/13 22:14

投稿

ibuki_ayah
ibuki_ayah

スコア2

test CHANGED
@@ -1 +1 @@
1
- 複数のフォルダパスにあるtextファイルを一行ずつ読み込ができない。
1
+ textファイルを順番に読み込むことができず、text内の値を更新することができない。
test CHANGED
@@ -1,293 +1,321 @@
1
1
  **> プログラムで実現したいこと**
2
2
 
3
- サーバー9台分(本物ではない)にリリースするためのtxtファイル9個分の日付情報を自動更新するプログラムを作っています。csvに手入力した日付(0630)を抽出して、9個のtxtファイルの「表示期間B_fm=0530」という行を「表示期間B_fm=0630」に自動更新したいです。
3
+ サーバー9台分(本物ではない)にリリースするためのtxtファイル9個分の日付情報を自動更新するプログラムを
4
+
5
+ 作っています。csvに手入力メモした「新fm・新to」の日付を抽出して、txtファイルにある「旧fm・旧to」に上書きしたいです。
4
6
 
5
7
 
6
8
 
7
9
  **> 解決したいこと①**
8
10
 
11
+ 一行ずつ読み込む際、nullの行まで到達していないから無限ループになってしまう。
12
+
13
+ 次の行に進むためのソースが必要なのは分かるが、その方法が調べてもわからない。
14
+
15
+ next.lineを使ったが次の行に進めなかった。
16
+
17
+
18
+
19
+ **> 新しい日付**
20
+
21
+ ```csv
22
+
9
- dcConversionメソッドで
23
+ dc.misyori_kensu_B_fm=0528
24
+
25
+ dc.misyori_kensu_B_to=0628
26
+
27
+ ```
28
+
29
+ **> 古い日付**
30
+
31
+ ```txt
32
+
33
+ dc.misyori_kensu_A_to=1128
34
+
35
+ dc.misyori_kensu_B_to=1228
36
+
37
+ ```
38
+
39
+
40
+
41
+
42
+
43
+ **> 解決したいこと⓶**
44
+
45
+ csvDateメソッド内の「dc.misyori_kensu_B_fm=.*」の正規表現「.*」を「0528」として抽出したかったが、できない。考えられる原因として、一行目の行で永遠に停滞しているから、お目当ての行まで行きついていない、
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+ **> コンソール結果**
54
+
55
+ > > 抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
56
+
57
+ B期間のFromの日付を見つけました
58
+
59
+ 抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
60
+
61
+ B期間のFromの日付を見つけました
62
+
63
+ 抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
64
+
65
+ B期間のFromの日付を見つけました
66
+
67
+ 抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
68
+
69
+ B期間のFromの日付を見つけました
70
+
71
+
10
72
 
11
73
  ```java
12
74
 
75
+ package Main;
76
+
77
+
78
+
79
+ import java.io.BufferedReader;
80
+
81
+ import java.io.File;
82
+
83
+ import java.io.FileReader;
84
+
85
+ import java.io.IOException;
86
+
87
+ import java.util.regex.Matcher;
88
+
89
+ import java.util.regex.Pattern;
90
+
91
+
92
+
93
+ public class properties {
94
+
95
+
96
+
97
+ //pathを定義 (グローバル変数)
98
+
99
+ public static String[] path = new String[9];
100
+
101
+
102
+
103
+ public static void main(String[] args){
104
+
105
+
106
+
107
+ //9個分のファイルの格納場所を定義
108
+
109
+ path[0] ="C:\Users\Desktop\SD\ZSVF01P\FD\dc\classes\properties.txt"; //ZSVF01P
110
+
111
+ path[1] ="C:\Users\Desktop\SD\ZSVF02P\FD\dc\classes\properties.txt"; //ZSVF02P
112
+
113
+ path[2] ="C:\Users\Desktop\SD\ZSVF03P\FD\dc\classes\properties.txt"; //ZSVF03P
114
+
115
+ path[3] ="C:\Users\Desktop\SD\ZSVF04P\FD\dc\classes\properties.txt"; //ZSVF04P
116
+
117
+ path[4] ="C:\Users\Desktop\SD\ZSVF05P\FD\dc\classes\properties.txt"; //ZSVF05P
118
+
119
+ path[5] ="C:\Users\Desktop\SD\ZSVF06P\FD\dc\classes\properties.txt"; //ZSVF06P
120
+
121
+ path[6] ="C:\Users\Desktop\SD\ZSVF07P\FD\dc\classes\properties.txt"; //ZSVF07P
122
+
123
+ path[7] ="C:\Users\Desktop\SD\ZSVF08P\FD\dc\classes\properties.txt"; //ZSVF08P
124
+
125
+ path[8] ="C:\Users\Desktop\SD\ZSVF09P\FD\dc\classes\properties.txt"; //ZSVF09P
126
+
127
+
128
+
129
+ //ファイルのテキストデータ編集メソッド(引数)
130
+
131
+ csvDate();
132
+
133
+ dcConversion(path);
134
+
135
+ }
136
+
137
+ public static void csvDate(String[] args) {
138
+
139
+ try{
140
+
141
+ //更新日を指定したcsvを読み込む宣言
142
+
143
+ File csv = new File("C:\Users\Desktop\表示期間.csv");
144
+
145
+
146
+
147
+ //csvを読み込む
148
+
149
+ FileReader fr1 = new FileReader(csv);
150
+
151
+ //効率的な読み込み
152
+
153
+ BufferedReader br1 = new BufferedReader(fr1);
154
+
155
+
156
+
157
+ System.out.println("csvファイルを読み込みました。");
158
+
159
+
160
+
161
+ // 読み込んだ1行の文字列を格納するための変数
162
+
163
+ String line;
164
+
165
+ // 1行目を読んでみる。もし空のファイルなら、line には null がセットされる。
166
+
167
+ line = br1.readLine();
168
+
169
+
170
+
171
+ while(line!= null) {
172
+
173
+
174
+
175
+ //判定する行
176
+
177
+ line = "dc.misyori_kensu_B_fm=.*";
178
+
179
+
180
+
181
+ //kensu_B_fm=0528 の「0528」を抽出したい
182
+
183
+ Pattern p = Pattern.compile("dc.misyori_kensu_B_fm=.*");
184
+
185
+ Matcher m = p.matcher(line);
186
+
187
+
188
+
189
+ System.out.println("抽出した文字は"+m+"です");
190
+
191
+
192
+
193
+ if (m.find()){
194
+
195
+ System.out.println("B期間のFromの日付を見つけました");
196
+
197
+ }
198
+
199
+
200
+
201
+ //判定する行
202
+
203
+ line = "dc.misyori_kensu_B_to=.*";
204
+
205
+
206
+
207
+ //kensu_B_toの行にある日付部分のみ抽出したい
208
+
209
+ Pattern p2 = Pattern.compile("kensu_B_to=.*");
210
+
211
+ Matcher m2 = p.matcher(line);
212
+
213
+
214
+
215
+ if (m2.find()){
216
+
217
+ System.out.println("B期間のToの日付を見つけました");
218
+
219
+ }
220
+
221
+ }
222
+
223
+ br1.close();
224
+
225
+ }
226
+
227
+ catch (IOException ex) {
228
+
229
+ ex.printStackTrace();
230
+
231
+ }
232
+
233
+ }
234
+
235
+
236
+
237
+ public static void dcConversion(String[] path) {
238
+
239
+ for(int i=0; i<path.length; i++){
240
+
241
+ try{
242
+
243
+ //txtファイルを読み込む宣言
244
+
245
+ File file = new File(path[8]);
246
+
247
+
248
+
249
+ //txtファイルを読み込む
250
+
251
+ FileReader fr1 = new FileReader(file);
252
+
253
+ //効率的に読み込みできるメソッド
254
+
255
+ BufferedReader br1 = new BufferedReader(fr1);
256
+
257
+
258
+
259
+ // 読み込んだ1行の文字列を格納するための変数
260
+
261
+ String line2;
262
+
263
+ // 1行目を読んでみる。もし、空のファイルなら、line には null がセットされる。
264
+
265
+ line2 = br1.readLine();
266
+
267
+
268
+
269
+ System.out.println("txtファイルを読み込みました。");
270
+
271
+
272
+
273
+ //文字列がない行まで一行ずつ読み込む。行を全て読み込んだらnullを返す。
274
+
275
+ while(line2!= null) {
276
+
277
+
278
+
279
+ System.out.println(line2);
280
+
281
+
282
+
283
+ //抽出したcsvの一行にある日付(0528)をtxtの該当行に書き込みする。
284
+
285
+ line2 = line2.replace("dc.misyori_kensu_B_fm=.*", "dc.misyori_kensu_B_fm,m1");
286
+
287
+ line2 = line2.replace("dc.misyori_kensu_B_to=.*", "dc.misyori_kensu_B_to,m2");
288
+
289
+
290
+
13
- System.out.println(line2+"に更新しました。")
291
+ System.out.println(line2+"に更新しました。");
292
+
293
+ System.out.println(line2+"に更新しました。");
294
+
295
+ }
296
+
297
+
298
+
299
+ br1.close();
300
+
301
+ }
302
+
303
+ catch (IOException ex) {
304
+
305
+ ex.printStackTrace();
306
+
307
+ }
308
+
309
+
310
+
311
+ }
312
+
313
+ }
314
+
315
+ }
316
+
317
+
318
+
319
+
14
320
 
15
321
  ```
16
-
17
- まで実行結果でコンソール出力したいです。
18
-
19
-
20
-
21
-
22
-
23
- **> **>コンソール結果**
24
-
25
- txtファイルを読み込みました。
26
-
27
- txtファイルを読み込みました。
28
-
29
- txtファイルを読み込みました。
30
-
31
- txtファイルを読み込みました。
32
-
33
- txtファイルを読み込みました。
34
-
35
- txtファイルを読み込みました。
36
-
37
- txtファイルを読み込みました。
38
-
39
- txtファイルを読み込みました。
40
-
41
- txtファイルを読み込みました。
42
-
43
-
44
-
45
-
46
-
47
- ```java
48
-
49
- package Main;
50
-
51
-
52
-
53
- import java.io.BufferedReader;
54
-
55
- import java.io.BufferedWriter;
56
-
57
- import java.io.File;
58
-
59
- import java.io.FileReader;
60
-
61
- import java.io.FileWriter;
62
-
63
- import java.io.IOException;
64
-
65
- import java.util.regex.Matcher;
66
-
67
- import java.util.regex.Pattern;
68
-
69
-
70
-
71
- public class properties {
72
-
73
-
74
-
75
- //pathを定義 (グローバル変数)
76
-
77
- public static String[] path = new String[9];
78
-
79
-
80
-
81
- public static void main(String[] args){
82
-
83
-
84
-
85
- //9個分のファイルの格納場所を定義
86
-
87
- path[0] ="C:\Users\Desktop\SD\ZSVF01P\FD\dc\classes\Draft.txt"; //ZSVF01P
88
-
89
- path[1] ="C:\Users\Desktop\SD\ZSVF02P\FD\dc\classes\Draft.txt"; //ZSVF02P
90
-
91
- path[2] ="C:\Users\Desktop\SD\ZSVF03P\FD\dc\classes\Draft.txt"; //ZSVF03P
92
-
93
- path[3] ="C:\Users\Desktop\SD\ZSVF04P\FD\dc\classes\Draft.txt"; //ZSVF04P
94
-
95
- path[4] ="C:\Users\Desktop\SD\ZSVF05P\FD\dc\classes\Draft.txt"; //ZSVF05P
96
-
97
- path[5] ="C:\Users\Desktop\SD\ZSVF06P\FD\dc\classes\Draft.txt"; //ZSVF06P
98
-
99
- path[6] ="C:\Users\Desktop\SD\ZSVF07P\FD\dc\classes\Draft.txt"; //ZSVF07P
100
-
101
- path[7] ="C:\Users\Desktop\SD\ZSVF08P\FD\dc\classes\Draft.txt"; //ZSVF08P
102
-
103
- path[8] ="C:\Users\Desktop\SD\ZSVF09P\FD\dc\classes\Draft.txt"; //ZSVF09P
104
-
105
-
106
-
107
- //ファイルのテキストデータ編集メソッド(引数)
108
-
109
- dcConversion(path);
110
-
111
-      csvDate
112
-
113
- }
114
-
115
- public static void csvDate(String[] args) {
116
-
117
- try{
118
-
119
- //更新日を指定したcsvを読み込む宣言
120
-
121
- File csv = new File("C:\Users\Desktop\表示期間.csv");
122
-
123
-
124
-
125
- //csvを読み込む
126
-
127
- FileReader fr1 = new FileReader(csv);
128
-
129
- //効率的な読み込み
130
-
131
- BufferedReader br1 = new BufferedReader(fr1);
132
-
133
-
134
-
135
- System.out.println("csvファイルを読み込みました。");
136
-
137
-
138
-
139
- // 読み込んだ1行の文字列を格納するための変数
140
-
141
- String line = br1.readLine();
142
-
143
-
144
-
145
- // 1行目を読んでみる。もし空のファイルなら、line には null がセットされる。
146
-
147
-
148
-
149
-
150
-
151
- while(line!= null) {
152
-
153
- //判定する行
154
-
155
- line = "kensu_B_fm";
156
-
157
-
158
-
159
- //kensu_B_fm=0630 の「0630」を抽出したい
160
-
161
- Pattern p = Pattern.compile("kensu_B_fm=.*");
162
-
163
- Matcher m = p.matcher(line);
164
-
165
-
166
-
167
- if (m.find()){
168
-
169
- System.out.println("B期間のFromの日付を見つけました");
170
-
171
- }
172
-
173
-
174
-
175
- //判定する文字列(To)
176
-
177
- line = "kensu_B_to";
178
-
179
-
180
-
181
- //kensu_B_toの行にある日付部分のみ抽出したい
182
-
183
- Pattern p2 = Pattern.compile("kensu_B_to=.*");
184
-
185
- Matcher m2 = p.matcher(line);
186
-
187
-
188
-
189
- if (m2.find()){
190
-
191
- System.out.println("B期間のToの日付を見つけました");
192
-
193
- }
194
-
195
- }
196
-
197
- br1.close();
198
-
199
- }
200
-
201
- catch (IOException ex) {
202
-
203
- ex.printStackTrace();
204
-
205
- }
206
-
207
- }
208
-
209
-
210
-
211
- public static void dcConversion(String[] path) {
212
-
213
- for(int i=0; i<path.length; i++){
214
-
215
- try{
216
-
217
- //txtファイルを読み込む宣言
218
-
219
- File file = new File(path[8]);
220
-
221
-
222
-
223
- //txtファイルを読み込む
224
-
225
- FileReader fr1 = new FileReader(file);
226
-
227
- //効率的に読み込みできるメソッド
228
-
229
- BufferedReader br1 = new BufferedReader(fr1);
230
-
231
-
232
-
233
- // 読み込んだ1行の文字列を格納するための変数
234
-
235
- String line2;
236
-
237
- // 1行目を読んでみる。もし、空のファイルなら、line には null がセットされる。
238
-
239
- line2 = br1.readLine();
240
-
241
-
242
-
243
- System.out.println("txtファイルを読み込みました。");
244
-
245
-
246
-
247
- //文字列がない行まで一行ずつ読み込む。行を全て読み込んだらnullを返す。
248
-
249
- while(line2!= null) {
250
-
251
-
252
-
253
- System.out.println(line2);
254
-
255
-
256
-
257
- //抽出したcsvの一行にある日付(0630)をtxtの該当行に書き込みする。
258
-
259
- line2 = line2.replace("表示期間B_fm=.*", "表示期間B_fm,m1");
260
-
261
- line2 = line2.replace("表示期間B_to=.*", "表示期間B_to,m2");
262
-
263
-
264
-
265
- System.out.println(line2+"に更新しました。");
266
-
267
- System.out.println(line2+"に更新しました。");
268
-
269
- }
270
-
271
-
272
-
273
- br1.close();
274
-
275
- }
276
-
277
- catch (IOException ex) {
278
-
279
- ex.printStackTrace();
280
-
281
- }
282
-
283
-
284
-
285
- }
286
-
287
- }
288
-
289
- }
290
-
291
-
292
-
293
- ```

5

内容変更

2020/07/13 22:14

投稿

ibuki_ayah
ibuki_ayah

スコア2

test CHANGED
File without changes
test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
  // 1行目を読んでみる。もし空のファイルなら、line には null がセットされる。
146
146
 
147
- line = br1.readLine();
147
+
148
148
 
149
149
 
150
150
 

4

内容変更

2020/07/11 10:34

投稿

ibuki_ayah
ibuki_ayah

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,9 @@
1
+ **> プログラムで実現したいこと**
2
+
3
+ サーバー9台分(本物ではない)にリリースするためのtxtファイル9個分の日付情報を自動更新するプログラムを作っています。csvに手入力した日付(0630)を抽出して、9個のtxtファイルの「表示期間B_fm=0530」という行を「表示期間B_fm=0630」に自動更新したいです。
4
+
5
+
6
+
1
7
  **> 解決したいこと①**
2
8
 
3
9
  dcConversionメソッドで
@@ -144,17 +150,13 @@
144
150
 
145
151
  while(line!= null) {
146
152
 
147
- //=lineは既にstringとして宣言してあるが、判定する際の変数をここでlineとしたい。
148
-
149
- //判定する文字列(From)
153
+ //判定する
150
154
 
151
155
  line = "kensu_B_fm";
152
156
 
153
157
 
154
158
 
155
- //判定するパターン生成
159
+ //kensu_B_fm=0630 の「0630」抽出したい
156
-
157
- //日付がマッチする。
158
160
 
159
161
  Pattern p = Pattern.compile("kensu_B_fm=.*");
160
162
 
@@ -212,13 +214,13 @@
212
214
 
213
215
  try{
214
216
 
215
- //propertiesファイルを読み込む宣言
217
+ //txtファイルを読み込む宣言
216
218
 
217
219
  File file = new File(path[8]);
218
220
 
219
221
 
220
222
 
221
- //propertiesファイルを読み込む
223
+ //txtファイルを読み込む
222
224
 
223
225
  FileReader fr1 = new FileReader(file);
224
226
 
@@ -228,18 +230,6 @@
228
230
 
229
231
 
230
232
 
231
- //書き込むタイミングは[while line]文の中が良いのでは?
232
-
233
- //propertiesファイルを書き込む
234
-
235
- FileWriter fr2 = new FileWriter(file);
236
-
237
- //効率的に書き込みできるメソッド
238
-
239
- BufferedWriter bw1 = new BufferedWriter(fr2);
240
-
241
-
242
-
243
233
  // 読み込んだ1行の文字列を格納するための変数
244
234
 
245
235
  String line2;
@@ -264,21 +254,13 @@
264
254
 
265
255
 
266
256
 
267
- //更新済みのcsvの一行をproperties「fm,to」に書き込みする。
257
+ //抽出したcsvの一行にある日付(0630)をtxt該当行に書き込みする。
268
-
269
- //「*」:直前の文字が0回以上繰り返す場合にマッチ
258
+
270
-
271
- //「.」:任意の文字一文字がマッチ
272
-
273
- //「.*」:「....」
274
-
275
- line2 = line2.replace("表示期間B_fm=.*", "表示期間B_fm,m1"); //「*」:直前の文字が0回以上繰り返す場合にマッチ:
259
+ line2 = line2.replace("表示期間B_fm=.*", "表示期間B_fm,m1");
276
-
260
+
277
- line2 = line2.replace("表示期間B_to=.*", "表示期間B_to,m2"); //「.」:任意の文字一文字がマッチ
261
+ line2 = line2.replace("表示期間B_to=.*", "表示期間B_to,m2");
278
-
279
- //「.*」:「....」
262
+
280
-
281
-
263
+
282
264
 
283
265
  System.out.println(line2+"に更新しました。");
284
266
 
@@ -286,7 +268,7 @@
286
268
 
287
269
  }
288
270
 
289
- //ファイルへ書き込み
271
+
290
272
 
291
273
  br1.close();
292
274
 

3

内容変更

2020/07/11 10:32

投稿

ibuki_ayah
ibuki_ayah

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,7 @@
1
1
  **> 解決したいこと①**
2
2
 
3
+ dcConversionメソッドで
4
+
3
5
  ```java
4
6
 
5
7
  System.out.println(line2+"に更新しました。")
@@ -36,12 +38,6 @@
36
38
 
37
39
 
38
40
 
39
- **> **>解決したいこと②
40
-
41
- デバッグ時に、csvDateメソッドのコンソール出力がスキップされて、dcConversionメソッドのコンソール出力が先にされてしまう。なので、csvDateメソッドのコンソール出力を先に行いたい。
42
-
43
-
44
-
45
41
  ```java
46
42
 
47
43
  package Main;
@@ -106,6 +102,8 @@
106
102
 
107
103
  dcConversion(path);
108
104
 
105
+      csvDate
106
+
109
107
  }
110
108
 
111
109
  public static void csvDate(String[] args) {

2

内容の変更

2020/07/11 08:16

投稿

ibuki_ayah
ibuki_ayah

スコア2

test CHANGED
File without changes
test CHANGED
@@ -14,23 +14,23 @@
14
14
 
15
15
  **> **>コンソール結果**
16
16
 
17
- > propertiesファイルを読み込みました。
18
-
19
- propertiesファイルを読み込みました。
17
+ txtファイルを読み込みました。
20
-
18
+
21
- propertiesファイルを読み込みました。
19
+ txtファイルを読み込みました。
22
-
20
+
23
- propertiesファイルを読み込みました。
21
+ txtファイルを読み込みました。
24
-
22
+
25
- propertiesファイルを読み込みました。
23
+ txtファイルを読み込みました。
26
-
24
+
27
- propertiesファイルを読み込みました。
25
+ txtファイルを読み込みました。
28
-
26
+
29
- propertiesファイルを読み込みました。
27
+ txtファイルを読み込みました。
30
-
28
+
31
- propertiesファイルを読み込みました。
29
+ txtファイルを読み込みました。
32
-
30
+
33
- propertiesファイルを読み込みました。
31
+ txtファイルを読み込みました。
32
+
33
+ txtファイルを読み込みました。
34
34
 
35
35
 
36
36
 
@@ -252,7 +252,7 @@
252
252
 
253
253
 
254
254
 
255
- System.out.println("propertiesファイルを読み込みました。");
255
+ System.out.println("txtファイルを読み込みました。");
256
256
 
257
257
 
258
258
 

1

内容の変更

2020/07/11 07:55

投稿

ibuki_ayah
ibuki_ayah

スコア2

test CHANGED
@@ -1 +1 @@
1
- 複数のフォルダパスにあるtextファイル読み込みができない。
1
+ 複数のフォルダパスにあるtextファイルを一行ずつ読み込みができない。
test CHANGED
@@ -1,48 +1,76 @@
1
1
  **> 解決したいこと①**
2
2
 
3
-
4
-
5
- ・9種類のディレクトリの一番階層の深い場所にある「Draft.txt」というファイルを9個分、順番に読み込みたいのですが、以下のようなエラーが発生します。
6
-
7
-
8
-
9
-
10
-
11
- **> エラー内容**
12
-
13
- java.io.FileNotFoundException: dc.txt (指定されたファイルが見つかりません。)
14
-
15
- at java.io.FileInputStream.open(Native Method)
16
-
17
- at java.io.FileInputStream.<init>(FileInputStream.java:138)
18
-
19
- at java.io.FileReader.<init>(FileReader.java:72)
20
-
21
- at Main.txt.dcConversion(txt.java:40)
22
-
23
- at Main.txt.main(txt.java:29)
24
-
25
-
26
-
27
3
  ```java
28
4
 
5
+ System.out.println(line2+"に更新しました。")
6
+
7
+ ```
8
+
9
+ まで実行結果でコンソール出力したいです。
10
+
11
+
12
+
13
+
14
+
15
+ **> **>コンソール結果**
16
+
17
+ > propertiesファイルを読み込みました。
18
+
19
+ propertiesファイルを読み込みました。
20
+
21
+ propertiesファイルを読み込みました。
22
+
23
+ propertiesファイルを読み込みました。
24
+
25
+ propertiesファイルを読み込みました。
26
+
27
+ propertiesファイルを読み込みました。
28
+
29
+ propertiesファイルを読み込みました。
30
+
31
+ propertiesファイルを読み込みました。
32
+
33
+ propertiesファイルを読み込みました。
34
+
35
+
36
+
37
+
38
+
39
+ **> **>解決したいこと②
40
+
41
+ デバッグ時に、csvDateメソッドのコンソール出力がスキップされて、dcConversionメソッドのコンソール出力が先にされてしまう。なので、csvDateメソッドのコンソール出力を先に行いたい。
42
+
43
+
44
+
45
+ ```java
46
+
29
47
  package Main;
30
48
 
31
49
 
32
50
 
33
51
  import java.io.BufferedReader;
34
52
 
53
+ import java.io.BufferedWriter;
54
+
35
55
  import java.io.File;
36
56
 
37
57
  import java.io.FileReader;
38
58
 
59
+ import java.io.FileWriter;
60
+
39
61
  import java.io.IOException;
40
62
 
41
-
63
+ import java.util.regex.Matcher;
64
+
42
-
65
+ import java.util.regex.Pattern;
66
+
67
+
68
+
43
- public class txt {
69
+ public class properties {
70
+
71
+
72
+
44
-
73
+ //pathを定義 (グローバル変数)
45
-
46
74
 
47
75
  public static String[] path = new String[9];
48
76
 
@@ -52,130 +80,228 @@
52
80
 
53
81
 
54
82
 
55
- //ファイルの格納場所を定義
83
+ //9個分のファイルの格納場所を定義
56
-
84
+
57
- path[0] ="\DS\ZS01P\D$\Draft\class\Draft.txt"; //ZS01P
85
+ path[0] ="C:\Users\Desktop\SD\ZSVF01P\FD\dc\classes\Draft.txt"; //ZSVF01P
58
-
86
+
59
- path[1] ="\DS\ZS02P\D$\Draft\class\Draft.txt"; //ZS02P
87
+ path[1] ="C:\Users\Desktop\SD\ZSVF02P\FD\dc\classes\Draft.txt"; //ZSVF02P
60
-
88
+
61
- path[2] ="\DS\ZS03P\D$\Draft\class\Draft.txt"; //ZS03P
89
+ path[2] ="C:\Users\Desktop\SD\ZSVF03P\FD\dc\classes\Draft.txt"; //ZSVF03P
62
-
90
+
63
- path[3] ="\DS\ZS04P\D$\Draft\class\Draft.txt"; //ZS04P
91
+ path[3] ="C:\Users\Desktop\SD\ZSVF04P\FD\dc\classes\Draft.txt"; //ZSVF04P
64
-
92
+
65
- path[4] ="\DS\ZS05P\D$\Draft\class\Draft.txt"; //ZS05P
93
+ path[4] ="C:\Users\Desktop\SD\ZSVF05P\FD\dc\classes\Draft.txt"; //ZSVF05P
66
-
94
+
67
- path[5] ="\DS\ZS06P\D$\Draft\class\Draft.txt"; //ZS06P
95
+ path[5] ="C:\Users\Desktop\SD\ZSVF06P\FD\dc\classes\Draft.txt"; //ZSVF06P
68
-
96
+
69
- path[6] ="\DS\ZS07P\D$\Draft\class\Draft.txt"; //ZS07P
97
+ path[6] ="C:\Users\Desktop\SD\ZSVF07P\FD\dc\classes\Draft.txt"; //ZSVF07P
70
-
98
+
71
- path[7] ="\DS\ZS08P\D$\Draft\class\Draft.txt"; //ZS08P
99
+ path[7] ="C:\Users\Desktop\SD\ZSVF08P\FD\dc\classes\Draft.txt"; //ZSVF08P
72
-
100
+
73
- path[8] ="\DS\ZS09P\D$\Draft\class\Draft.txt"; //ZS09P
101
+ path[8] ="C:\Users\Desktop\SD\ZSVF09P\FD\dc\classes\Draft.txt"; //ZSVF09P
74
-
75
-
76
-
102
+
103
+
104
+
77
- //ファイル編集メソッド(引数)
105
+ //ファイルのテキストデータ編集メソッド(引数)
78
-
106
+
79
- DraftConversion(path);
107
+ dcConversion(path);
80
108
 
81
109
  }
82
110
 
83
-
111
+ public static void csvDate(String[] args) {
112
+
84
-
113
+ try{
114
+
115
+ //更新日を指定したcsvを読み込む宣言
116
+
117
+ File csv = new File("C:\Users\Desktop\表示期間.csv");
118
+
119
+
120
+
121
+ //csvを読み込む
122
+
123
+ FileReader fr1 = new FileReader(csv);
124
+
125
+ //効率的な読み込み
126
+
127
+ BufferedReader br1 = new BufferedReader(fr1);
128
+
129
+
130
+
131
+ System.out.println("csvファイルを読み込みました。");
132
+
133
+
134
+
135
+ // 読み込んだ1行の文字列を格納するための変数
136
+
137
+ String line = br1.readLine();
138
+
139
+
140
+
141
+ // 1行目を読んでみる。もし空のファイルなら、line には null がセットされる。
142
+
143
+ line = br1.readLine();
144
+
145
+
146
+
147
+ while(line!= null) {
148
+
149
+ //=lineは既にstringとして宣言してあるが、判定する際の変数をここでlineとしたい。
150
+
151
+ //判定する文字列(From)
152
+
153
+ line = "kensu_B_fm";
154
+
155
+
156
+
157
+ //判定するパターンを生成
158
+
159
+ //日付がマッチする。
160
+
161
+ Pattern p = Pattern.compile("kensu_B_fm=.*");
162
+
163
+ Matcher m = p.matcher(line);
164
+
165
+
166
+
167
+ if (m.find()){
168
+
169
+ System.out.println("B期間のFromの日付を見つけました");
170
+
171
+ }
172
+
173
+
174
+
175
+ //判定する文字列(To)
176
+
177
+ line = "kensu_B_to";
178
+
179
+
180
+
181
+ //kensu_B_toの行にある日付部分のみ抽出したい
182
+
183
+ Pattern p2 = Pattern.compile("kensu_B_to=.*");
184
+
185
+ Matcher m2 = p.matcher(line);
186
+
187
+
188
+
189
+ if (m2.find()){
190
+
191
+ System.out.println("B期間のToの日付を見つけました");
192
+
193
+ }
194
+
195
+ }
196
+
197
+ br1.close();
198
+
199
+ }
200
+
201
+ catch (IOException ex) {
202
+
203
+ ex.printStackTrace();
204
+
205
+ }
206
+
207
+ }
208
+
209
+
210
+
85
- public static void DraftConversion(String[] path) {
211
+ public static void dcConversion(String[] path) {
86
212
 
87
213
  for(int i=0; i<path.length; i++){
88
214
 
89
-
90
-
91
215
  try{
92
216
 
93
- //読み込む用のファイルを指定する
217
+ //propertiesファイルを読み込む宣言
94
-
218
+
95
- File file = new File("Draft.txt");
219
+ File file = new File(path[8]);
96
-
97
-
98
-
220
+
221
+
222
+
99
- //ファイルを読み込む
223
+ //propertiesファイルを読み込む
100
-
224
+
101
- FileReader fr = new FileReader(file);
225
+ FileReader fr1 = new FileReader(file);
226
+
227
+ //効率的に読み込みできるメソッド
228
+
229
+ BufferedReader br1 = new BufferedReader(fr1);
230
+
231
+
232
+
233
+ //書き込むタイミングは[while line]文の中が良いのでは?
234
+
235
+ //propertiesファイルを書き込む
236
+
237
+ FileWriter fr2 = new FileWriter(file);
238
+
239
+ //効率的に書き込みできるメソッド
240
+
241
+ BufferedWriter bw1 = new BufferedWriter(fr2);
242
+
243
+
244
+
245
+ // 読み込んだ1行の文字列を格納するための変数
246
+
247
+ String line2;
248
+
249
+ // 1行目を読んでみる。もし、空のファイルなら、line には null がセットされる。
250
+
251
+ line2 = br1.readLine();
252
+
253
+
254
+
255
+ System.out.println("propertiesファイルを読み込みました。");
102
256
 
103
257
 
104
258
 
105
- //効率的に読み込みできる
106
-
107
- BufferedReader br = new BufferedReader(fr);
108
-
109
-
110
-
111
- //ファイルを書き込む
112
-
113
- FileWriter fr2 = new FileWriter(file);
114
-
115
-
116
-
117
- //効率的に書き込みできる
118
-
119
- BufferedWriter bw = new BufferedWriter(fr2);
120
-
121
-
122
-
123
- //読み込んだ結果を戻り値として返す変数
124
-
125
- String line = br.readLine() ;
126
-
127
-
128
-
129
- System.out.println("ファイルを読み込み始めました");
130
-
131
-
132
-
133
- //null:文字列がない行まで一行ずつ読み込む。ファイルの終わりに来たらnullを返す。
259
+ //文字列がない行まで一行ずつ読み込む。行を全て読み込んだらnullを返す。
134
-
260
+
135
- while(line!= null) {
261
+ while(line2!= null) {
262
+
263
+
264
+
136
-
265
+ System.out.println(line2);
137
-
138
-
139
-
140
-
266
+
267
+
268
+
141
- //日付変① 5月28日6月30日変更
269
+ //更新済みのcsvの一行propertiesの「fm,to」書き込みする。
142
-
270
+
143
- //日付変更② 6月10日を7月06日変更
271
+ //「*」:直前の文字が0回以上繰り返す場合マッチ
144
-
272
+
145
- line = line.replace("Draft_kensu_B_fm,0528", "Draft_kensu_B_fm,0630");
273
+ //「.」:任意の文字一文字がマッチ
146
-
147
- line = line.replace("Draft_kensu_B_to,0610", "Draft_kensu_B_to,0706");
274
+
148
-
149
-
150
-
151
- // ファイルへ書き込み
275
+ //「.*」:「....」
276
+
152
-
277
+ line2 = line2.replace("表示期間B_fm=.*", "表示期間B_fm,m1"); //「*」:直前の文字が0回以上繰り返す場合にマッチ:
278
+
279
+ line2 = line2.replace("表示期間B_to=.*", "表示期間B_to,m2"); //「.」:任意の文字一文字がマッチ
280
+
153
- bw.write(line);
281
+ //「.*」:「....」
154
-
155
- bw.newLine();
282
+
156
-
157
-
158
-
283
+
284
+
159
- System.out.println(line+"に更新しました。");
285
+ System.out.println(line2+"に更新しました。");
160
-
286
+
161
- System.out.println(line+"に更新しました。");
287
+ System.out.println(line2+"に更新しました。");
162
288
 
163
289
  }
164
290
 
165
-
166
-
167
- // 最後にファイルを閉じてリソースを開放する
291
+ //ファイルへ書き込み
168
-
292
+
169
- br.close();
293
+ br1.close();
170
294
 
171
295
  }
172
296
 
173
297
  catch (IOException ex) {
174
298
 
175
- ex.printStackTrace();
299
+ ex.printStackTrace();
176
300
 
177
301
  }
178
302
 
303
+
304
+
179
305
  }
180
306
 
181
307
  }
@@ -185,41 +311,3 @@
185
311
 
186
312
 
187
313
  ```
188
-
189
-
190
-
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
- > 解決したいこと②
208
-
209
-
210
-
211
- 上記に記載したソースの一行ずつ順番に読み込まれるコードの中で、「Draft_kensu_B_fm,0528」という行があります。その行を「Draft_kensu_B_fm,0630」に置換したいのですが、ソースコードに問題はないでしょうか?
212
-
213
-
214
-
215
- ```java
216
-
217
- //日付変更① 5月28日を6月30日に変更
218
-
219
- //日付変更② 6月10日を7月06日に変更
220
-
221
- line = line.replace("Draft_kensu_B_fm,0528", "Draft_kensu_B_fm,0630");
222
-
223
- line = line.replace("Draft_kensu_B_to,0610", "Draft_kensu_B_to,0706");
224
-
225
- ```