- - PR -
String#split() を使ってCSV処理
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-06-11 11:48
JDK1.4 から追加された String クラスの split() メソッドを使って、
CSV ファイルの処理をしようとしているのですが、正規表現が不得意のためうまくいきません。 (web で Perl などの CSV 用の正規表現が見つかりますがそのままでは動かず、どう直せばいいかも素人過ぎてわかりません) 期待する動作は以下です。 元データ: field1,"field,2","field""3""",,field5 String[]: [field1][field,2][field"3"][][field5] |
|
投稿日時: 2003-06-11 14:33
カンマじゃなくってメタキャラ(例えば\tとか)だったら、一発だったのにね…。
正規表現(Perl)結構詳しい方だと思うのですが、そのパターンはお手上げです。 頑張ってください(現時点で200人の人が素通りしていることを考えると、やっぱ並じゃないのかも)。 |
|
投稿日時: 2003-06-11 15:03
練習にエディタの正規表現で当ててみました
〜,"","", の0文字項目が無いと仮定してでは。 ””を考えずに ([^",]*), 次に、”〜”を追加して ("[^"]+"|[^",]*), 次に、””内の””を追加して ("([^"]+|"")+"|[^",]*), これで、例題のテキストは順に当たるようになりました。 1、行末にカンマを付加 2、上の正規表現で切り出し 3、項目内の””を1つに 頭から1文字づつ解析するのが漢(おとこ)かも。 --------------------------------------------- (?="(""|[^"])+"|[^,]*), あたりでしょうか?エディタの正規表現で確認しましょう。 [ メッセージ編集済み 編集者: MMX 編集日時 2003-06-11 16:53 ] |
|
投稿日時: 2003-06-12 18:20
> (?="(""|[^"])+"|[^,]*),
> あたりでしょうか?エディタの正規表現で確認しましょう。 正規表現に疎くて恐縮ですが、 String::split の正規表現はご使用のエディタと同じ処理系?なのでしょうか? 残念ながら期待するようにうごきませんでした。 > 頭から1文字づつ解析するのが漢(おとこ)かも。 やっぱそうですかねぇ。 そういうクラスはどこかに落ちてそうですが、 標準の String クラスのメソッドで出来たらスマートだなぁと思った次第です。 |
|
投稿日時: 2003-06-12 20:17
String クラスの split() メソッドを使うのではなく、
「java.util.regex」パッケージのクラスを利用してみてはいかがでしょうか? http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values のような正規表現でCSVのデータ部分にマッチしますので、 それを String[] に格納していけばいいと思いますが。 [ メッセージ編集済み 編集者: yamamoto 編集日時 2003-06-12 21:39 ] |
|
投稿日時: 2003-06-13 19:28
"aaa,bbb,ccc".split('(?="(""|[^"])+"|[^,]*),' );
/* * Created on 2003/06/13 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ /** * @author サミュエル・L・ジャクソン * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class testsplit { public static void main(String[] args) { System.out.println("aaa,\"b\"\"bb\",ccc".split("(?=\"(\"\"|[^\"])+\"|[^,]*),")[1].replaceAll("\"\"","\"")); // '(?="(""|[^"])+"|[^,]*),' ); // } } // Perl5 互換の正規表現の流通性はよいです。 // さて、大量データに対応した書き方はどう?そこまで心配しなくてよいか |
1
