Finding all visible char in txtfile in MATLAB

4 visualizzazioni (ultimi 30 giorni)
Morgane Aubineau il 11 Apr 2019
Commentato: Walter Roberson il 18 Apr 2019
Hi everyone,
I have to write a function that counts the number of a certain character in a text file. 2 input arguments are requested: fname (char vector of the filename) and character (the char it counts in the file).
Output argument: the number of characters found. If the file is not found or character is not a valid char, the function return -1.
I wrote a function which passed correctly three of the 4 tests. The wrong one is
==> 1) Test with all visible characters
Explanation: Variable charnum has an incorrect value. When testing with '#' your solution returned -1 which is incorrect. (0)
This is my code:
function charnum = char_counter(fname, character)
if isequal(isfile(fname),0)
charnum = -1;
else
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
end
end
I understand, that I probably should add an instruction to take into account all the characters but I can't find a satisfying way that works. Because when I test for the character '#', it works correctly on my MATLAB: When I test the function with the visible character '#' the answer is correct.
0 CommentiMostra -1 commenti meno recentiNascondi -1 commenti meno recenti

Accedi per commentare.

Risposta accettata

Walter Roberson il 12 Apr 2019
"or character is not a valid char" is a requirement to test whether the second parameter is datatype char .
Your code is testing isequal(charnum,0) which is testing whether the number of entries found by strfind() is 0, and when it is then you return -1. However, when the input is valid as char data type but does not happen to be found, then input is not an invalid character and so the output should not be -1: the output should be the count, which happens to be 0.
2 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Walter Roberson il 12 Apr 2019
No, if they passed in a character, any character, then as long as the file is found, then you should not be returning -1. -1 is only for the case where the file is not found or the input does not pass ischar() . In all cases where a char was passed in but the char does not happen to occur in the file, then 0 should be returned.

Accedi per commentare.

Più risposte (2)

Gokul surya Subramanian il 17 Apr 2019
if ischar(character)==0
charnum =-1;
elseif charnum==0
charnum=0;
return;
end
0 CommentiMostra -1 commenti meno recentiNascondi -1 commenti meno recenti

Accedi per commentare.

Morgane Aubineau il 17 Apr 2019
I finally solved it like this:
function charnum = char_counter(fname, character)
if isequal(isfile(fname),0)
charnum = -1;
elseif isequal(ischar(character),0)
charnum = -1;
else
characters = char(character);
char_1 = strfind(A, characters);
charnum = numel(char_1);
if isequal(exist(fname),0)
charnum = -1;
elseif isequal(charnum,0)
charnum = 0;
elseif isequal(ischar(char(character)),0)
charnum = -1;
end
end
end
1 CommentoMostra NessunoNascondi Nessuno
Walter Roberson il 18 Apr 2019
It is not necessary to use if isequal(isfile(fname),0) : you could just use if ~isfile(fname)
If isfile(fname) fails, then you never get to the else and so you do not need to test exist(fname) . Likewise, you cannot get to that second ischar() test.

Accedi per commentare.

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by