質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2887閲覧

OrangeSignalCsvで空列を挿入したい。

ken2001

総合スコア16

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2016/03/15 07:25

OrangeSignalCsvで空列を挿入したい。

OrangeSignalCsvのColumnNameMappingBeanListHandlerを使用し以下のようにCSVの出力を行っているのですが
空白列を挿入したいときはどのように設定を行うのでしょうか。

lang

1ColumnNameMappingBeanListHandler m = new ColumnNameMappingBeanListHandler<TestCsvBean>(TestCsvBean.class); 2m.column("テスト1","test1"); 3m.column("テスト2","test2"); 4//空白列 5m.column("テスト3","test3"); 6//空白列 7//空白列 8m.column("テスト4","test4"); 9 10

以上、よろしくお願いします。

argius👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CSVライブラリがどんな物かなーと思いつつ確認してみました。
「ColumnNameMappingBeanListHandler」で複数のヘッダ行を空文字にするのは無理のようでした。
ヘッダ出力なしの場合はに「ColumnPositionMappingBeanListHandler」を使う感じで可能でした。

サンプルソース

java

1package sandbox.csv; 2 3import java.io.IOException; 4import java.io.StringWriter; 5import java.util.ArrayList; 6import java.util.List; 7 8import com.orangesignal.csv.Csv; 9import com.orangesignal.csv.CsvConfig; 10import com.orangesignal.csv.handlers.ColumnPositionMappingBeanListHandler; 11 12public class ColumnPositionMappingBeanListHandlerSample { 13 public void execute3() { 14 // 列位置設定 15 ColumnPositionMappingBeanListHandler<TestCsvBean> m = new ColumnPositionMappingBeanListHandler<TestCsvBean>( 16 TestCsvBean.class); 17 m.header(false); 18 m.addColumn("test1"); 19 // 空行 20 m.addColumn("dummy1"); 21 m.addColumn("test2"); 22 // 空白列 23 m.addColumn("dummy1"); 24 // 空白列 25 m.addColumn("dummy1"); 26 m.addColumn("test3"); 27 m.addColumn("test4"); 28 29 StringWriter stringWriter = new StringWriter(); 30 stringWriter.toString(); 31 32 // 値生成 33 List<TestCsvBean> customers = new ArrayList<>(); 34 for (int i = 0; i < 10; i++) { 35 TestCsvBean bean = new TestCsvBean(); 36 bean.setTest1(i+ "112"); 37 bean.setTest2(i+ "113"); 38 bean.setTest3(i+ "114"); 39 bean.setTest4(i+ "115"); 40 // ダミーには値を設定しない。 41 customers.add(bean); 42 } 43 // 出力 44 try { 45 Csv.save(customers, stringWriter, new CsvConfig(), m); 46 } catch (IOException e) { 47 // FIXME 48 e.printStackTrace(); 49 } 50 // 51 System.out.println(stringWriter.toString()); 52 } 53} 54 55class TestCsvBean { 56 57 private String test1; 58 private String test2; 59 private String test3; 60 private String test4; 61 private String dummy1; 62 63 public String getTest1() { 64 return test1; 65 } 66 67 public void setTest1(String test1) { 68 this.test1 = test1; 69 } 70 71 public String getTest2() { 72 return test2; 73 } 74 75 public void setTest2(String test2) { 76 this.test2 = test2; 77 } 78 79 public String getTest3() { 80 return test3; 81 } 82 83 public void setTest3(String test3) { 84 this.test3 = test3; 85 } 86 87 public String getTest4() { 88 return test4; 89 } 90 91 public void setTest4(String test4) { 92 this.test4 = test4; 93 } 94 95 public String getDummy1() { 96 return dummy1; 97 } 98 99 public void setDummy1(String dummy1) { 100 this.dummy1 = dummy1; 101 } 102 103}

サンプルソースコンパイル設定

gradle

1apply plugin: 'java' 2 3// set encoding 4def defaultEncoding = 'UTF-8' 5tasks.withType(AbstractCompile).each { it.options.encoding = defaultEncoding } 6tasks.withType(GroovyCompile).each { it.groovyOptions.encoding = defaultEncoding } 7 8repositories { 9 jcenter() 10} 11 12dependencies { 13 compile 'com.orangesignal:orangesignal-csv:2.2.1' 14 15 testCompile 'junit:junit:4.12' 16}

投稿2016/03/15 09:39

umed0025

総合スコア851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken2001

2016/03/16 01:17

自分も空を返すemptyをBeanに用意して m.column(" ","empty");のような感じやってみていたのですが columnの第一引数をMAPのキーに使用しているようで 同一のヘッダーは指定不可能でした。 ColumnPositionMappingBeanListHandlerを使用し データの一行目にヘッダー設定してから出力を行うか 別途ヘッダーを設定したByteArrayOutputStreamに追記するかで 対応したいと思います。 わざわざ、調べて回答して頂きありがとうございました。
ken2001

2016/03/16 02:28

以下のような感じで実装致しました。 ```lang-java ByteArrayOutputStream stream = new ByteArrayOutputStream(); //ヘッダー出力 List<String[]> headerList = new ArrayList<String[]>(); List<String> headerDataList = new ArrayList<String>(); headerDataList.add("テスト1"); headerDataList.add(""); headerDataList.add("テスト2"); headerList.add((String[]) headerDataList.toArray(new String[]{})); Csv.save(headerList, stream, new CsvConfig(), new StringArrayListHandler()); //データ出力 ColumnPositionMappingBeanListHandler m = new ColumnPositionMappingBeanListHandler<TestCsvBean>(TestCsvBean.class); m.header(false); m.addColumn("test1"); m.addColumn("empty"); m.addColumn("test2"); Csv.save(dataList, stream, cfg, m); ``` ありがとうございまいした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問