[Seasar-user:7593] Re: readXlsWriteDb でスペースを設定するには

o.h. [E-MAIL ADDRESS DELETED]
2007年 5月 11日 (金) 16:21:58 JST


長谷川です.

Koichi Kobayashi wrote:
>>
>> 1. Cell の文字列を trim する
>> 2. "" だったら null
>> 3. 引用符で囲まれたら strip する(エスケープ文字を考慮して)
> 
> 「エスケープ文字を考慮」とはどういう意味でしょう?
> Excel には引用符で囲まれていたら〜 という意識はないはず
> なので,例えば引用符を含んだ文字列を指定する場合でも
> [" a"b "] と記述することで,[ a"b ] と解釈されれば
> 十分な気もします.
>

タブとか改行をいれれたら便利かなと思いまして.
Excel のセルで改行自体はできたと思いますが、確か LF になってた
ような気がします.

>> ぐらいの処理になれば trimString の判断はいらないような気がします.
>>
>> ・[  ] -> trim -> null
>> 今まで通りの動作
>>
>> ・["  "] -> trim -> 引用符取り除く -> [  ]
>> スペースを返す
> 
> 実装の都合なのですが,最後に返したスペースを全然別の
> 場所でもう一度 trim するところがあるのです.
> 上記のような処理をしている場所は Excel から読み込んだ
> データを正規化している場所になります.
> その後,正規化されたデータを適切な型に変換する
> 場所があります.その段階でも,文字列データは
> trim され,空文字列は null になります.
> この部分は DB から読み込んできたデータにも
> 適用されますし,互換性を損なう可能性が高いので
> 手を加えることは避けたいです.
> そのため,なんらかの指定が必要となります.
> 

私も StringType(だったかな?)で trim してるなぁとは思ってたのですが
XmlReader#getValue を

public Object getValue(HSSFCell cell) {
	Object value = super.getValue(cell);
	if (value instanceof String) {
		value = QuotationConverter.strip(((String) value).trim());
	}
	return value;
}
#QuotationConverter は引用符関連の自作クラスです

ぐらいにしたらうまくいってたので.
#あれ?って感じですが

> なお,空文字列を null として解釈するのは Oracle が
> そういう動作をすることに対応したものだと思います.
> 

一応ターゲットは Oracle です

> 
> とりあえず,trimString が false の場合に限り,
> 
> 1. Cell の文字列を trim する
> 2. 引用符で囲まれたら strip する
> 3. "" だったら null
> 
> という対処をました.
> trimString が false なのに trim するのは
> いかがなものか? という気のせいがするものの,
> stripQuote のような引数をさらに追加するのは
> 避けたいのと,前述した後段の変換処理では
> trim しないという意味になっているので
> このままにしてあります.
> 
> 以下に SNAPSHOT を置いたのでご確認ください.
> 
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.4.13-rc2-SNAPSHOT/s2-framework-2.4.13-rc2-20070511.065300-4.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-extension/2.4.13-rc2-SNAPSHOT/s2-extension-2.4.13-rc2-20070511.065300-4.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-tiger/2.4.13-rc2-SNAPSHOT/s2-tiger-2.4.13-rc2-20070511.065409-4.jar
> 

申し訳ありません、確認にはいま少し時間を頂戴したく.
#確認できましたら報告いたします

以上.
-- 
_/_/
_/_/ mailto: [E-MAIL ADDRESS DELETED]
_/_/ (deprecated: [E-MAIL ADDRESS DELETED])
_/_/



Seasar-user メーリングリストの案内