- PR -

固定長ファイルからの切り出し

1
投稿者投稿内容
はせきち
会議室デビュー日: 2005/04/07
投稿数: 5
投稿日時: 2005-04-07 18:56
固定長のテキストファイルより、レイアウト分割したいのですが、
SubStringですと文字数分割の為、全角半角混在の時にズレが
生じます。
なにかいい方策はありませんでしょうか?
[テキストファイル]
123あいう    ABCDEF
↑    ↑   ↑
|    |   └ CHAR(6)
|    └ CHAR(14)
└ CHAR(3)

 それぞれをバイトで分割したいです。SubStringですとCHAR(14)の部分で"ABCDEF"
も含まれてしまいます。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-04-07 19:31
1. InputStream をかまして先頭から指定バイト数を読み出しつつ、String にしていく。

または、

2. テキストファイル(SJIS とか EUC かな?)を ISO-8859-1 と見なして強制的に String を組み立てる。そんでもって String#substring() を使う。その後、byte[] にして再度、正しい charset を指定して String を組み立てる。
はせきち
会議室デビュー日: 2005/04/07
投稿数: 5
投稿日時: 2005-04-07 19:48
「未記入」さん、早速のレスありがとうございました。

すいません、こちらの環境が抜けてましたので
追記します。

JAVA SDK    1.4.2
Tomcat     5.0.28
サーバーOS RedHat Enterprice 3 ES
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2005-04-07 20:55
適当に書いてみました。
参考にしてみてください

コード:
		String fixSizeData ="123あいう    ABCDEF";
		try {
			byte[] bytes = fixSizeData.getBytes("MS932");
			byte[] first = new byte[3];
			byte[] second = new byte[14];
			byte[] third = new byte[6];
			int findex = 0;
			int sindex = 0;
			int tindex = 0;
			for (int i = 0; i< bytes.length;i++){
				if(i< 3){
					first[findex] = bytes[i];
					findex ++ ;
				}
				else if(i< 17){
					second[sindex] = bytes[i];
					sindex ++ ;
				}
				else if(i< 23){
					third[tindex] = bytes[i];
					tindex ++ ;
				}
			}
			System.out.println("1列目[" +new String(first,"MS932")+ "]");
			System.out.println("2列目[" +new String(second,"MS932")+ "]");
			System.out.println("3列目[" +new String(third,"MS932")+ "]");
			
			
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

はせきち
会議室デビュー日: 2005/04/07
投稿数: 5
投稿日時: 2005-04-07 21:48
tetoさん
 丁寧なご回答ありがとうございました。
 早速試してみたいと思います。
はせきち
会議室デビュー日: 2005/04/07
投稿数: 5
投稿日時: 2005-04-18 17:18
tetoさん
 返答が遅くなりまして申し訳ありませんでした。
 tetoさんのサンプルコードで試してみたらバッチリOK
でした。
 遅ればせながら有難う御座いました。
1

スキルアップ/キャリアアップ(JOB@IT)