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

问题描述 投票:1回答:1

我是MATLAB的新手。我必须编写一个函数来计算文本文件中某个字符的数量。请求2个输入参数:fname(文件名的char矢量)和字符(它在文件中计数的char)。

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

我写了一个函数,它正确地传递了4个测试中的两个。两个错误的是:

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

Explanation:变量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行无法正常工作。我已经检查了互联网上的各种选项,但到目前为止它还没有解决问题。

matlab char text-files
1个回答
0
投票

回答你的问题:

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
© www.soinside.com 2019 - 2024. All rights reserved.