質問: データの並び替え 今、 a 001 1 a 002 1 b 002 2 b 003 2 c 001 2 c 002 4 c 004 3 d 003 2 d 005 1 e 006 4 このように並んでいる表を 001 002 003 004 005 006 a 1 1 0 0 0 0 b 0 2 2 0 0 0 c 2 4 0 3 0 0 d 0 0 2 0 1 0 e 0 0 0 0 0 4 というような表に書き換えたいのですが、 何かいい方法はないでしょうか? データ数が膨大なので、excelなどでやるわけにもいかず困っています。 javaでプログラムを組もうと思っているのですが、 具体的にどのようにすればいいものでしょうか?
回答: a 001 1 というデータの、"a"の部分をy座標に。"001"の部分をx座標に変換できる関数を作れば、配列として扱えるようになるので、後は楽だと思います。 データの仕様が書かれていないので、適当に想像して書いてみました。 表の大きさ(x,yの最大値)が決まっていれば、サンプルのように配列でいいですが、これが未定の場合は、mapなどを使うと良いと思います。 static string[] lines = { "a 001 1", "a 002 1", ~中略~ "e 006 4", }; public static void main(string[] args){ int [][] values = new int[10][10]; //ここでは、10x10の表とする //読み込んだデータを1つずつ処理する for (int i = 0; i < lines.length; i++){ string[] elements = lines[i].split(" "); //スペースで分割 int x = getx(elements[1]); int y = gety(elements[0]); values[y][x] = integer.parseint(elements[2]); //数値化 } //valuesの中身を確認 for (int y = 0; y < values.length; y++){ for (int x = 0; x < values[y].length; x++){ system.out.print(values[y][x] + ","); } system.out.println(); } } private static int gety(string s){ return (int)(s.charat(0) - 'a'); //a->0, b->1, c->2に変換 } private static int getx(string s){ string temp = s.replaceall("^[0]+", ""); //先頭の0を除去 return integer.parseint(temp) - 1; //数値化して-1する }