Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Progress bar

Asked by NUR KHAIRUNNISA rahimi on 24 Nov 2011

I have a list of words(maybe consist of 250000) where I would like to remove the plural form of all the word ending with s. While I am doing that, I have to dispplay a progress bar on the screen.

So this is what I have so far. However,

 for iword=1:length(wordbank)

if ~isempty(wordbank{iword})&& strcmp(wordbank{iword}(end), 's') no_plurals=no_plurals+1; wordbank2{iword} = wordbank{iword}(1:(end-1));

       progBar=(iword/(length(wordbank)))*100;
    end
fprintf('%d\n',progBar);

however, my program only show the end result of the process, which is 100% and not incrementing the value while processing from 1% to 100%. Can you help me fix this? Thank you.

0 Comments

Products

No products are associated with this question.

3 Answers

Answer by Naz

Naz (view profile)

on 24 Nov 2011

put

fprintf('%d\n',progBar);

inside the loop

0 Comments

Naz

Naz (view profile)

Answer by Jan Simon

Jan Simon (view profile)

on 24 Nov 2011

Cleaned a little bit:

fprintf('    ');
fmt = [char([8,8,8,8]), '%3d%%'];
singular = 0;  % Nicer than no_plural
nword = length(wordbank);
wordbank2 = cell(1, nword);
update = 1;
for iword = 1:nword
  word = wordbank{iword};
  if ~isempty(word) && word(end) == 's'
    singular = singular + 1;
    wordbank2{iword} = word(1:(end-1));
    progBar = 100 * iword / nword;
    if progBar > update
      fprintf(fmt, update);
      drawnow;
      update = round(progBar) + 1;
    end
  end
end

EDITED: overwrite the percentage string

But there are much faster methods. E.g. see FEX: strncmpr.

index     = strncmpr(wordbank, 's', 1);
wordbank2 = wordbank(~index);

 

The timings (Matlab 2009a, Win7, 250'000 words with 6 ot 7 characters):

 Loop with progress display:    2.0 sec
 Loop without progress display: 0.8 sec
 strncmpr:                      0.02 sec

Are you sure you want to waste the most time for updating the progress display?

4 Comments

Jan Simon

Jan Simon (view profile)

on 24 Nov 2011

If you copy and paste my program, you do not get this output. Therefore I cannot know, how your out is created.

I know it will take more time to do the progress display but it is a requirement in the program I am writing. I have no choice but to include it.
Alright, I tried to include these lines in my code according to my program
progBar = 100 * iword / nword;
if progBar > update
fprintf('%d %%\n', update);
drawnow;
update = round(progBar) + 1;
end
and this what came out

5 %
LOAD WORD BANK
Loading word bank: none....started
Loading word bank: sample_bank_small_awords.
Successfully loaded 25 words from the word bank file
Removing invalid words..4 words were successfully removed.
Removing duplicate words and sorting...done
Removed 2 duplicate words
Removed 2 plural word
Building word indices and calculating beginning letter counts...done
Calculating word length counts...done
Final word count:23
Press ENTER
LOAD WORD BANK
Loading word bank: none....started
Loading word bank: sample_bank_small_awords.
Successfully loaded 25 words from the word bank file
Removing invalid words..4 words were successfully removed.
Removing duplicate words and sorting...done
Removed 2 duplicate words
Removed 2 plural word
Building word indices and calculating beginning letter counts...done
Calculating word length counts...done
Final word count:23
Press ENTER
LOAD WORD BANK
Loading word bank: none....started
Loading word bank: sample_bank_small_awords.
Successfully loaded 25 words from the word bank file
Removing invalid words..4 words were successfully removed.
Removing duplicate words and sorting...done
Removed 2 duplicate words
Removed 2 plural word
Building word indices and calculating beginning letter counts...done
Calculating word length counts...done
Final word count:23
Press ENTER
17 %
LOAD WORD BANK
Loading word bank: none....started
Loading word bank: sample_bank_small_awords.
Successfully loaded 25 words from the word bank file
Removing invalid words..4 words were successfully removed.
Removing duplicate words and sorting...done
Removed 3 duplicate words
Removed 3 plural word
Building word indices and calculating beginning letter counts...done
Calculating word length counts...done
Final word count:22
Press ENTER

from what I can see, it is not doing what I'd like it to do though.

Jan Simon

Jan Simon (view profile)

on 24 Nov 2011

I've inserted some code to overwrite the percentage string inplace.
I do not know, why your program is not doing, what you expect. But I do neither know the program nor what you expect. Perhaps you want to explain both? But as far as I can see, the original question is answered.

Jan Simon

Jan Simon (view profile)

Answer by Sameer Kumthekar on 14 Dec 2011

Hi , I think you can use waitbar something like this..

h = waitbar(0,'Removing the plural form of all the words...Please wait..!');

steps = 100; for step = 1:steps code here h = waitbar(step/steps,sprintf('%d%%',step)); end close(h);

Please check once! Sameer K

0 Comments

Contact us