質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

3653閲覧

javaでcsvファイルの値を利用して計算したい(その他もある)

gamp

総合スコア6

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/04/27 15:12

編集2022/01/12 10:55

###実現したいこと
1 Program の PutPrice Method で、金額が5個の固定になっているが、CSVFile から値を読む形にする。個数は、任意とする。

2 Display 上に、左半分と右半分に2つの Text 表示領域を作成して、左側には、元の Data、右側には出力の Data を表示する。

3 2 の表示で、左半分の表示領域に、「開く」「開始」「終了」のボタンを作成する。「開 く」ボタンで、元値 File を選択し、左の表示領域に表示する。「開始」ボタンで、計算を始め、結果を右側 の表示領域に表示する。「終了」ボタンで Program を終了する。

4 表示領域を一つにして、「開く」「開始」「終了」ボタンを作成する。「開く」ボタンで、元値 File を選択し、表示領域に表示する。「開始」ボタンで、出力 File を設定し、計算を始め、結果を画面に 表示すると同時に出力ファイルを作成する。「終了」ボタンで Program を終了する。

###発生している問題・エラーメッセージ
色々探してみてCSVfileの値を読み込んでカンマ区切りで配列に格納する方法なのかと思い試してみたんですがどれもエラーがでて上手くいかずどうして良いかわからなくなってしまいました。とりあえず実現したいことの1をできるようになりたいです。まだプログラム初心者でヒントや参考になるサイトなどがあれば教えて欲しいです。

###該当のソースコード
CalculatePrice.javaファイル

class CalculatePrice {
private int workArea;
private boolean available = false;

//synchronized指定。pricePutメソッドが終了するまで、 //メソッドが属するオブジェクトはアクセスされない public synchronized void pricePut(int price) { while (available == true) { try { wait(); //availableがtrueの間、wait } catch (InterruptedException e) { } } //workAreaに値をセットする処理 workArea = price; available = true; //availableにtrueを代入した後wait状態のスレッドを解除 notifyAll(); } //synchronized指定。priceGetメソッドが終了するまで、 //メソッドが属するオブジェクトはアクセスされない public synchronized void priceGet() { while (available == false) { try { wait(); //availableがfalseの間、wait } catch (InterruptedException e) { } } //workAreaから値を抜出す処理 System.out.println("課税後価格は" + workArea * 1.05 + "円です。"); available = false; //availableにfalseを代入した後wait状態のスレッドを解除 notifyAll(); }

}

PutPrice.javaファイル

class PutPrice extends Thread {
private CalculatePrice cp;
private int[ ] price = {100, 200, 300, 400, 500};

//コンストラクタ内で引数に指定されたオブジェクトcpを代入 public PutPrice(CalculatePrice cp) { this.cp = cp; } public void run() { for (int i = 0; i < 5; i++) { //オブジェクトcpのpricePutメソッドを実行 cp.pricePut(price[i]); try { sleep((int)(Math.random() * 100)); } catch (InterruptedException e) { } } }

}

GetPrice.javaファイル

class GetPrice extends Thread {
private CalculatePrice cp;
//コンストラクタ内で引数に指定されたオブジェクトcpを代入
public GetPrice(CalculatePrice cp) {
this.cp = cp;
}

public void run() { for (int i = 0; i < 5; i++) { //オブジェクトcpのpriceGetメソッドを実行 cp.priceGet(); } }

}

ExThread5.javaファイル

public class ExThread5 {
public static void main(String[] args) {
CalculatePrice cp = new CalculatePrice();
//オブジェクトcpを引数にスレッドオブジェクトppの生成
PutPrice pp = new PutPrice(cp);
//オブジェクトcpを引数にスレッドオブジェクトgpの生成
GetPrice gp = new GetPrice(cp);

pp.start(); //スレッドを実行可能状態にする gp.start(); //スレッドを実行可能状態にする }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2017/04/27 15:15

…どうしろと?
swordone

2017/04/28 01:38

ソースコードのマークダウン、そしてエラーになるならどこがエラーになるかの提示をお願いします。
umyu

2017/04/28 04:58

まず、コードを一切修正せずに現状のプログラムの動作を理解してください。消費税の算出から推測ですが、http://www.javaroad.jp/java_thread4.htm このサイトのコードを流用したと思われます。
umyu

2017/04/28 05:19

・PutPrice/GetPriceクラスのrunメソッドにて for (int i = 0; i < 5; i++) とCalculatePriceから暗黙的に渡される要素数を5と仮定しています。 そのため、ファイルを読み込む処理以外にループの終了条件も変更しないといけません。 以下は確認ですが Producer-Consumerパターンなので、BlockingQueueを使用するのはダメなのですか?
guest

回答1

0

Javaには標準でCSVを読み書きするライブラリが用意されていません。実現したいことに書いてあるCSVFileというのが一体何を示しているのかわからないと何をしたいのかがわかりません。ソースコードにはCSVFileというのが一つも無いため、推測が全くできません。

CSVでフォーマットされたファイルを読み込むことを表すとしても、多くの問題があります。

  • CSVの読み書きする標準ライブラリがないため、CSVのライブラリを用意するか、CSVを読み込むクラスを独自に作成する必要があります。CSVのライブラリは数多く存在し、どれを採用するかで書き方も変わってきます。
  • CSVと単純に標準規格(RFC4180)に準拠している場合もあれば、独自の場合もあります。改行はCR+LFなのかLFのみなのか?,が含まれるフィールドは"で囲むのか?では、"が含まれるフィールドは""と二つ並べることでエスケープするのか?\でのエスケープはできるのか?そもそも文字コードはUTF-8かWindows-31J(日本語環境Excelの標準)か?全角カンマ","もフィールド区切りと見なすか?フィールドに改行を含めることができるか?など、多数の実装があります。どこまで対応するかによって、ライブラリの選択や、オプション等が変わってきます。
  • CSVのフィールドはどのように書き込まれるのでしょうか?例えば、最初のレコードはヘッダであり、無視すべきかも知れません。逆に、最初レコードにすべて価格が全て載っているかも知れません。各レコードは「製品,価格,税率」かも知れません。また、価格の単位も1円単位とは限らず、千円単位だったり、3.14を3円14銭として計算すべきかも知れません。千二百五十二円と漢数字で書いてある可能性すら有ります。どのようにレコードがあって、どの部分を取り出すのかわからなければ、何を実装すべきかがわかりません。
  • サイドに、そのCSVファイルはどこにあるのでしょうか?ファイルのパスをどうやって決めるのかがわからなければ、ファイルを読み込むことすらできません。

以上のことから、1.を解決するには、まず、詳細を確認することです。CSVFileとは何を表すのか、CSVファイルを読み込むことだとしても、CSVファイルはどんな形式でどのように価格が書き込まれているのか、また、そのファイルはどうやって見つければ良いのか、そういった点がわからなければどうしようもありません。それがわかって、次に、CSVライブラリの選定、または、独自にCSV読み込みクラスを作るのかが決まります。

投稿2017/04/29 03:50

raccy

総合スコア21733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問