【问题标题】:Matlab too many outputsMatlab输出太多
【发布时间】:2013-04-07 14:44:10
【问题描述】:

myfile.m 程序读取一个 txt 文件,其中包含一共 25 个名称和数字,如

示例:

约翰·道拉斯 15986

菲利普公爵 357852

等等。

程序将它们转换为

15986 Doughlas John
357852 duch Filip 

这是没有功能的,我得到了太多的输出。

Error message:
Error using disp
Too many output arguments.

Error in red4 (line 26)
  array = disp(All);

原文如下:

function array = myfile(~) 
if nargin == 0 
dirr = '.';
end
answer = dir(dirr);  
k=1;
while k <= length(answer) 
    if answer(k).isdir 
        answer(k)=[]; 
    else
        filename{k}=answer(k).name;
        k=k+1;
    end
 end
chose=menu( 'choose file',filename);
namn = char(filename(chose));  
fid = fopen(namn, 'r');    
R = textscan(fid,'%s %s %s');  
x=-1;                                            
k=0;                                               
while x <= 24                                  
      x = k + 1;                                    
      All = [R{3}{x},'   ',R{1}{x},' ',R{2}{x}];
      disp(All)                                     
      k = k + 1;                                   
end                                                
fclose(fid);

现在我从functions 之类的人和网站那里得到了很多很好的答案,但我无法通过函数获得上述结果。

我已经尝试将它们结合起来并得到了一些结果:

y = 15986 & [a,z,b] = myfile
y = 25 & myfile = x
y = numbers name1,2,3,4 and so one & myfile = fprintf(All)
y =                       & I used results().namn, 
numbers name 1            & results().id, results().lastname
y =
numbers name 2 and so on.

我想要的结果是:

y = myfile
y =
15986 Doughlas John
357852 duch Filip 

更新:像 Eitan T 说的那样改变它,但没有得到像上面那样的结果。

得到结果:

'约翰·多拉斯 15986'

'菲利普公爵 357852'

function C = myfile()                            
 if nargin == 0 
    dirr = '.';
end
answer = dir(dirr); 
k=1;
while k <= length(answer)   
    if answer(k).isdir 
        answer(k)=[]; 
    else
        filname{k}=answer(k).name;
        k=k+1;
    end
end
chose=menu( 'choose',filname); 
name = char(filname(chose)); 
fid = fopen(name, 'r');
C = textscan(fid, '%s', 'delimiter', '');
C = regexprep(C{1}, '(\w+) (\w+) (\w+)', '$3 $2 $1');
fclose(fid); 

【问题讨论】:

  • “有了它我得到了太多的输出”。你的意思是错误信息吗?如果是这样,你能把它包括进去吗?

标签: matlab return-value


【解决方案1】:

为什么要使用循环?使用textscan 立即阅读这些行并使用regexprep 来操作单词:

fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'delimiter', '');
C = regexprep(C{1}, '(\w+) (\w+) (\w+)', '$3 $2 $1')
fclose(fid);

结果是一个单元格数组C,每个单元格存储一行。对于您的示例,您将获得一个 2×1 元胞数组:

C = 
    '15986 doughlas John'
    '357852 duch Filip'

我不确定你想用它做什么,但如果你提供更多细节,我可以进一步改进我的答案。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    相关资源
    最近更新 更多