• 締切済み

JAVA CSV加工について

いつもお世話になっております。 只今、JAVAのデータ(String)をCSVに出力する プログラムを作成しております String Head = "名前,年齢" String name = "山田,田中" String age = "19,27" ---CSV出力結果として--- 1列目を "名前,年齢" 2列目を "山田,19" 3列目を "田中,27" としたいのですがどうすれば良いのでしょうか 基本的な(そのまま出力)は出来ます。 宜しくお願いします

みんなの回答

  • nknk80
  • ベストアンサー率65% (17/26)
回答No.3

split()を使うとこんな感じになると思います。 この例では、それぞれの文字列中のカンマの個数は同じであることを前提としています。 public class Test1{ public static void main(String[] args){ String fname="test.csv"; String title="名前,年齢,性別"; String name="山田,田中,鈴木,佐藤"; String age="19,20,20,25"; String sex="男性,女性, ,男性"; // ---> String[] nameArray=name.split(","); String[] ageArray=age.split(","); String[] sexArray=sex.split(","); // <--- try{ FileOutputStream fos=new FileOutputStream(fname); OutputStreamWriter osw=new OutputStreamWriter(fos,"Shift_JIS"); BufferedWriter bw=new BufferedWriter(osw); // ---> bw.write(title); bw.write('\n'); int count=nameArray.length; for(int i=0;i<count;i++){ bw.write(nameArray[i]); bw.write(','); bw.write(ageArray[i]); bw.write(','); bw.write(sexArray[i]); bw.write('\n'); } // <--- bw.close(); osw.close(); fos.close(); } catch(Exception e){ } } }

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>Splitを検索しましたが、使い方がよく分りませんでした。 マニュアルを読んでもわからないということ?どの辺が?

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

今、マニュアル読んだ。 String#split() でよろしかろ。

rdyiojey
質問者

補足

回答ありがとう御座います。 Splitを検索しましたが、使い方がよく分りませんでした。 public class Test1 { public static void main(String[] args) { String fname = "test.csv"; String title = "名前,年齢,性別"; String name = "山田,田中,鈴木,佐藤"; String age = "19,20,20,25"; String sex = "男性,女性, ,男性"; try{ FileOutputStream fos = new FileOutputStream(fname); OutputStreamWriter osw = new OutputStreamWriter(fos , "Shift_JIS"); BufferedWriter bw = new BufferedWriter(osw); bw.write(title); bw.write("\n"); bw.write(name); bw.write("\n"); bw.write(age); bw.write("\n"); bw.write(sex); bw.close(); osw.close(); fos.close(); }catch (Exception e){ } } } ---CSV出力として--- | 名前 | 年齢 | 性別 | ---------------- | 山田 |  19 | 男性 | ---------------- | 田中 |  20 | 女性 | ---------------- | 鈴木 |  20 |    | ----------------     | 佐藤 |  25 | 男性 | としたいのです。 上のプログラムでは ---CSV--- | 名前 | 年齢 | 性別 |    | --------------------- | 山田 | 田中 | 鈴木 | 佐藤 | --------------------- |  19 |  20 | 20  |  25 | --------------------- | 男性 | 女性 |    | 男性 | となってしまいます。 Tokenizerを使って改行はできましたが、 Excelで言うセル(B2からなど)の指定などが 分らない為断念しました。 どうか、宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • java 入力命令

    以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }

  • 「得た値をCSV出力するJAVAプログラムを書きたい」

    「得た値をCSV出力するJAVAプログラムを書きたい」 固定したある点とクリックした点の距離は取得できました つまり、クリックするごとに2点間の距離は変わります 例えば 1回目:10cm 2回目:20cm 3回目:5cm とします 流れはクリック→10cmという値を取得→クリック→20cmという値を取得→・・・ するとCSVファイルには10,20,5という風に出力されるようにJAVAプログラムを書きたいです 色々調べたんですが、読み込みの方法がいまいちわかりません(全体的なこともですが・・・) データベースを読み込むとかはよく見かけるのですが。 また、実行したら勝手にCSVファイルが出来るのか? 下記のプログラムまでは出来ました import java.io.*; public static void main( String args[] ) { try { PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( "output.csv" ) ) ); pw.println( "kyori" ); System.out.println( "ファイルに書き込みました。" ); pw.close(); } catch( IOException exp ) { System.out.println( "入出力エラーです。" ); } } 何かアドバイスをお願いします。

  • javaのEclipseの問題がわからない

    Human.javaで記述されたクラスを継承し、継承したクラスをインスタンス化して、利用できるHumanクラスのメンバをすべて使用するプログラムを作成せよ。クラス名は、継承したクラスをPerson とし、そのクラスをインスタンス化するクラスをQuestion13_1として、実行結果も記述すること public class Human { private String name = "デフォルトの名前"; protected int age = 22; public int height = 170; final public int weight = 55; public String GetName(){ return name; } public void setName(String name){ this.name = name; } } 結果何を出せば良いのわかりません。

  • csvファイルを出力する簡単なプログラム

    初心者です。 csvファイルを読み込んで、それを加工(列を増やして文字を決まった列を挿入)したcsvファイルを出力する簡単なプログラムを模索しているのですが、どのようなものを作ればいいのかわかりません。こういうものはどういう風に考えて作っていくものなのか、大まかに教えてもらえないでしょうか。まず、csvファイルを読み込むという作業をどのようにコンピュータにやらせればいいのでしょうか? ちなみに『やさしいJAVA』(初歩の方)は一律読破しました。 お願いします。

  • クラスの拡張について

    Teacher クラスを変更し、newTeacher()の時は、名前「TARO」、年齢「25」、科目「国語」で初期化し、newTeacher(名前、年齢、科目)のときはそれぞれのパラメータでオブジェクトを作るようにしたい。 Person クラスのコンストラクタが使ってもかまわない という問題で //ClassRoom3.java class Person{ String name; int age; Person(String name,int age){ this.name = name; this.age = age; } void print(){ System.out.println("[Name]"+name); System.out.println("[age]"+age); } } class Teacher extends Person{ String subject; void print(){ System.out.println("私は"+name+" といいます。"); System.out.println("年齢は"+age+" 才です。"); System.out.println(subject+" を教えています。"); } } class ClassRoom3{ public static void main(String args[]){ Teacher obj1 = new Teacher(); Teacher obj2 = new Teacher("JIRO",27,"算数"); obj1.print(); System.out.println(); obj2.print(); } } /* 実行例 >java ClassRoom3 私は TARO といいます。 年齢は 25 才です。 国語 を教えています。 私は JIRO といいます。 年齢は 27 才です。 算数 を教えています。 */ という出力結果をだしたいのですが、なんどもやっても失敗してしまい。なかなかできません。 どう直したらよいのですか?

  • csvファイルを読み込んだ時の「ゼロ」の扱い

    すみません、教えてください。 test.csv というファイルに、 佐藤, 東京 田中, 大阪 中西, 京都 というデータが入っていたとして、以下を使って読み込むと、 <?php $file_name = "test.csv"; $fp = fopen( $file_name, 'r' ); $data = array(); while( $ret_csv = fgetcsv( $fp, 256 ) ){ for($col = 0; $col < count( $ret_csv ); $col++ ){ $data[$col][$row] = $ret_csv[$col]; } $row++; } fclose( $fp ); var_dump($data); ?> 以下のように、 [0] ではなく [""] となってしまうのですが、これを [0] にする方法はないでしょうか。 array(2) { [0]=> array(3) { [""]=> string(6) "佐藤" [1]=> string(6) "田中" [2]=> string(6) "中西" } [1]=> array(3) { [""]=> string(6) "東京" [1]=> string(6) "大阪" [2]=> string(7) "京都 " } } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • javaでCSVの中身から最大値を表示したい

    タイトルの通りなのですが、javaのプログラムでCSVの中の少数を読み込み、そこから最大値を表示したいのです。 CSVの中身は 10.1,20.2,30.3,40.4,50.4 100.1,200.2,300.3,400.4 という半角の少数がカンマで区切られた状態になっています。 import java.util.Scanner; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class test { public static void main(String args[]) throws NumberFormatException, IOException{ System.out.println("csvのファイル名を入力"); Scanner sc = new Scanner(System.in); String str = sc.next(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(str))); String line; while((line=br.readLine())!=null){ String[] sp = line.split(","); double sum=0;//合計値格納用 for(int i=0;i<sp.length;i++){ sum += Double.parseDouble(sp[i]); } System.out.println(line+"の合計値は"+sum); } br.close(); } } 上記のプログラムは、CSVの中身の各行の合計値を算出するもので、これを元に各行の最大値を算出したいのですが、どうしても比較演算子を使用しての算出がうまくいきません。 どなたかプログラムに詳しい方がいましたら、ご教授いただけると助かります。 つたない文章ですがよろしくお願いします。

    • ベストアンサー
    • Java
  • このようなプログラムを教えて下さい

    コマンドプロンプト上の標準入力で文字列と数値を複数組入力していき、 その入力された文字列とそれに対する数値をその数値で比較し最後に大きい順で順に表示するようなプログラムを作りたいのですが、よく構造がわからないので教えて下さい。(ちなみに入力された文字列と数値は、それらを1つのクラスのフィールドとして定義するとして) たとえば人の名前と年齢を入力し大きい順に並べるとか NAME :Bob age :12 NAME :Tom age :25 NAME :Ken age :3 NAME : NAME:Tom,age:25 NAME:Bob,age:12 NAME:Ken,age:3 このように出力したいのですが もしこのようなプログラムを作成することのできる方いましたら、 教えてやってください。

    • ベストアンサー
    • Java
  • またしてもjava.until.Mapに関してです

    いつもお世話になっております。以前質問したjava.until.Mapに関してですが、以下のプログラムのjava.until.List部分を変えるとどういった風になるのでしょうか? 何卒ご回答よろしくお願い致します。 class CustomerManager { public static void main(String[] args){ CustomerManager manager = new CustomerManager(); manager.addCustomerCard( "山田一郎"); manager.addCustomerCard( "鈴木太郎"); manager.addCustomerCard( "田中次郎"); manager.printAllInfo(); } private List<CustomerCard> customers = new ArrayList<CustomerCard>(); private int index = 0; public void addCustomerCard(String name){ customers.add(new CustomerCard(1 + index,name)); index++; } public void printAllInfo() { for(CustomerCard cc : customers){ System.out.print("ID =" + cc.id + ","); System.out.println("名前 =" + cc.name); } } } class CustomerCard { String name; int id; public CustomerCard(int id,String name){ this.name = name; this.id = id; } public String getName(){ return this.name; } }

    • ベストアンサー
    • Java
  • java,Exception処理についてです。

    このプログラムからこういうことをしたいのですが。。。 ●RuntimeException(非チェック例外)を使ったエラー処理  現状の実装ではaddCustomerCardを5回までしか呼び出すことができない。  6回目の呼出しではプログラマがやってはいけない例外が発生する。  (たぶんArrayなんとかException)    これを6回目の呼出しであることを明示的にチェックし、自らが生成した  RuntimeExceptionをスローするようにしたいです。   ●Exceptionを使ったエラー処理  RuntimeExceptionをExceptionに変える。このときmainメソッドでも  対応が必要になるので、調査して対応を加えなさい。ただし、mainメソッド  にthrows句をつけづにしたいです。  mainメソッドでは受け取った例外のメッセージを標準出力に表示し、  プログラムを終了する。 public class CustomerCard { String name; int id; public CustomerCard(int id,String name){ this.name = name; this.id = id; } public String getName(){ return this.name; } 12 } public class CustomerManager { public static void main(String[] args){ CustomerManager manager = new CustomerManager(); manager.addCustomerCard(1, "山田一郎"); manager.addCustomerCard(2, "鈴木太郎"); manager.addCustomerCard(3, "田中次郎"); manager.printAllInfo(); } private CustomerCard[] customers = new CustomerCard[5]; private int index = 0; public void addCustomerCard(int id,String name){ customers[index] = new CustomerCard(id,name); index++; } public void printAllInfo() { System.out.print("ID =" + customers[0].id + ","); System.out.println("名前 = " + customers[0].name); System.out.print("ID =" + customers[1].id + ","); System.out.println("名前 = " + customers[1].name); System.out.print("ID =" + customers[2].id + ","); System.out.println("名前 = " + customers[2].name); } } 以下が現在までの処理結果です。 ID =1,名前 =山田一郎 ID =2,名前 =鈴木太郎 ID =3,名前 =田中次郎 以上何卒宜しくお願い致します。

    • ベストアンサー
    • Java