Counting characters in a file
Show older comments
Hello,
I am doing an online course on matlab in coursera and I have come a cross a problem that seems hard for me to solve.
I need to write a function that takes the name of the text file and a paticular charater as input and then the function must count how many times the character is present in the file and return that number.
function charnum = char_counter(b,a)
fid = fopen(b,'r');
if fid < 0 || ~ischar(a) || length(a) == 0
charnum = -1;
return
end
t=0;
d=1;
while (d>0)
d = fgetl(fid);
x = strfind(d,a);
t = t + length(x);
end
charnum = t;
fclose(fid);
end
I have passed 3 out of 4 checks, following is the error that I am getting
Variable charnum has an incorrect value. When testing with ' ' your solution returned 1 which is incorrect. (75444).
I tried countin the number of " ' ' " as well and it seemed correct to,
I would like to the mistake that I am making.
Thanks
Hussain
6 Comments
Ameer Hamza
on 28 Mar 2020
Can you give the function call when the function fails. What are the values of a and b.
Hussain Bhavnagarwala
on 28 Mar 2020
Ameer Hamza
on 28 Mar 2020
I am not sure about the issue. Maybe you can try this loop-free version.
char_counter('text.txt', ' ')
function charnum = char_counter(b,a)
fid = fopen(b,'r');
if fid < 0 || ~ischar(a) || isempty(a)
charnum = -1;
return
end
data = char(fread(fid)');
charnum = numel(strfind(data, a));
fclose(fid);
end
Image Analyst
on 29 Mar 2020
Adam, I'd put that down in the answer section so you can get credit for it. I was about to say the same thing.
Adam Danz
on 29 Mar 2020
Accepted Answer
More Answers (3)
Rishi Diwan
on 23 May 2020
function charnum = char_counter(fname,character)
fid = fopen(fname,'rt');
if fid <= 0 || ~ischar(character) || ~ischar(fname) || length(fname)==0 || length(character)==0 || isempty(fname) || isempty(character)
charnum=-1;
return;
end
c=0;
ol=fgets(fid);
while ischar(ol)
c=c+count(ol,character);
ol=fgets(fid);
end
charnum=c;
fclose(fid);
end
3 Comments
Walter Roberson
on 23 May 2020
if the file open succeeded but the other parameter is not a valid character then you are leaving the file open.
yi yang
on 4 Sep 2022
a shorter version of your code:
function charnum = char_counter(fname,character)
charnum = count(fileread(fname),character);
end
Walter Roberson
on 4 Sep 2022
This turns out to be a homework assignment. The checks for file existing and for the input being a valid character are required as part of the assignment.
Ahsiur Rahman Nirjhar
on 24 May 2020
function x=char_counter(a,b)
fid=fopen(a,'rt');
if fid <0 || ~ischar(b)
s=-1;
else
s=0;
oneline=fgets(fid);
while ischar(oneline)
s=s+sum(double(oneline)==double(b));
oneline=fgets(fid);
end
fclose(fid);
end
x=s;
Mert Yalcinoz
on 1 Feb 2022
By looking other's people answers i have combined my code and got the result.
function charnum=char_counter(fname,character) %creating function
fid=fopen(fname,'rt');
if fid<0 || ~ischar(character) || length(character)==0 %conditions
charnum=-1;
return
end
a=0; %setting a total value for found desired string
b=fgets(fid); %for reading the first line, returns single line in a string
while ischar(b) %loop for each line
a=a+count(b,character); %summing when a character is found
b=fgets(fid); %if there is no new line, b becomes -1 and loop ends.
end
charnum=a; %setting output variable
fclose(fid);
end
1 Comment
Walter Roberson
on 1 Feb 2022
Suppose that a valid file name is passed in, but suppose that character is not a valid character or is empty. Then you set charnum=-1 and return... without having closed the file.
Categories
Find more on Customize Object Display for Classes in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
