Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

ASSIGNMENT: TEXT FILES Write a function called char_counter that counts the number of a certain character in a text file. The function takes two input arguments, fname, a char vector of the filename and character, the char it counts in the file.

조회 수: 6 (최근 30일)
When testing with '' your solution returned -1 which is incorrect. (0)
This error pops up while doing the assignment.
can anyone tell me why is this error popping and the meaning of the statement mentioned above.
when the character is ' " ' then i get a finite answer. and when the character is ' ' ' then too answer is a finite number. but i dont understand what the above bold text means....
my code
function charnum = char_counter(fname,character)
fid=fopen(fname);
if fid< 0
charnum = -1;
return;
end
if strcmp(character,'')==1
charnum=0;
return;
end
if double(character)>=35 && double(character)<=43 && double(character) ~=39 && double(character) ~= 41 && double(character) ~= 40
charnum = 0;
return;
end
if double(character) >=60 && double(character) <=64 && double(character) ~= 63
charnum = 0;
return;
end
if double(character) == 81 || double(character) == 88 || double(character) == 90
charnum = 0;
return;
end
cc = fgets(fid);
sumv=0;
while ischar(cc)
z = sprintf('%s',cc);
k = strfind(z,character);
sumv = sumv + length(k);
cc = fgets(fid);
end
charnum = sumv;
if charnum == 0
charnum =-1;
return;
end
  댓글 수: 3
Rakshith R
Rakshith R 2019년 3월 30일
thanks for clearing this
but when i remove those statement i get a error stating
char_counter('simple.txt',11) failed
why so
Shubham Pandey
Shubham Pandey 2020년 4월 11일
편집: Shubham Pandey 2020년 4월 11일
The basic error this code is generating is that when you pass '' as character and if it reads 0 and stores it in charnum, this charnum is getting changed to -1 due to last if block. That is why, the error is showing up. Therefore, it is advisable to remove the last if block. Instead, you may add additional OR condition in the first if block to check for the validity of the character in addition to fid<0.

채택된 답변

Walter Roberson
Walter Roberson 2019년 3월 29일
편집: Walter Roberson 2019년 3월 29일
You are apparently using some kind of automated assignment assessing software. You submitted an assignment for grading. The course software tried passing '' (the empty character vector, equivalent to char([]) ) to your function, and your function returned the value -1 which is not what the assignment specifies should be returned for that input, so it told you that you are wrong.
We do not know what assignment you were doing, or what the correct answer was to that input. You will need to re-read the question more carefully to see what you should have responded with.
I speculate that you were doing the assignment that has been going around about counting the number of matches of a character in a file. The assignment other people have been posting requires that -1 be returned if the input is invalid. I suspect that you are seeing the '' (empty character vector) and considering it to be invalid and so returning -1, but that if you were to read the assignment more carefully you would find that the assignment considers '' to be a valid input and that the number of matches you would expect for it would be 0. Be careful with your validation tests: isempty() is true for both [] and '' .

추가 답변 (4개)

Jaimin Motavar
Jaimin Motavar 2019년 7월 2일
can some tell me what is the my mistake in this code?problem is written in comment secssion.
function charnum = char_counter(filename,b)
charnum=0;
if ~ischar(b)
charnum=-1;
return;
end
fid = fopen(filename,'rt');
if fid<0
charnum=-1;
return;
end
oneline= fgets(fid);
while ischar(oneline)
a=sprintf('%s \n',oneline);
c=findstr(b,a);
[m,n]=size(c);
charnum=charnum+n;
oneline=fgets(fid);
end
end
  댓글 수: 3

Ajith Thomas
Ajith Thomas 2019년 8월 19일
편집: Ajith Thomas 2019년 8월 19일
my question is which all characters should be eliminated? on this question?
  댓글 수: 2
Walter Roberson
Walter Roberson 2019년 8월 19일
There are different versions of the assignment around. In the most common case, there are no characters that should be eliminated. The tests against Q V and so on were hacks to deal code mistakes the user had made.
A common mistake people make is that they are returning -1 when a valid input is not found. They should be returning 0 instead. -1 is reserved for file not found or invalid input argument.

Preethi Vannal
Preethi Vannal 2020년 4월 12일
I passed 3 assessments out of 4 for this same question.
My code:
function charnum = char_counter(fname,ch)
if isfile(fname)
fid=fopen(fname,'rt')
if (fid>0 && ischar(ch))
ct=0;
oneline=fgets(fid);
while ischar(oneline)
if(strfind(oneline,ch))
ct=ct+count(oneline,ch);
else
charnum=-1;
end
oneline=fgets(fid);
end
charnum=ct;
else
charnum=-1;
end
else
charnum=0;
end
fclose(fid);
end
I am not able to get idea to pass this 4th assessment.
Can anyone please help me?
  댓글 수: 4
Mohymen Kushal
Mohymen Kushal 2020년 11월 2일
Don't close the file. fopen will return -1 if the file dosen't exist. But if you close it with fclose it won't.
Walter Roberson
Walter Roberson 2020년 11월 2일
It is good practice to fclose() any file you fopen() unless you are returning the handle of the file (or recording it internally.)
However, the code posted attempts to fclose() the file even if the exist() test failed, which is a problem because if exist() failed then the variable fid would not have been assigned to.

tshering lhamo
tshering lhamo 2020년 9월 5일
편집: Rik 2020년 9월 5일
hello, my function gives the error "test with all visible characters-failed". please help me understand where I made a mistake. thank you!
function charnum=char_counter(fname,character)
fid=fopen(fname,'rt');
if ~ischar(character)||fid<0
fprintf('error opening file\n');
charnum=-1;
return;
else
fname=fgets(fid);
charnum=0;
for ii=1:length(fname)
char_n=count(fname(ii),character);
charnum=charnum+char_n;
end
end
fclose(fid);
  댓글 수: 1
Rik
Rik 2020년 9월 5일
You don't close the file if the character input is invalid, and you only read a single line. Also, as you're going character by character you don't really need the count function. And why do you store the file contents in fname? That name doesn't describe the contents at all.

Community Treasure Hunt

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

Start Hunting!

Translated by