> プログラムで実現したいこと
サーバー9台分(本物ではない)にリリースするためのtxtファイル9個分の日付情報を自動更新するプログラムを
作っています。csvに手入力メモした「新fm・新to」の日付を抽出して、txtファイルにある「旧fm・旧to」に上書きしたいです。
> 解決したいこと①
一行ずつ読み込む際、nullの行まで到達していないから無限ループになってしまう。
次の行に進むためのソースが必要なのは分かるが、その方法が調べてもわからない。
next.lineを使ったが次の行に進めなかった。
> 新しい日付
csv
1dc.misyori_kensu_B_fm=0528 2dc.misyori_kensu_B_to=0628
> 古い日付
txt
1dc.misyori_kensu_A_to=1128 2dc.misyori_kensu_B_to=1228
> 解決したいこと⓶
csvDateメソッド内の「dc.misyori_kensu_B_fm=.」の正規表現「.」を「0528」として抽出したかったが、できない。考えられる原因として、一行目の行で永遠に停滞しているから、お目当ての行まで行きついていない、
> コンソール結果
抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
B期間のFromの日付を見つけました
抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
B期間のFromの日付を見つけました
抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
B期間のFromの日付を見つけました
抽出した文字はjava.util.regex.Matcher[pattern=dc.misyori_kensu_B_fm=.* region=0,24 lastmatch=]です
B期間のFromの日付を見つけました
java
1package Main; 2 3import java.io.BufferedReader; 4import java.io.File; 5import java.io.FileReader; 6import java.io.IOException; 7import java.util.regex.Matcher; 8import java.util.regex.Pattern; 9 10public class properties { 11 12 //pathを定義 (グローバル変数) 13 public static String[] path = new String[9]; 14 15 public static void main(String[] args){ 16 17 //9個分のファイルの格納場所を定義 18 path[0] ="C:\Users\Desktop\SD\ZSVF01P\FD\dc\classes\properties.txt"; //ZSVF01P 19 path[1] ="C:\Users\Desktop\SD\ZSVF02P\FD\dc\classes\properties.txt"; //ZSVF02P 20 path[2] ="C:\Users\Desktop\SD\ZSVF03P\FD\dc\classes\properties.txt"; //ZSVF03P 21 path[3] ="C:\Users\Desktop\SD\ZSVF04P\FD\dc\classes\properties.txt"; //ZSVF04P 22 path[4] ="C:\Users\Desktop\SD\ZSVF05P\FD\dc\classes\properties.txt"; //ZSVF05P 23 path[5] ="C:\Users\Desktop\SD\ZSVF06P\FD\dc\classes\properties.txt"; //ZSVF06P 24 path[6] ="C:\Users\Desktop\SD\ZSVF07P\FD\dc\classes\properties.txt"; //ZSVF07P 25 path[7] ="C:\Users\Desktop\SD\ZSVF08P\FD\dc\classes\properties.txt"; //ZSVF08P 26 path[8] ="C:\Users\Desktop\SD\ZSVF09P\FD\dc\classes\properties.txt"; //ZSVF09P 27 28 //ファイルのテキストデータ編集メソッド(引数) 29 csvDate(); 30 dcConversion(path); 31 } 32 public static void csvDate(String[] args) { 33 try{ 34 //更新日を指定したcsvを読み込む宣言 35 File csv = new File("C:\Users\Desktop\表示期間.csv"); 36 37 //csvを読み込む 38 FileReader fr1 = new FileReader(csv); 39 //効率的な読み込み 40 BufferedReader br1 = new BufferedReader(fr1); 41 42 System.out.println("csvファイルを読み込みました。"); 43 44 // 読み込んだ1行の文字列を格納するための変数 45 String line; 46 // 1行目を読んでみる。もし空のファイルなら、line には null がセットされる。 47 line = br1.readLine(); 48 49 while(line!= null) { 50 51 //判定する行 52 line = "dc.misyori_kensu_B_fm=.*"; 53 54 //kensu_B_fm=0528 の「0528」を抽出したい 55 Pattern p = Pattern.compile("dc.misyori_kensu_B_fm=.*"); 56 Matcher m = p.matcher(line); 57 58 System.out.println("抽出した文字は"+m+"です"); 59 60 if (m.find()){ 61 System.out.println("B期間のFromの日付を見つけました"); 62 } 63 64 //判定する行 65 line = "dc.misyori_kensu_B_to=.*"; 66 67 //kensu_B_toの行にある日付部分のみ抽出したい 68 Pattern p2 = Pattern.compile("kensu_B_to=.*"); 69 Matcher m2 = p.matcher(line); 70 71 if (m2.find()){ 72 System.out.println("B期間のToの日付を見つけました"); 73 } 74 } 75 br1.close(); 76 } 77 catch (IOException ex) { 78 ex.printStackTrace(); 79 } 80 } 81 82 public static void dcConversion(String[] path) { 83 for(int i=0; i<path.length; i++){ 84 try{ 85 //txtファイルを読み込む宣言 86 File file = new File(path[8]); 87 88 //txtファイルを読み込む 89 FileReader fr1 = new FileReader(file); 90 //効率的に読み込みできるメソッド 91 BufferedReader br1 = new BufferedReader(fr1); 92 93 // 読み込んだ1行の文字列を格納するための変数 94 String line2; 95 // 1行目を読んでみる。もし、空のファイルなら、line には null がセットされる。 96 line2 = br1.readLine(); 97 98 System.out.println("txtファイルを読み込みました。"); 99 100 //文字列がない行まで一行ずつ読み込む。行を全て読み込んだらnullを返す。 101 while(line2!= null) { 102 103 System.out.println(line2); 104 105 //抽出したcsvの一行にある日付(0528)をtxtの該当行に書き込みする。 106 line2 = line2.replace("dc.misyori_kensu_B_fm=.*", "dc.misyori_kensu_B_fm,m1"); 107 line2 = line2.replace("dc.misyori_kensu_B_to=.*", "dc.misyori_kensu_B_to,m2"); 108 109 System.out.println(line2+"に更新しました。"); 110 System.out.println(line2+"に更新しました。"); 111 } 112 113 br1.close(); 114 } 115 catch (IOException ex) { 116 ex.printStackTrace(); 117 } 118 119 } 120 } 121} 122 123