myfinderの技術や周辺的活動のblog

2009年1月21日水曜日

プログラミングの基礎体力その1「転置配列」

自分の能力レーダーチャートを作ってみるとすると、圧倒的に「プログラむ」力が不足しているのは前々から思っていて、どうにかしないといかんと考えていた。
なので、しばらくの間このシリーズをやってみるです。

今回実装したのは転置配列的な処理。
入力CSVを反転させるものです。

以下コード


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CSVReverse {

private static final String DELIMITER = ",";

/**
* main
* @param args
* @throws FileNotFoundException
* @throws IOException
*/
public static void main(String[] args) throws FileNotFoundException, IOException, IOException {

FileReader fileReader = new FileReader("sampleData/examination.csv");
BufferedReader bufferedReader = new BufferedReader(fileReader);
List splittedList = new ArrayList();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
splittedList.add(line.split(DELIMITER));

}

String[][] splittedArray = splittedList.toArray(new String[splittedList.size()][]);
int row = splittedArray.length;
int column = 0;
if (row != 0) {
column = splittedArray[0].length;
}

String[][] transportedArray = new String[column][row];
// 行と列を反転させる
for (int i = 0; i < column; ++i) {
for (int j = 0; j < row; ++j) {
/**
* こうすれば
* 元行列[0][0] 変換行列[0][0]
* 元行列[0][1] 変換行列[1][0]
* 元行列[0][2] 変換行列[2][0]
* 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
* という感じに置き換えができる
*/
transportedArray[i][j] = splittedArray[j][i];
}
}
StringBuilder transportedString = new StringBuilder();
for (String[] transportedLineArray : transportedArray) {
for (int i = 0; i < transportedLineArray.length; ++i) {
transportedString.append(transportedLineArray[i]);
if (i != transportedLineArray.length - 1) {
transportedString.append(DELIMITER);
}
}
transportedString.append(System.getProperty("line.separator"));
}

FileWriter fileWriter = new FileWriter("resultData/transported.csv");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(transportedString.toString());
bufferedWriter.close();
}
}


たったこれだけなのに時間掛かり過ぎ。
もっと書かないといかんです。

0 件のコメント: