Прочитать неправильные двоичные данные .txt в Matlab

Я написал программу на Java для вывода числовых данных в двоичный файл .txt и планирую использовать Matlab для обработки этого файла данных.

В программе на Java я использовал DataOutputStream для записи чисел с плавающей запятой в файл 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;
}

Однако, когда я использую файл data.txt в Matlab, я получаю неправильный номер.

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

Вот что я получил:
data =

   1.0e-40 *

   0.4601
   0.0009
   0.2305
   0.4601
   0.5749
   0.6897

Итак, я сомневаюсь, что это может быть проблемой с моим преобразованием из двоичного в число с плавающей запятой в Matlab. Любая рекомендация приветствуется.

Или есть другой способ написать примитивные данные с Java и обработать в Matlab? Спасибо.


person nghiduong90    schedule 22.04.2016    source источник


Ответы (1)


Вы можете записать свои данные в файл в формате CSV, а затем импортировать их в Matlab.

Если ваш выходной файл является файлом CSV

1.1, 1.2, 1.3                                                                                                      
3.2, 3.3, 4.5

затем вы можете импортировать свои данные в Matlab с помощью команд importdata или csvread.

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

Если у вас более сложный формат данных, используйте textscan. Например, вы можете разобрать ниже формат данных

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

в массив ячеек, используя приведенные ниже команды.

buffer = fileread('/tmp/list.txt')
values = textscan(buffer, '"%f"', 'Delimiter', ',')
person hungptit    schedule 23.04.2016
comment
Спасибо за ваше предложение. На самом деле я пытаюсь использовать формат csv с помощью CSVWriter на Java. Но данные в файле строковые, типа 1.1, 1.2,... И их сложно обрабатывать. Можете ли вы дать мне более подробную информацию для вывода в формате csv? - person nghiduong90; 23.04.2016
comment
Я мало что знаю о Java, поэтому я не могу дать вам подробную инструкцию. Однако вы можете использовать функцию MATLAB textscan для чтения данных из вашего CSV-файла. - person hungptit; 25.04.2016