Counting characters in a file
15 views (last 30 days)
Show older comments
Hussain Bhavnagarwala on 28 Mar 2020
Commented: Walter Roberson on 4 Sep 2022
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;
d = fgetl(fid);
x = strfind(d,a);
t = t + length(x);
charnum = t;
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.
Edited: Adam Danz on 30 Mar 2020
Here's a demo to count the instances of a character in a text file.
This demo searches for a space character ' ' and then replaces the space characters with squares so you can visually confirm the results.
This is the simple text file I'm reading in (also attached).
Read in the file and count the empty spaces ' '
idx shows the location of spaces.
c = fileread('myTextFile.txt');
idx = c == ' ';
% ans =
To search for a case insensitive character, use upper() or lower().
idx = lower(c) == 'a';
Replace the spaces with squares
cCopy = c;
cCopy(idx) = char(746); % square character
Spaces have been replaced with squares. Number of squares = 67
Adam Danz on 30 Mar 2020
Edited: Adam Danz on 30 Mar 2020
OP's code shared here shows
f = lower(fileread(b));
charnum = sum(f=='a');
which indicates a case insensitive search. There's no use in doing that unless the search key is also case insensitive. But it's good to explicitly point that out for the OP.
With an empty space search, case doesn't matter since upper(' ')==lower(' ').
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)
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
if fid <0 || ~ischar(b)
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
if fid<0 || ~ischar(character) || length(character)==0 %conditions
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.
charnum=a; %setting output variable
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.
Find more on Environment and Settings 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!