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

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

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

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

Q&A

解決済

1回答

4466閲覧

java テキストファイルをcsvへ

rin_rin0000

総合スコア8

Java

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

0グッド

0クリップ

投稿2018/07/13 15:35

編集2018/07/14 14:25

前提・実現したいこと

eclipse4.5 java8
------------------------------簡略詳細-------------------------------------
txtファイル(パスを変数x、ファイル名をyとする)を読み込み、列に特定の文字を含む行を読み飛ばし
尚且つ読み込んだ後に特定の列を指定して抽出してcsv(エクセルファイル)としたい

--更に詳しく-- 私は下記のように直接ファイルパスを記載し定められたファイル名、尚且つ全ての内容を読み込むことに成功。 txtをcsv出力、そして読み込み後に特定の列をしていして抽出を行いたい。 同時に特定の文字を含む列は読み飛ばすこととする。 情報が少ないかもしれませんが、何卒よろしくお願いいたします。 ### 該当のソースコード ```ここに言語名を入力 import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) { try { //Fileクラスに読み込むファイルを指定する File file = new File("/Users/Shared/java/java.txt"); //ファイルが存在するか確認する if(file.exists()) { //FileReaderクラスのオブジェクトを生成する FileReader filereader = new FileReader(file); //filereaderクラスのreadメソッドでファイルを1文字ずつ読み込む int data; while((data = filereader.read()) != -1) { System.out.print((char) data); } //ファイルクローズ filereader.close(); } else { System.out.print("ファイルは存在しません"); } } catch (IOException e) { e.printStackTrace(); } } } ``` ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) テキストファイルの中身 1行目 10:30:50 fas ghd #dasfs fdsf herge %#das 2行目 12:42:43 1 2 432 geds 41 gds!!# 3行目 14:32:31 abb sa 4vs dss23 123 fs2 実現したいcsv形式 1行目 10:30:50 fas #dasfs %#das 2行目 12:42:43 1 432 gds!!# 3行目 14:32:31 abb sa   fs2 のような形です。 よろしくお願いします。

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

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

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

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

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

euledge

2018/07/13 21:45

テキストファイルの中身を2,3行で良いので例示して、結果としてどのようなCSVファイルになるのかを質問に追記してください
guest

回答1

0

ベストアンサー

txtファイル(パスを変数x、ファイル名をyとする)を読み込み、列に特定の文字を含む行を読み飛ばし

尚且つ読み込んだ後に特定の列を指定して抽出してcsv(エクセルファイル)としたい

サンプルで提示された空白区切りのテキストファイルをCSVファイルにするというところは理解できますが、特定文字を含む行の読み飛ばしについては条件が不明なので、適当に決めた文字を含まない行に対して指定された列からCSVを作るというところまで書いてみました。

  • 文字列に指定した文字が含まれるか String#contains
  • 文字列から区切り文字で分割した配列を作る String#split
  • 文字列配列から区切り文字で結合した文字列を作る String#join

この3つが肝です。

ファイルから1文字ずつ読み出すのは今回の処理ではあまり向かないと思いますので行単位での読み出しにしてJava8っぽい記述にしてみました。

java

1 // 仮に決めた不要な行と判断する文字 2 String ignoreChar = "%"; 3 // 仮に決めた出力対象の列 但し先頭列を0とする 4 int[] index = {0,2,4,6}; 5 6 String filePath = "/Users/Shared/java/java.txt"; 7 if (Files.exists(Paths.get(filePath))) { 8 try (Stream<String> stream = Files.lines(Paths.get(filePath), StandardCharsets.UTF_8)) { 9 stream.forEach(line -> { 10 if (!line.contains(ignoreChar)) { 11 // 文字列を空白区切りで配列に変換する 12 String[] columns = line.split("\s+", 0); 13 // このような配列になる 14 // [10:30:50, fas, ghd, #dasfs, fdsf, herge, %#das] 15 16 // 指定した列のみ出力するために先に決めていたindexで指定された列で配列を作り直す 17 String[] filterd = { 18 columns[index[0]], 19 columns[index[1]], 20 columns[index[2]], 21 columns[index[3]], 22 }; 23 // 文字列配列をカンマ区切りの文字列に変換する 24 String csvRow = String.join(",", filterd); 25 System.out.println(csvRow); 26 } 27 }); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } 31 } else { 32 System.out.print("ファイルは存在しません"); 33 } 34 }

投稿2018/07/14 17:00

編集2018/07/14 17:11
euledge

総合スコア2404

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問