Java学習中なので何となく…
タブ区切りのデータをカンマ区切りにするアレを作ってみました。
VSCodeを使っていたり、ろくに参考書も読まずにコーディングしているので
かなり汚いです。
コード
import java.io.*;
import java.util.*;
public class Tsv2Csv
{
public static void main(String[] args) throws FileNotFoundException
{
if (args.length != 2) {
return;
}
String readFileName = args[0];
String createFileName = args[1];
// ファイル読み込み
List<String[]> list = ReadFile(readFileName);
// CSVファイル作成
CreateCsv(createFileName, list);
return;
}
/**
* ReadFileメソッド 指定したファイルのデータを取得する。
*
* @param readFileName 読み込みファイル名
* @return ファイルデータ
*/
public static List<String[]> ReadFile(String readFileName)
{
List<String[]> list = new ArrayList<String[]>(0);
try {
int i = 0;
File f = new File(readFileName);
String str = null;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));
while((str = br.readLine()) != null){
String data = str;
String[] tmpArray = data.split("\t");
for (i = 0; i < tmpArray.length; i++) {
tmpArray[i] = "\"" + tmpArray[i] + "\"";
}
list.add(tmpArray);
}
br.close();
} catch (Exception e) {
return null;
}
return list;
}
/**
* CreateCsvメソッド CSVファイルを作成する。
*
* @param createFileName 出力ファイル名
* @param list 出力データ
* @return ファイル作成成功:true, 失敗:false
*/
public static boolean CreateCsv(String createFileName, List<String[]> list)
{
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(createFileName), "UTF-8")));
for (String[] tmpStringArray : list) {
pw.println(String.join(",", tmpStringArray));
}
pw.close();
} catch (Exception e) {
return false;
}
return true;
}
}
入力データ
みんな大好き意地悪データも入ってます。(∩´∀`)∩
1 2 ho"ge test 5 1 2, hoge te\rst 6👉 "1 2 ho①ge te's\t 5 1 2㈱ hoge te((((oノ´3`)ノst 5\r\n
実行結果(出力ファイル)
かなり見づらいけど、変換できてます。
"1","2","ho"ge","test","5" "1","2,","hoge","te\rst","6👉" ""1","2","ho①ge","te's\t","5" "1","2㈱","hoge","te((((oノ´3`)ノst","5\r\n"
(´-`).。oO(完成と思ったら、意地悪データを入れた後に色々と崩壊した感じ…

