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

在MATLAB中查找txtfile中的所有可见字符(并检查是否没有现有文件),matlab,char,text-files,Matlab,Char,Text Files,我对MATLAB很陌生。我必须写一个函数来计算文本文件中某个字符的数量。请求2个输入参数:fname(文件名的字符向量)和character(文件中它计数的字符) 输出参数:找到的字符数。如果找不到文件或字符不是有效字符,函数将返回-1 我编写了一个函数,它正确地通过了4个测试中的两个。这两个错误是: =>1)使用所有可见字符进行测试 说明:变量charnum的值不正确。使用“#”进行测试时,您的解决方案返回-1,这是不正确的。(0) =>2)不存在的文件 对于数字2),未提供任何解释 这是我的

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

输出参数:找到的字符数。如果找不到文件或字符不是有效字符,函数将返回-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
谢谢大家的建议和建议

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

例如,我不明白为什么我的第四行不能正常工作。
我已经检查了在Internet上找到的各种选项,但到目前为止没有解决问题。

要回答您的问题:

1)
A=fileread(fname)
将在处理if语句之前抛出一个错误,因此您必须重新构造代码以将其考虑在内

但是,您可以使用
isequal
函数来比较if语句的两个方面。如果找不到文件,则返回0,以便您可以将其与0进行比较

if isequal(isfile(fname),0)
    charnum = -1;
2) 如果输入不是字符数组,则函数返回0这将为字符串数组返回0,因此请100%确保您的输入是字符数组。用于执行此操作:

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

回答您的问题:

1)
A=fileread(fname)
将在处理if语句之前抛出一个错误,因此您必须重新构造代码以将其考虑在内

但是,您可以使用
isequal
函数来比较if语句的两个方面。如果找不到文件,则返回0,以便您可以将其与0进行比较

if isequal(isfile(fname),0)
    charnum = -1;
2) 如果输入不是字符数组,则函数返回0这将为字符串数组返回0,因此请100%确保您的输入是字符数组。用于执行此操作:

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

非常感谢你,@medicine_-man!你的解释很清楚:这对我更好地理解等质量函数的作用有很大帮助。我用建议检查解决方案:它适用于不存在的文件,但我仍然有一个字符错误。使用相同的解释(变量charnum的值不正确。使用“#”进行测试时,您的解决方案返回-1,这是不正确的)。我真的很难理解为什么它仍然会带来问题。您想测试字母和数字吗?示例输入文件是什么样子的?将它添加到原始问题中。我创建了一个文本文件,只将字符
放入其中,然后自己运行
charnum
返回值为1。我终于解决了这个问题!只需添加一个条件:elseif isequal(ischar(character),0)charnum=-1;而且它工作得很好!再次感谢您的帮助@medicine\u man!非常感谢你,@medicine_-man!你的解释很清楚:这对我更好地理解等质量函数的作用有很大帮助。我用建议检查解决方案:它适用于不存在的文件,但我仍然有一个字符错误。使用相同的解释(变量charnum的值不正确。使用“#”进行测试时,您的解决方案返回-1,这是不正确的)。我真的很难理解为什么它仍然会带来问题。您想测试字母和数字吗?示例输入文件是什么样子的?将它添加到原始问题中。我创建了一个文本文件,只将字符
放入其中,然后自己运行
charnum
返回值为1。我终于解决了这个问题!只需添加一个条件:elseif isequal(ischar(character),0)charnum=-1;而且它工作得很好!再次感谢您的帮助@medicine\u man!