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