2015-05-30 6 views
-1

Я получаю сообщение об ошибке при запуске кода Matlab (прилагается), который постоянно проверяет и открывает два файла .txt за определенный промежуток времени (2 секунды), и в зависимости от результата сравнение значений между этими два файла, выбрали тот или иной и использовали его .... Эти два файла постоянно сохраняются и обновляются с помощью Java-скрипта с интервалом в 2 секунды. Все файлы расположены по тому же пути.Matlab, textscan error

Ошибки я получаю:. «Неверный идентификатор файла использовать Еореп для создания действительного идентификатора файла

Ошибка в KinectDEMelevation_with_filecomparison2 (строка 36) DEM1 = TextScan (fid2, formatSpec, 'HeaderLines', 6, 'Разделитель', '\ Ь'); "

код:

DEM = GRIDobj('kinectDEM0.txt'); 
clims = [-30 140]; 
imagesc(DEM,clims); 
colormap(jet);    
hold on 

while(1) 
    tic 
%  clear all 
%  clf 
%  load('MyColormaps','mycmap'); 

    %% Get kinectDEM0 data 

    % Open 'kinectDEM0.txt' 
    fid1 = fopen('kinectDEM0.txt', 'r+'); 
    % Read data in from the .txt file 
    formatSpec = '%n'; 
    DEM0 = textscan(fid1,formatSpec,'HeaderLines',6,'Delimiter','\b'); 
    % Extract data from DEM0 
    DEM0Data = DEM0{1,1}(200:100:287800,1); 
    % Close 'kinectDEM0.txt' 
    fclose(fid1); 

    %% Get kinectDEM1 data 

    % Open 'kinectDEM1.txt' 
    fid2 = fopen('kinectDEM1.txt', 'r+'); 
    % Read data in from the .txt file 
    formatSpec = '%n'; 
    DEM1 = textscan(fid2,formatSpec,'HeaderLines',6,'Delimiter','\b'); 
    % Extract data from DEM1 
    DEM1Data = DEM1{1,1}(200:100:287800,1); 
    % Close 'kinectDEM1.txt' 
    fclose(fid2); 

    %% Compare data, a logical array return 1 for true (points that has been changed), 0 for false 


    test = eq(DEM0Data,DEM1Data); 
    num = sum(test);     % numbers of point in the scene that has been changed 
    threshold = 2900;     % after this threshold update the image 

    if num > threshold 
     DEM = GRIDobj('kinectDEM1.txt'); 
     clf 
     clims = [-30 140]; 
     imagesc(DEM,clims); 
     colormap(jet);     
     hold on 

    end 

    T = toc; 
    pause(2 - T); 

end 

Как я могу это исправить?

Благодаря

+1

не использовать файлы в качестве межпроцессного взаимодействия, особенно с учетом доступа (чтение/запись) не синхронизирована в вашем случае. –

+0

Я знаю, что это проблема, но я не знаю, как пропустить эту проблему, единственный способ написать эти .txt-файлы - использовать этот Java-скрипт. Однако java-скрипт сохраняет файлы как .tmp, и только когда они полностью записаны, они переименовываются в .txt, чтобы сделать его доступным для скрипта Matlab, только если они полностью написаны. – Geonik

ответ

0

Вы должны добавить некоторую проверку ошибок, чтобы убедиться, что файл:

  • существует
  • был успешно открыт

Для первых, вы можете использовать exist:

r = exist('kinectDEM0.txt','file'); 
% will return 2 if file exists 

Для второго вам необходимо проверить, действителен ли fid. Если fopen не может открыть файл, это будет -1. Вы также можете использовать второй выход для fopen, errmsg, для дополнительной проверки; errmsg должен быть пустой строкой, если файл был успешно открыт, иначе он вернет системное сообщение об ошибке, например «Нет такого файла или каталога».

Простой пример:

fid = -1 
while fid == -1 
    fid = fopen('myfile.txt'); % attempt to open until success 
end