- - PR -
ファイル入力時の項目切出しについて
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-05-25 09:02
JDK1.4からはperl似の正規表現が使えます。(APIドキュメントに詳細がかかれてます) また、http://jakarta.apache.orgでもOROやRegexpなどPerl似の正規表現が使えるパッケージをダウンロードできます。 | ||||
|
投稿日時: 2002-05-25 15:52
う〜ん。
固定長フォーマットデータを自分自身で処理するオブジェクト…ってなんだかなぁと思ってしまいますが…。
文字を頭からかじってくなら、こんなんつこたほうがよくないすかねぇ。 # あ、sr.read の返り値を見て UnexpectedLineLengthException とかでも # 投げてやるべきですけどね。 [ メッセージ編集済み 編集者: しょむ 編集日時 2002-05-25 16:01 ] | ||||
|
投稿日時: 2002-05-25 20:33
しょむさん、ありがとうございます。
StringReader クラスの存在を知らなかったのですが、 確かにこの対応がスマートな気がします。 ところで、 > 固定長フォーマットデータを自分自身で処理するオブジェクト…ってなんだかなぁと思ってしまいますが…。 とあるんですが、自分自身で処理しなくても他にも簡単な方法があるでしょ、 という意味でしょうか。でしたら教えてください。 例えば出力する場合でも、Cの場合は fwrite で、構造体をそのまま吐いて 固定長フォーマットになるし、読むときも fread で、構造体に入込むだけですよね。 そういう手段がやっぱり提供されてるんですか。 | ||||
|
投稿日時: 2002-05-25 23:35
しょむさんへ
横から失礼します。私もちょっと質問させていただきますね。 > 固定長フォーマットデータを自分自身で処理するオブジェクト…ってなんだかなぁと思ってしまいますが…。 後学のために、「なんだかなぁ」と思う理由を教えていただけないでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: H2 編集日時 2002-05-25 23:37 ] | ||||
|
投稿日時: 2002-05-26 01:57
私もおそらく、しょむさんと同じ考えです。
JavaにはそもそもSerialize機能が用意されているので、非Javaアプリケー ションとデータをやり取りするのでなければ、各オブジェクトがファイルへの 読み書きをわざわざ自分で処理する必要はありません。 (C/C++で構造体を生で読み書きしたら、カンペキに機種依存しちゃいます) 他のプラットフォームとのデータやり取りなら、java.io.*に習って固定長 フォーマットを読み書きするReader/Writerを作った方が汎用性がでるのは確 かです。 あとはまあ、オブジェクト指向データベースでも使うのが一番スマートでし ょうけど。 | ||||
|
投稿日時: 2002-05-26 19:07
> 固定長フォーマットデータを自分自身で処理するオブジェクト…ってなんだかなぁと思ってしまいますが…。
それは しかたがないのでは。 文字列の内部表現が ファイルのバイト並びと違う言語なのだから。 あるいは、非オブジェクトの世界から取り込んで、オブジェクト化 する関所の処理だから、普通ぽく見えなくて当然でしょう。(汚れ役です) 冗談では、COBOL固定長処理を再現するモジュールを作り 利用する。Java で書いても 実は COBOL とか。 | ||||
|
投稿日時: 2002-05-26 21:27
へげもんさんへ
私また舌足らずでした.バッチの中間ファイルを目視確認したり, sort ユーティリティを用いたりしたいので,テキストファイルを 作りたいのです. で,C言語だったら…と私が言ってるのですが,ここで言ってる構造体の 要素は全て,char 型です.COBOLも同様で9タイプやXタイプですね. なので,機種依存がないような構造体しか使ってないことを想定しています. char 型だったらパディングとか機種依存じゃないですよね.これも勘違い? java の serialize は本で読んだのですが,writeObject で吐き出すところは 確認したのですが,これだと固定長(あるいは区切り文字あり可変長)テキストファイル って作れるのでしょうか.別に固定長テキストでなくても,java アプリ同士で 連携するには十分なんですが. それと, > java.io.*に習って固定長フォーマットを読み書きする > Reader/Writerを作った方が汎用性がでる と言われている方法とはどれのことを指しているのでしょう? へげもんさんに以前書いていただいたソースでしょうか. java は初学で,どうも説明が拙くなってしまい,申し訳ありません. | ||||
|
投稿日時: 2002-05-26 22:27
「なんだかなぁ」の理由は、まぁ、へげもんさんがゆーたはるようなことですわ。他に簡単な方法があるということではなく。
Java 的には、serialize によってファイルなる実体との対応をとるべきだと思うんですが、固定長フォーマットの文字列なんてものじゃないと初期化できない Object ってどうなの?ということです。 StringBraker sb = new StringBreaker(line); sb.setParameters(target, "3, Param1, 5, Param2, 2, Param3"); とかやると、 target.setParam1(getNext(3)); target.setParam2(getNext(5)); target.setParam3(getNext(2)); みたいにして呼び出してくれるような解析器を作るのがスジかなぁと。 それからたいきさんへ。 java の char は 2byte です。 日本語だろうがASCIIだろうが、1文字=2byte です。 ファイルがシフトJISだったりしたら文字数がくずれます。 注意してください。 byte でとるなら、FileInputStream で byte[] でとってきて、 byte[] のまま切り出し処理を行い、new String(byte[], String encoding) を使いましょう。使いましょう。 | ||||
