简体   繁体   中英

How to output data to file in matlab?

I've read several articles about how to output data to file, but it just doesnt seem to work for me. I have output.txt file at the same folder as my matlab file resides and it just doesn't output any data to that file?

What is wrong with it? I want to output coordinates as you click on image, so all output logic is in the listener.

function main 
    clc; close all;
    % set the range of the axes
    % The image will be stretched to this.
    min_x = 0;
    max_x = 1;
    min_y = 0;
    max_y = 1;

    % replace with an image of your choice
    img = imread('ryklys.jpg');

    imagesc([min_x max_x], [min_y max_y], flipud(img));
    hold on;
    colormap(gray);

    set(gca,'ydir','normal')

    cursor_handle = plot(0,0,'r+ ','visible','off')

    % now attach the function to the axes
    set(gca,'ButtonDownFcn', @mouseclick_callback)

    % and we also have to attach the function to the children, in this
    % case that is the line in the axes.
    set(get(gca,'Children'),'ButtonDownFcn', @mouseclick_callback)



   function mouseclick_callback(gcbo,eventdata)
      % the arguments are not important here, they are simply required for
      % a callback function. we don't even use them in the function,
      % but Matlab will provide them to our function, we we have to
      % include them.
      %
      % first we get the point that was clicked on
      cP = get(gca,'Currentpoint');
      x = cP(1,1);
      y = cP(1,2);
      % Now we find out which mouse button was clicked, and whether a
      % keyboard modifier was used, e.g. shift or ctrl
      switch get(gcf,'SelectionType')
          case 'normal' % Click left mouse button.
              s = sprintf('left: (%1.4g, %1.4g) level = %1.4g',x,y, x.*exp(-x.^2-y.^2));
          case 'alt'    % Control - click left mouse button or click right mouse button.
              s = sprintf('right: (%1.4g, %1.4g level = %1.4g)',x,y, x.*exp(-x.^2-y.^2));
          case 'extend' % Shift - click left mouse button or click both left and right mouse buttons.
              s = sprintf('2-click: (%1.4g, %1.4g level = %1.4g)',x,y, x.*exp(-x.^2-y.^2));
          case 'open'   % Double-click any mouse button.
              s = sprintf('double click: (%1.4g, %1.4g) level = %1.4g',x,y, x.*exp(-x.^2-y.^2));
      end
      % get and set title handle
      thandle = get(gca,'Title');
      set(thandle,'String',s);
      % finally change the position of our red plus, and make it
      % visible.
      set(cursor_handle,'Xdata',x,'Ydata',y,'visible','on')

      % append file with coordinates
      plot(x,y,'r.','MarkerSize',20);

      % Output to file 
        fid=fopen('output.txt','w');
        fprintf(fid, '%4.2f %4.2f \n', x, y);
        fclose(fid);
  end
end

This project is about how to get coordinates on image mouse click and to output point coordinates to file.

When first time launching this file, be sure to select "change folder" instead of "adding file to path". When I selected "change folder" Matlab was able to write data in the 'output.txt' file. Also, as Dev-iL suggested I added append mode, final code looks like this

function main 
    clc; close all;
    % Total points counter 
    counter = 0;

    % set the range of the axes
    % The image will be stretched to this.
    min_x = 0;
    max_x = 1;
    min_y = 0;
    max_y = 1;

    % replace with an image of your choice
    img = imread('ryklys.jpg');

    imagesc([min_x max_x], [min_y max_y], flipud(img));
    hold on;
    colormap(gray);

    set(gca,'ydir','normal')

    cursor_handle = plot(0,0,'r+ ','visible','off')

    % now attach the function to the axes
    set(gca,'ButtonDownFcn', @mouseclick_callback)

    % and we also have to attach the function to the children, in this
    % case that is the line in the axes.
    set(get(gca,'Children'),'ButtonDownFcn', @mouseclick_callback)

%     % Output to file 
    outputFile = 'output.txt';
    fid=fopen(outputFile,'wt');
    fclose(fid);

   function mouseclick_callback(gcbo,eventdata)
      % the arguments are not important here, they are simply required for
      % a callback function. we don't even use them in the function,
      % but Matlab will provide them to our function, we we have to
      % include them.
      %
      % first we get the point that was clicked on
      cP = get(gca,'Currentpoint');
      x = cP(1,1);
      y = cP(1,2);
      % Now we find out which mouse button was clicked, and whether a
      % keyboard modifier was used, e.g. shift or ctrl
      switch get(gcf,'SelectionType')
          case 'normal' % Click left mouse button.
              s = sprintf('left: (%1.4g, %1.4g) level = %1.4g',x,y, x.*exp(-x.^2-y.^2));
          case 'alt'    % Control - click left mouse button or click right mouse button.
              s = sprintf('right: (%1.4g, %1.4g level = %1.4g)',x,y, x.*exp(-x.^2-y.^2));
          case 'extend' % Shift - click left mouse button or click both left and right mouse buttons.
              s = sprintf('2-click: (%1.4g, %1.4g level = %1.4g)',x,y, x.*exp(-x.^2-y.^2));
          case 'open'   % Double-click any mouse button.
              s = sprintf('double click: (%1.4g, %1.4g) level = %1.4g',x,y, x.*exp(-x.^2-y.^2));
      end
      % get and set title handle
      thandle = get(gca,'Title');
      set(thandle,'String',s);
      % finally change the position of our red plus, and make it
      % visible.
      set(cursor_handle,'Xdata',x,'Ydata',y,'visible','on')

      % append file with coordinates
      plot(x,y,'r.','MarkerSize',20);

      % Increasing counter value
      counter = counter + 1;
      % Printing out points counter value
      text(x,y, strcat('#', int2str(counter)), 'color', 'r');

      % Output to file 
      fid=fopen(outputFile,'at');
      fprintf(fid, '%f %f %s %d\n', x, y, '; %', counter);
      fclose(fid);
  end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM