• 締切済み

ファイルから文字を読みとる。

JAVAを勉強中でファイル入出力で困っているので教えて下さい。 あるファイル(sample.txt)があるとします。 [sample.txt] (0,0) (10,20) このファイルは(x座標,y座標)のフォーマットで1行に1座標が書き込まれているとします。 ここからx座標、y座標をそれぞれ変数x,yに代入することはできるのでしょうか? C言語だと ("%d,%d",&x,&y)のような形でそれぞれ読み書きできたと思うのですが、 while((x_data = input.readLine()) != null){  y_data = input.readLine();  area_data.addElement(new Area(x_data,y_data)); } というかたちで 0 0 10 20 と1行に1文字ずつしか読み書きできません。 ご存じの方は是非教えて下さい。 また、JAVAを勉強するためのおすすめサイト、書籍がありましたら教えて下さい。

  • a-k-a
  • お礼率43% (77/176)
  • Java
  • 回答数3
  • ありがとう数1

みんなの回答

  • nuki
  • ベストアンサー率30% (6/20)
回答No.3

J2SE 5.0ですと、 ご所望のscanfの代わりはjava.util.Scannerで実装されているようです。 まだ、私は試したことがありませんので、C言語同様の使い勝手かどうかは不明ですが。

  • K-Nagisa
  • ベストアンサー率0% (0/0)
回答No.2

#1 の者です~。 出力に関しては、お礼に書いてあるとおりで問題ないと思いますよ。 x = br.readLine(); の左辺とか、タイプミスが結構ありましたが^^ あと、少し思ったのですが、座標を「(X, Y)」の形式でファイルに記録 することは本当に必要ですか? 単純に「X, Y」のようにコンマ区切りか、「X Y」のようにスペース区切り でもよい気がします。 もしこれでも良ければ、java.util の StringTokenizer を使えば、 もっと簡単に読み取れます。 ちなみに結城さんの本は、友達にも強く勧めています^^

  • K-Nagisa
  • ベストアンサー率0% (0/0)
回答No.1

こんにちは! StreamTokenizer を利用する方法です。 java.io をインポートしてください。 try { FileReader r = new FileReader("sample.txt"); StreamTokenizer st = new StreamTokenizer(r); st.whitespaceChars('(', ')'); st.whitespaceChars(',', ','); while (st.nextToken() != StreamTokenizer.TT_EOF) { double x = st.nval; st.nextToken(); double y = st.nval; System.out.println("x = " + x + ", y = " + y); } } catch (Exception e) { e.printStackTrace(); } 私は、結城浩さんの「Java 言語プログラミングレッスン」で Java を学びました。 http://www.hyuki.com/jb/index.html

a-k-a
質問者

お礼

ありがとうございます。 実行できました。SUNのAPI仕様を見てioっぽいなとは思ったんですが、多くて(^_^;) 勉強になりました。 結城さんの本はperlでお世話になりました。 「独習」と悩みました。そのときは目次をみてもさっぱりだったのですが、また本屋で見てみようと思います。 あと、書き込みなんですが、 System.out.print("x値を入力 : ");     x = br.readLine(); System.out.print("y値を入力 : ");     y = br.readLine(); x = Integer.parseInt(x_data); y = Integer.parseInt(y_data); として、 PrintWriter output = 続き略。 for(int i=0; i < area_data.size(); i++){   output.println("("+area_data.elementAt(i)).getX()+"," ((Area)rea_data.elementAt(i)).getY()+")"); }output.close(); 注:)getX(),getY()はxとyをreturnします。 とすればよいのでしょうか? なにか抜けてる&スマートではない気がするのですが。

