explanation for script containing while loop

1 view (last 30 days)
I was given a script for reading data from a specific file, and although the script works, I don't understand one section of it, it reads as follows:
fid = fopen(Folder);% open file to read
fseek(fid,0,-1);% set read position to beginning of file,
Linechk = strcmp(fgetl(fid),'*END*');% read in line 1
while Linechk == 0
Linechk = strcmp(fgetl(fid),'*END*');% go through lines until '*END*'
end
The main aim here is to find the line where the string END appears, following the appearance of END the data is stored. The question I have is that Linechk is equal to 0 initially (i.e. before the loop), then in following the loop it is equal to 1. I can't understand why it returns 1, surely the while loop only repeats when Linechk is equal to 0 therefore how does the condition remain true when it equals 1?
Entire code:
fid = fopen(Folder);% open file to read
fseek(fid,0,-1);% set read position to beginning of file,
% fseek(fileID, offset, origin).
Linechk = strcmp(fgetl(fid),'*END*');% read in line 1
while Linechk == 0
Linechk = strcmp(fgetl(fid),'*END*');% go through lines until '*END*'
end
n = 1;
while 1;
tline = fgetl(fid);% read in line
if ~ischar(tline), break, end;% if end of file, break and finish
data(n,:) = sscanf(tline,'%f');% put numbers in a matrix (in columns)
n = n+1;
end
fclose(fid);% close file

Accepted Answer

Wayne King
Wayne King on 6 Nov 2012
I'm not sure I understand your question. Presumably, the first fgetl() call does not obtain the string END, so the string compare is 0. Then the while loop continues the string comparison until the string is END at which time the value of Linechk goes to 1.
Once you exit the loop the value of Linechk is 1. Or perhaps better stated, Linechk equal to 1 keeps the while loop from being evaluated.
  4 Comments
Richard
Richard on 6 Nov 2012
If I've understood this correctly, does that mean that following the while loop containing Linechk, the script will only be implemented for the remaining lines? For example, if Linechk is at line 9, then following this loop the script will perform some operation for line 10 and so on?
Walter Roberson
Walter Roberson on 6 Nov 2012
In such a situation, the fgetl() after that would fetch line 10, the one after that would fetch line 11, and so on.

Sign in to comment.

More Answers (0)

Categories

Find more on Entering Commands in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!