テキストファイル入出力
複数のデータ/行
データは図1のように1行に複数のものが書かれていることがある。

図1のデータファイルでは、データは/で始まる行の次の行から1行に3つずつ空白(半角英数字の空白文字)で区切って並べられている。データの最後は/で始まる行によって示されている。上の形式のデータファイルを読み込む例を図2に示す。

図2のプログラムでは、文字列型変数ssに読み込んだ文字列データからメソッドsubStrExtrによって必要なデータを取り出している。メソッドsubStrExtrは次の形で用いる。
subStrExtr(文字列, pos);
文字列において、各データは空白(半角英数字空白文字)で区切られているものとし、pos番目のデータがsubStrExtrの値として返される。このメソッドはMyStrMngrクラスのメソッドとして宣言されているものである(リスト1)。
リスト1
|
class MyStrMngr { int seekNBlnk ( String
str, int a ) {
int v = -9; if
((a+1) > str.length()) {
v = -9; }
else {
boolean ck = true;
while (ck) {
if (str.charAt(a) != ' ') {
v = a;
ck = false;
} else {
if ((a + 1) >= str.length()) {
v = -9;
ck = false;
} else {
a++;
}
}
} }
return v; } int seekBlnk ( String str,
int b ) {
int v = -9; if
((b+1) > str.length()) {
v = -9; }
else {
v = str.indexOf(' ', b); if (v < 0) v = -9; }
return v; } String subStrExtr ( String
str, int n ) {
String s = "";
int start = 0;
int end = -9;
n++; if
((str.length() > 0) && (n >= 1)) {
end = 0;
for (int i=1; i<=n; i++) {
if (end >= 0) {
start = seekNBlnk(str, end );
if (start >= 0) {
end = seekBlnk( str, start );
if (end < 0) end=str.length();
}
else {
end = -9;
}
}
} } if
(end > -9) s = str.substring(start, end );
return s; } } |
上の例のプログラムを実行すると図3のフレームが表示される。

GOボタンのクリックで図4の入力テキストファイル名の指定を求めるダイアログが表示される。

入力ファイル名の設定後、「開く」ボタンをクリックすると、書き出し用テキストファイルの名前の設定を求めるダイアログが表示される(図5)。

書き出し用テキストファイルの名前を設定して「保存」ボタンをクリックすると、図4で設定したファイルからデータが読み込まれて、その値が図5で設定したファイルに書き出される。すべてのデータの処理が終了するとプログラムの実行は終了する。図1の入力データに対する出力ファイルの内容は図6のようになっている。

上のサンプルプログラムのファイルを圧縮ファイルCkTxtRdWr.ZIPとしてまとめた。CkTxtRdWr.ZIPはここをクリックしてダウンロードできる。ダウンロードして解凍すると作成されるフォルダCkTxtRdWrにあるプロジェクトファイルCkTxtRdWr.jpxをダブルクリックなどによりJBuilderで開くと実行することができる。
なお、リスト1のようなプログラムは他のプログラムでも用いる可能性が高いのでパッケージとしてまとめておくと便利である。このことについては別に説明する。