简体   繁体   English

如何在Matlab中将数据输出到文件?

[英]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? 我的matlab文件所在的文件夹中有output.txt文件,它只是不向该文件输出任何数据吗?

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. 当我选择“更改文件夹”时,Matlab能够在“ output.txt”文件中写入数据。 Also, as Dev-iL suggested I added append mode, final code looks like this 此外,正如Dev-iL所建议的,我添加了添加模式,最终代码如下所示

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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