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

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

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

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

Q&A

解決済

2回答

4237閲覧

java CSVの特定行のみ出力を行いたい

J91004933

総合スコア8

Java

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

0グッド

0クリップ

投稿2021/08/04 01:40

編集2021/08/04 04:38

前提・実現したいこと

CSVを読みこみ、特定行のみコンソールに出力を行いたいです。
現状コードはcvsのすべてを読み込むものになっております。
そのため、コンソールの出力結果は下記のようになっております。
この中で、2行目が1の値を持った行のみ出力を行いたいです。
よろしくお願い致します。

CSV記述内容
1列目 2列目
デヴィッド・J・リー 1
ジョン・ウィリアム・アンダーソン 1
マシュー・J・マーフィー 1
ライアン・マイケル・クーパー 1
マイク・ヴァン・ウィリス 1
ジョージ・アール・ウィルソン 1
ニック・シャム・スミス 1
トニー・L・メリル 1
トニー・C・ロー 1
ジャネット・レイン・ヤング 2
ジーン・ジョー・フィッツジェラルド 2
モーリン・リー・ダニエルズ 2

現状コンソール出力結果
1行目 2行目
デヴィッド・J・リー 1
ジョン・ウィリアム・アンダーソン 1
マシュー・J・マーフィー 1
ライアン・マイケル・クーパー 1
マイク・ヴァン・ウィリス 1
ジョージ・アール・ウィルソン 1
ニック・シャム・スミス 1
トニー・L・メリル 1
トニー・C・ロー 1
ジャネット・レイン・ヤング 2
ジーン・ジョー・フィッツジェラルド 2
モーリン・リー・ダニエルズ 2

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java

1import java.io.File; 2import java.io.FileReader; 3import java.io.IOException; 4 5public class java { 6 7 public static void main(String[] args) { 8 9 try { 10 11 File file = new File(new File(System.getProperty("user.home"), "Desktop"), "look.csv"); 12 file.mkdirs(); 13 14 if (file.exists()) { 15 16 FileReader filereader = new FileReader(file); 17 18 int data; 19 while ((data = filereader.read()) != -1) { 20 System.out.print((char) data); 21 } 22 23 filereader.close(); 24 25 } else { 26 System.out.print("ファイルが見つかりません"); 27 } 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } 31 32 33 } 34 35}

試したこと

while ((data = filereader.read()) != -1) の部分を、 for( int i=0; i<9; i++ ){ data.filereader(); }のように9行目までしか読み込まないように試みたのですが、エラーが起こってしまいます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jimbe

2021/08/04 02:29

ご質問のコード・ファイル・出力結果いずれにも CSV に関する事柄は見受けられません。 なぜ CSV というワードが出てくるのでしょうか。 (ご質問本文中は "CVS" となっていますが "CSV" の間違いですよね?)
J91004933

2021/08/04 02:58

誤字でした。 編集致しました。 ご指摘頂きありがとうございます。
Luice

2021/08/04 04:04

行と列がごちゃまぜになっていて、やりたい事がよくわからないです。
dodox86

2021/08/04 04:22

要望だけを書いて回答(コード)をもらえる訳では無いです。CSVファイルというもの自体は理解されているのでしょうか。CSVファイルとは、その名(Comma Separated Value)のとおり"一般的には"カンマ','で区切られたデータが1行ごとにあります。ご提示の「記述内容」では "1行目 2行目" "デヴィッド・J・リー 1" のようになっていて、','で区切られている訳でもなさそうだし、2行目とあるので、CSVなのかどうか分かりません。更に、CSVファイルであれば 1. 1行読む 2. 読んだデータを','で分割する。 3. 2つ目のデータが'1'なら出力する とコードを書けば良いだけの話です。
guest

回答2

0

ベストアンサー

入力ファイルの区切りは「,」ですか? それとも「連続するスペース」ですか?

Java

1import java.util.Scanner; 2import java.io.*; // File, IOException 3 4class Main { 5 public static void main(String[] args) throws IOException { 6 Scanner sc = new Scanner(new File("look.csv")); 7 while (sc.hasNextLine()) { 8 String line = sc.nextLine(); 9 String[] s = line.split(","); // or line.split("\s+") 10 if (s[1].equals("1")) System.out.println(line); 11 } 12 } 13}

追記
FileReader はファイルを文字単位で読み込むためのもの。
BufferedReader は行単位で読むために必要。

Java

1import java.io.*; // FileReader, BufferedReder, IOException 2 3class Main { 4 public static void main(String[] args) throws IOException { 5 BufferedReader br = new BufferedReader(new FileReader("look.csv")); 6 String line; 7 while ((line = br.readLine()) != null) { 8 String[] s = line.split(","); 9 if (s[1].equals("1")) System.out.println(line); 10 } 11 } 12}

理解できたかどうかのコメントをお願いします。

投稿2021/08/04 20:40

編集2021/08/05 00:10
kazuma-s

総合スコア8224

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

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

J91004933

2021/08/04 22:26

ご回答頂きありがとうございます。 入力ファイルの区切りは「,」です。
kazuma-s

2021/08/04 22:47

回答へのコメントをお願いします。 コードは理解できたのか? Scanner ではなく、BufferedReader を使いたいのか? 行単位の読み込みではなく、文字単位の読み込みをしたいのか? など
J91004933

2021/08/04 23:50

失礼いたしました。 BufferedReader を使って、行単位で読み込むことができたらと考えております。
J91004933

2021/08/05 03:11

追記頂きありがとうございます。 理解をするのに時間が掛かってしまいましたが… while ((line = br.readLine()) != null)⇒csvファイルを一行ずつ読み込む String[] s = line.split(",");⇒文字を,で区切る if (s[1].equals("1")) System.out.println(line);⇒もしcsvファイルの2列目の数値が1であれば出力するという理解だと思っております。 理解が足りていない点がありましたらご指摘頂けたらありがたいです。 実現したかったことも出来ました。 ありがとうございます。
guest

0

dodox86さんが書かれているようにCSVファイルの形式が不明ですが、look.csvの内容が
一行目 デヴィッド・J・リー, 1 (ここに見えないけど改行がある)
二行目 ジョン・ウィリアム・アンダーソン,1 (ここに見えないけど改行がある)
以下同様だとします。

この前提でファイルを読む一つの方法を書きます。

最初に読込んだ値を入れるために
private String csvMembersData[] = new String[3];
を準備します。なぜ「3」なのかは考えてみてください。

次に読込み部分は次のように変更
tryの前に次の2行を追加
String CSV_fileName = "look.csv";
String line;

そしてtry catchの中を以下に変更

try { //人名データの読込み BufferedReader bufferedReader = null; bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(CSV_fileName),"Windows-31J")); while ((line = bufferedReader.readLine()) != null) {     StringTokenizer st = new StringTokenizer(line, ",",true); csv_Separates(st); System.out.println("<" + csvMembersData[0] + ":" + csvMembersData[2] + ">"); } bufferedReader.close(); }catch

最後に、次を追加する。

public void csv_Separates(StringTokenizer st) { int stringCount = 0; //csvfileをカンマで分割する。 while (st.hasMoreTokens()) { csvMembersData[stringCount] = st.nextToken(); //内容表示用 System.out.println("< " + csvMembersData[stringCount]); stringCount++; } }

これで、一般的なCSVファイルは読込みできるはずです。

特定行を出力する方法は自分で考えてください。

頑張れはできます。

投稿2021/08/04 13:42

編集2021/08/04 22:00
senior_golfer

総合スコア264

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

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

jimbe

2021/08/04 14:22

> StringTokenizer st = new StringTokenizer(data, ",",true); data は int です。
senior_golfer

2021/08/04 14:31

ご指摘、ありがとうございます。
jimbe

2021/08/04 14:34

えぇと、String Data というお話ではありませんで、filereader.read() は 1 文字読み込みです。
kazuma-s

2021/08/04 21:18

String data; の data を int の -1 とは比較できません。
senior_golfer

2021/08/04 21:57

ご指摘ありがとうございます。できるだけオリジナルを残そうとしてぐちゃぐちゃなったので修正しました。
J91004933

2021/08/04 22:29

ご回答頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問