関連するQ&A

  • 沢山のテキストファイルを一つに

    下のように、Testフォルダに Area1、Area2・・・とフォルダがあり、 その中に、Sample.txtがあります。 C:\Test\Area1\Sample.txt C:\Test\Area2\Sample.txt C:\Test\Area3\Sample.txt ・ ・ ・ C:\Test\Area30\Sample.txt それぞのフォルダのSample.txtは "1234567890.123" "2345678901.234" "3456789012.345" . . . のように、数桁の数字が数百行並んでいます。 例えば、 Area1\Sample.txt に100行、 Area2\Sample.txt に200行、 Area3\Sample.txt に150行あるとします。 これを、 1~100行にArea1\Sample.txtの内容を、 101~300行にArea2\Sample.txtの内容を、 301~450行にArea3\Sample.txtの内容を、 として、Area30までのSample.txtを並べた 一つのテイストファイルに書き直したいのですが、 何しろ沢山あるので、一つ一つ開いてコピぺでは、 書き落としなども心配ですし、毎回大変時間が掛かります。 簡単に並べて書き出す方法はないでしょうか。 Excel等を使ってできないでしょうか。 宜しくお願いします。

  • bat(バッチ)ファイルで文字入力受付・ファイルへ書込み

    急遽、仕事でバッチファイルを作成する必要がでてきました。 処理はそれほど複雑ではないのですが、コマンドプロンプトについてはまるっきりの初心者でして、困っております。 本来ならば、質問する場合でも基本的な事から調べて部分的に尋ねるべきなのですが、どうしても緊急で必要になるため恥ずかしながら投稿させていただきました。 コードの書き方・例について、皆様お知恵を貸してください。 求めているのは以下の処理です。 1.半角アルファベット1文字の入力を受け付ける(a~zまたはA~Z) 2.Sample.txtの中を検索し、Input= となっている行を見つける。 3.Input=A_input のように、1.で入力を受け付けたアルファベットをInput=の末に挿入、後に_inputと繋げて表記する。 4.Sample.txtを保存し、バッチ処理終了。 Sample.txtは以下のような具合のファイル ************************* Sample.txt 作者:酸 振男 ************************* Date=0529 Level=help Input= Tel=0120999999 以下続く... Input= の行は、ファイル全体でひとつしかないものとします。 Sample.txtのPathは、C:\age\Sample.txt とします。 可能であれば、アルファベット入力の際に1文字以上入力された場合は、「正しく1文字いれてください」と表記を出して、再入力を促す処理があれば、と思っています。 どうか、よろしくお願いします。

  • VBAで2変数の差分を取る方法

    txtファイルをOpenステートメントで開き、Line Inputで文字列を入れた変数Xがあります。 それよりも新しいtxtファイルを同じように取り込んだ変数Yがあります。 例えばXの中身は500行でYは503行などに増えています。 この3行を抽出するにはどうすれば良いのでしょうか。

  • ファイル内のデータを1行削除する方法

    いつもお世話になります。 今、ファイル操作を勉強しています。 sample.txtに下記のデータが格納されています。 【sample.txt】 --------------------- yamada.txt | 29 suzuki.txt | 25 kitamura.txt | 30 endo.txt | 32 --------------------- char *name="suzuki.txt"; sample.txtのデータがchar nameと一致する、 ファイルの行を削除し、行を詰めたいのですが どうしたらいいのでしょうか? 結果として、sample.txtが、 --------------------- yamada.txt | 29 kitamura.txt | 30 endo.txt | 32 --------------------- のように、一致したsuzuki.txtの行が削除され、 行が詰められている状態にしたいです。 どうぞよろしくお願い致します。

  • Matlab 2行の行列をプロットしたいのですが

    こんにちは、Matlabを使い始めのものです。 二行の行列(2x10とか2x40など)にについて、一行目をx座標、二行目をy座標としてグラフ化したいのですが、うまくいきません。 自動的にx座標は列の番号となり、二つのグラフが現れてしまいます:y座標に一行目、二行目、両方がプロットされてしまいます。どうにか、一行目をx、二行目をy座標としてグラフ化できないでしょうか。おそらく、とても単純なことなのかもしれないのですが、どうしてもわからず、とても歯がゆい思いをしています・・・。どうかご教示ください。 何をしたいかといいますと、音声データをMatlabで取り込んだのですが、振幅データがずらっと並んだ、1x500000とかの行列が得られます。 これを、プロットすると、x軸はサンプル番号が並ぶわけですが、本当はx軸は時間であって欲しいため、音声データの行列にひとつ行を足して、時間軸を作ってあげました。つまり、今手元にあるのは、2x500000の行列で、一行目が時間、二行目が振幅となっています。これをx軸が時間軸、でy軸が振幅となるようにグラフ化してあげたいと考えています。 文章がわかり辛くて申し訳ないのですが、何卒よろしくお願いします。

  • C言語におけるtxtファイルの読み込みと出力

    環境:WinXP,Borland C++compiler 以下のようなプログラムを考えました。 ・sample.c #include <stdio.h> float func(float x,float y,float z); int main(void) { float x,y,z; scanf("%f",&x); scanf("%f",&y); scanf("%f",&z); printf("%f",func(x,y,z)); return 0; } float func(float x,float y,float z) { return x+y+z; }//ここまで。 例えば(x,y,z)=(1,2,3)と入力すると6が出力されます。 このプログラムを、任意のn組の(x,y,z)の記述されたテキストファイルを読み込んで出力outを計算し、別のテキストファイルにn組の(x,y,z,out)を書き込むようにするにはどのような変更を加えればよいのでしょうか。 具体例は以下のような感じです。用意しておいたinput.txtをsample.cで読み込んで計算し、また作成されていないoutput.txtに出力するのが目標です。 (n=3の場合) ・input.txt //x y z 1 2 3 1 8 9 -1 7 5 ・output.txt //x y z out 1 2 3 6 1 8 9 18 -1 7 5 11

  • htmlファイルの要素を別ファイルにしたい

    ローカルで利用するhtmlファイルを作成しています。 <input type="text" autocomplete="on" list="mylist"> <datalist id="mylist"> <option value="1行目"></option> ・ ・ <option value="200行目"></option> </datalist> datalistのoptionが200行以上あり、 HTMLに直接書いて管理するのがキツイと判断しました。 そこで、別のテキストファイルなどにし HTMLにChildを追加していけば良いのではないかと思ったのですが ローカルのテキストファイルが読めずに困っています。 最初の「require」で引っかかってしまうため上手くいきません。 要素を別ファイルに置いておき、参照できるような いい方法は無いでしょうか。 <script language="javascript"><!-- function TEST() { const fs = require('fs'); const readline = require('readline'); const rs = fs.createReadStream('data/List.txt'); const rl = readline.createInterface({ input: rs }); rl.on('line', (line) => { console.log(line);}); } // --></script> お手数をおかけしますが、回答よろしくお願いいたします。

  • 外部テキストファイルから座標データを読み込み,その座標にムービークリップを配置する

    タイトル通りなのですが, 外部テキストファイルから座標データを読み込み, その座標にムービークリップを配置させたいと考えています. 外部テキストファイルは name=0, x=10, y=20 &name=1, x=11, y=21 &name=2, x=12, y=22  ・      ・   ・  ・      ・   ・  ・      ・   ・ として,1行ごとに名前と座標のデータがあります. 行数は可変で,行数だけムービークリップを配置したいと考えています. いろいろ調べてsplit関数などを使えば1行ごとに読み込めそうだということはわかりましたが, オブジェクト指向はほとんど使ったことが無いので悪戦苦闘しています(C言語はそれなりに使えます). どのようにすれば上記のようなプログラムをかけますでしょうか. どなたかよろしくお願いいたします. 環境 FLASH MX, WINDOWS XP

    • ベストアンサー
    • Flash
  • 基本なのですが・・(ファイルのデータで計算したい)

    txtファイルの中に、j、x、yという変数の数値データの羅列がある時、BASICなら INPUT #1 J#,x#,y# と書いて、j,x,yの数値データをパソコンの中に収納できるじゃないですか。 そして、例えばxの値をそれぞれ対応するyの値に掛けた 答えをzとして新しいファイルにSAVEするという事がBASIC ならできます。 でも、C言語では、そういうプログラムの説明が載ってないんです!! ただ、ファイルの中身を画面上に出すだけのプログラムでなく、ファイルの中のデータを用いてパソコンに計算を させる事ができるプログラムの書き方が載っているWEBか、 プログラム自体を教えて下さい。お願いします。

  • Perlでcsvファイルを読み込んで計算する方法(初心者です)

    csvファイルに以下のようなデータが入っています。 ID,X座標,Y座標 0,1.22,3.42 1,3.24,4.52 2,5.34,7.87 (こういうのがID1000までずっと続きます) このデータから一行ずつ,Y座標-X座標を計算させて出力したいです。 とても困っているので解答お願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう