0

私が達成する必要があるのは、次のように2列のdoubleを含むテキストファイルからデータをインポートすることです。

201.0176    1.06E+03
201.7557    1.11E+01
202.0201    2.02E+02
202.2064    9.76E+00
202.8342    1.11E+01
203.0161    2.02E+02
203.1638    9.61E+00
203.3843    1.13E+01

これらのデータは最大約50,000行あります。各列を個別の配列にインポートしたいのですが、個別の列を識別する方法がわかりません。私は以下を試しました:

public class CodeTests {

    public static ArrayList assignArray(String filePath) throws FileNotFoundException {
        Scanner s = new Scanner(new File(filePath));
            ArrayList<Double> list = new ArrayList<Double>();
            while (s.hasNext()){
                list.add(s.nextDouble());
            }
            s.close();
            return list;
    }

    public static void main(String[] args) throws IOException {
        /*
         * 
         */
        ArrayList arrayMZ;
        arrayMZ = assignArray("F:/Stuff/Work/Work from GSK/From Leeds/ja_CIDFragmenter/testFile.txt");

        for(int i = 0; i < arrayMZ.size(); i++)
            System.out.println(arrayMZ.get(i));
        System.out.println("End");
    }
}

これを実行すると、次の出力が得られます。

run:
201.0176
1060.0
201.7557
11.1
202.0201
202.0
202.2064
9.76
202.8342
11.1
203.0161
202.0
203.1638
9.61
203.3843
11.3
End
BUILD SUCCESSFUL (total time: 1 second)

誰かがこれらの列を2つの配列に分割するか、最初のデータ列を含むarray[0]と2番目のデータ列を含むarray[1]の列の下にある単一の2D配列に分割するのを手伝ってもらえますか。すなわち:

  [0]         [1]
201.0176    1.06E+03
201.7557    1.11E+01
202.0201    2.02E+02
202.2064    9.76E+00
202.8342    1.11E+01
203.0161    2.02E+02
203.1638    9.61E+00
203.3843    1.13E+01

私はこれをできるだけ明確にしようとしましたが、他に何かあれば教えてください。

ありがとう

4

2 に答える 2

1

あなたはこのようなことをすることができます:

public static ArrayList[] assignArray(String filePath) throws FileNotFoundException {
    Scanner s = new Scanner(new File(filePath));
        ArrayList[] list = new ArrayList[2];
        ArrayList<Double> col1 = new ArrayList<Double>();
        ArrayList<Double> col2 = new ArrayList<Double>();
        while (s.hasNext()){
            String[] data = s.nextLine().split("\\s+"); 
            col1.add(Double.parseDouble(data[0]));
            col2.add(Double.parseDouble(data[1]));
        }
        s.close();
        list[0] = col1;
        list[1] = col2;
        return list;
}

データを使用して2つのArrayListの配列を取得します。

于 2012-12-20T13:19:27.173 に答える
0

何かのようなもの:

for(int i = 0; i < arrayMZ.size() / 2; i+=2)
    System.out.printf("%.4f\t%E\n", arrayMZ.get(i), arrayMZ.get(i + 1));
于 2012-12-20T13:06:41.590 に答える