在 MATLAB 的 txtfile 中查找所有可见字符(并检查没有现有文件)



我对MATLAB很陌生。我必须编写一个函数来计算文本文件中某个字符的数量。请求 2 个输入参数:FNAME(文件名的字符向量)和字符(它在文件中计数的字符)。

输出参数:找到的字符数。如果未找到文件或字符不是有效的字符,则该函数返回 -1。

我编写了一个函数,它正确通过了 4 个测试中的两个。两个错误的是:

==> 1)使用所有可见字符进行测试

解释: 变量 charnum 具有不正确的值。使用"#"进行测试时,您的解决方案返回 -1,这是不正确的。(0)

==> 2)不存在的文件

对于第 2 条),没有提供任何解释。

这是我的代码:

function charnum = char_counter(fname, character)
A = fileread(fname);
char_1 = strfind(A, character);
charnum = numel(char_1);
if isfile(fname) == 0 %doesn't work... 
charnum = -1;
elseif exist(fname) == 0
charnum = -1;
elseif charnum == 0
charnum = -1;
elseif ischar(character) == 0
charnum = -1;
fclose(fid);
end

谢谢大家的建议和建议。

我明白,对于 1) 我可能应该添加一个指令来考虑所有字符,但我找不到令人满意的工作方式。因为当我测试字符"#"时,它在我的 MATLAB 上正常工作: 当我使用可见字符"#"测试函数时,答案是正确的。

对于 2)我不明白为什么我的第 4 行无法正常工作。 我已经检查了在互联网上找到的各种选项,但到目前为止它还没有解决问题。

要回答您的问题:

1)A = fileread(fname)会在您进入 if 语句之前抛出错误,因此您必须重组代码以考虑到这一点。

但是,您可以使用isequal函数来比较 if 语句的两个内容。 如果未找到文件,isfile返回 0,因此您可以将其与 0 进行比较。

if isequal(isfile(fname),0)
charnum = -1;

2) 如果输入不是字符数组,则函数ischar返回 0。对于字符串数组,这将返回 0,因此请确保 100% 确保您的输入是字符数组。使用char执行此操作:

elseif isequal(ischar(char(character)),0)
charnum = -1;

以下是您的函数可能的样子:

function charnum = char_counter(fname, character)
if isequal(isfile(fname),0)
charnum = -1;
else    
A = fileread(fname);
char_1 = strfind(A, character);
charnum = numel(char_1);
if isequal(exist(fname),0)
charnum = -1;
elseif isequal(charnum,0)
charnum = -1;
elseif isequal(ischar(char(character)),0)
charnum = -1;
end
fclose(fid);
end
end

最新更新