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

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

ただいまの
回答率

89.07%

配列の2行目を切り出す

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 903

kabutohyper

score 7

以下のやり方がわからず困っています。
①配列の2行目を取り出す
②バイトの合計値を求める
③バイナリファイル読み書き
④CSVファイル変換

特に①と②で詰まっています。

具体的に申し上げますと、まず、指定のフォーマットファイルを読込み、1行目をヘッダー、2行目をカンマ区切りで取り出します。
次に、カンマ区切りで取り出した2行目を基に、バイト数の合計をlistで返します。
最後に、バイト数の合計値を基に、バイナリファイルを読み込み、読み込んバイナリファイルをCSVファイルに変換します。

尚、記載したソースコードは、
ReadFormatメソッドがフォーマット呼び出しメソッド、
totalByteメソッドがバイト合計値計算メソッド、
Binaryメソッドがバイナリファイル読み書きメソッド、
CreateCsvメソッドが、CSV変換メソッドになります。

①と②ができないため、totalByteから先のメソッドが完成できません。

お手数ですが、ご回答いただけると幸いです。
よろしくお願いします。

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

public class Search2 {

    final static String Rfile1 = "loc";
    final static String Rfile2 = "acc";
    final static String Rfile3 = "mag";



    public static void main(String[] args) throws IOException {
        // TODO 自動生成されたメソッド・スタブ

        String formatNumber = args[1];
        String conversionFile = args[2];


        if(conversionFile.equals("1")) {

            conversionFile = Rfile1;

        } else if(conversionFile.equals("2")) {

            conversionFile = Rfile2;

        } else if(conversionFile.equals("3")) {

            conversionFile = Rfile3;

        } else {
            System.out.println("File is not found");
        }

        File fileName = new File("Format" + "\\" + formatNumber  + "\\" + conversionFile + ".fmt");

        //File filePath = new File("../../../Format" + "\\" + formatNumber  + "\\" + conversionFile + ".fmt");

        //String filePath = fileName + "\\" + formatNumber  + "\\" + conversionFile + ".fmt";


        String filePath = fileName.getCanonicalPath();
        //ファイル読み込み
        ReadFormat(filePath, formatNumber, conversionFile);

        String text1[] = new String[1];

        //totalByte list(1)を引数でわたし、合計バイト数を返す
        //totalByte();
        //CSVファイル作成
        //Binary();

        return;
    }




    /**
     *
     * @param formatNumber
     * @return
     * @throws IOException
     */


    private static void ReadFormat(String filePath, String formatNumber, String conversionFile) {



        try {
            int i = 0;
            String str = null;
            String[] text1 = new String[2];


            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "Shift-JIS"));

            while ((str = br.readLine()) != null) {

                byte[] b = str.getBytes();
                str = new String(b, "UTF-8");
                text1[i] = str;
                i++;

            }

            br.close();


        }catch (Exception e) {
            System.out.println("変換に失敗しました");
        }

        return;
    }

    /**
     *
     * @param createFileName
     * @param list
     * @return
     */



    public static int totalByte() {




        int sum = 0;
        for (int a = 0; a <  bytes.length; a++ ) {
            sum += bytes[a];

        }
        System.out.println(sum);
        return sum;

        }


    public static String Binary(List<String[]> list1, String charset, String str, Integer len) {


        try {

        FileInputStream fis = new FileInputStream("C:\\Users\\nakamura\\Desktop\\pleiades\\workspace\\Sample5\\1801\\20180602235854_f8ba5380f328eb51.mag");
        BufferedInputStream bis = new BufferedInputStream(fis);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        /*int cnt = 0;
        String sb = "";

        for (int c = 0; c < str.length(); c++) {
            String tmpStr = str.substring(c, c + 1);
            byte[] b = tmpStr.getBytes(charset);
            if(cnt + b.length > len) {
                return sb.toString();
            } else {
                //sb.append(tmpStr);
                cnt += b.length;
            }
        }*/

        byte[] b = new byte[8];
        int readByte = 0;
        while((readByte = bis.read(b)) != -1) {
            baos.write(b, 0, readByte);
            readByte = bis.read(b);
        }

        byte[] result = baos.toByteArray();
        FileOutputStream fos = new FileOutputStream("C:\\Users\\nakamura\\Desktop\\pleiades\\workspace\\Sample5\\1801\\20180602235854_f8ba5380f328eb51.mag");
        fos.write(result.length);
        fos.close();
        bis.close();
        baos.close();

        } catch (IOException e) {
            e.printStackTrace();
        }


        return str;
    }


    /*public static boolean CreateCsv() {
        try {
        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(), "UTF-8")));
        for (String[] tmpStringArray : list) {
            pw.println(String.join(",", tmpStringArray));
        }

        pw.close();
    } catch (Exception e) {
        return false;
    }
    }*/
}

```

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dodox86

    2019/10/18 19:24 編集

    > ①と②ができないため、totalByteから先のメソッドが完成できません。
    ReadFormatメソッドとtotalByteメソッドをまず先に完成させたいということでしょうか。
    あと、可能であればサンプルとなるフォーマットファイルを提示された方が良いと思います。

    キャンセル

  • kabutohyper

    2019/10/21 11:28

    ReadFileメソッドは完成してるので、totalByteメソッド以降を完成させたいです。
    また、フォーマットファイルなのですが、こちらの都合上、添付することができないです。
    内容は、一行目が項目名(何々、何々、、、というように表示されています)、二行目が一行目に表示されている項目ごとのバイト数になっています。

    キャンセル

回答 1

checkベストアンサー

0

「2行目」って、まさか2要素目の事?

        String formatNumber = args[1];
        String conversionFile = args[2];


Javaでの配列は0番始まりなので、コマンドライン引数が2つしかないならargs[2]は範囲外です。
こう書くとどうですか?

        String formatNumber = args[0];
        String conversionFile = args[1];

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/21 15:47

    戻り値を設定しました。booleanにしました。
    メインメソッドでReadFormatメソッドで読み込んだフォーマットの2行目を取り出したいのですが、どうすればよいでしょうか。
    よろしくお願いします。

    キャンセル

  • 2019/10/21 18:58

    あなたが得たい情報は何ですか?
    それをメソッドに返してもらえばいいのではないですか?

    キャンセル

  • 2019/10/22 11:24

    戻りの型を String にして、return text1[1]; しておいて、mainメソッドでは ReadFirmatメソッドの戻り値を変数に受け取って利用すれば良いのでは?

    キャンセル

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

  • ただいまの回答率 89.07%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る