2016-04-22 5 views
0

数値データをバイナリ.txtファイルに出力するJavaプログラムを作成し、そのデータファイルを処理するためにMatlabを使用する予定です。matlabで間違った.txtバイナリデータを読む

Javaプログラムでは、DataOutputStreamを使用してfloat数値をdata.txtファイルに書き込み、DataInputStreamを使用してdata.txtを読み取ってテストしました。そして私は正しい結果を得ました。

// write {1.0, 2.0, 3.0, 4.0, 5.0, 6.0} 
    private void writeFile(Float [] data) throws IOException { 
     FileOutputStream fos = new FileOutputStream(fileName); 
     DataOutputStream dos = new DataOutputStream(fis); 

     for (int i = 0; i < data.length; ++i) { 
      dos.writeFloat(data[i]); 
     } 
     dos.close(); 
} 

//output is {1.0, 2.0, 3.0, 4.0, 5.0, 6.0} 
private float[] readFile(String fileName, int size) throws IOException { 
    FileInputStream fis = new FileInputStream(fileName); 
    DataInputStream dis = new DataInputStream(fis); 
    float [] dataArray = new int[size]; 

    for (int i = 0; i < dataArray.length; ++i) { 
     dataArray[i] = dis.reaFloat(); 
    } 
    dis.close(); 
    return dataArray; 
} 

しかし、matlabでdata.txtファイルを使用すると、番号が間違っています。私が戻った何

fid = fopen('data.txt'); 
data = fread(fid, 'float'); 
fclose all; 


データ=

1.0e-40 * 

    0.4601 
    0.0009 
    0.2305 
    0.4601 
    0.5749 
    0.6897 

だから、私はMatlabの中で浮くために、バイナリからの私の変換に問題があるかもしれないことを疑います。どんな勧告も感謝しています。

Javaのプリミティブデータを書き込んでMatlabで処理する方法はありますか?おかげさまで

答えて

0

データをCSV形式のファイルに書き込んでから、Matlabにインポートすることができます。

、出力ファイルは、CSVを使用すると、より複雑なを持っている場合は、importdataはまたは

your_data = importdata('test.txt', ',') 
your_data = csvread('test.txt') 

コマンドcsvreadのいずれかを使用して、MATLABにデータをインポートすることができ、その後

1.1, 1.2, 1.3                          
3.2, 3.3, 4.5 

ファイルである場合データ形式は、textscanを使用してください。たとえば、以下のコマンドを使用して、セル配列に以下のデータ形式を解析することができます。

"1.1", "1.2", "1.3", "3.2", "3.3", "4.5" 

buffer = fileread('/tmp/list.txt') 
values = textscan(buffer, '"%f"', 'Delimiter', ',') 
+0

ありがとうございます。私は実際にJavaのCSVWriterによるCSV形式で試してみます。しかし、ファイル内のデータは "1.1"、 "1.2"のように文字列です...そして処理が難しいです。 csv形式の出力の詳細を教えてください。 – nghiduong90

+0

私はJavaについてよく知らないので、詳細な説明はできません。ただし、MATLAB textscan関数を使用して、csvファイルからデータを読み取ることができます。 – hungptit

関連する問題