У меня довольно странная проблема. Чтение поплавка из текстового файла, как обычно, тестовый файл не содержит ничего, кроме одного поплавка:Чтение текстовых файлов с использованием matlab
fid = fopen('file.txt','r');
a = fscanf(fid,'%f');
fclose(fid);
Если я опустить fclose...
линии, а затем запустить fscanf...
снова, я получаю пустой массив, потому что я уже просмотрел все содержимое файла; это нормальное поведение.
Анализ, который я использую для выполнения Matlab, требует четырех параллельных процессов (которые обязательно независимы и не могут передавать данные между собой), чтобы каждый мог читать файл. Анализ занимает порядка часов, и четыре процесса вряд ли когда-либо захотят прочитать один и тот же файл за полчаса друг от друга, для одного процесса не должно быть проблем, чтобы прочитать его и закрыть его задолго до любого другого процессы пытаются его прочитать. Моя параллелизация очень проста - четыре задачи запускаются вручную из графического интерфейса Matlab.
Однако, на самом деле происходит то, что первый процесс, чтобы попытаться прочитать файл, делает все правильно, а остальные затем не работают, возвращая пустые массивы, как будто файл не был закрыт должным образом. Я посвятил часы этой проблеме и не получил нигде, никаких идей?
EDIT: если я пишу файл, используя команду matlab fprintf...
, она ведет себя отлично. Это просто файлы, напечатанные с использованием библиотеки C++ ofstream
, которые, похоже, вызывают проблемы. C++ код участвует в написании файла выглядит следующим образом: (? MATLAB ошибка может быть)
#include <iostream>
std::ofstream param_file ("file.txt");
param_file<<dataval;
Не могли бы вы рассказать нам немного больше о технологии, которую вы используете для распараллеливания? Все ваши дескрипторы возвращены 'fopen' под названием' fid'? – BillBokeey
Чтобы быть впереди всех закрытых избирателей: укажите код, с помощью которого вы создаете файл в C++. Также, пожалуйста, укажите информацию, которую попросил @BillBokeey. Таким образом, мы можем видеть, что происходит, и пытаться помочь вам. – Adriaan
Вопросы поиска справки по отладке (** «почему этот код не работает?» **) должен включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для его воспроизведения ** в самом вопросе **. Вопросы без ** ясного заявления о проблеме ** не полезны для других читателей. Смотрите: [Как создать минимальный, полный и проверенный пример.] (Http://stackoverflow.com/help/mcve) - моя забота особенно о последней части, а не о проблеме. – Schorsch