Professional Documents
Culture Documents
IO_screen
MATLAB Screen IO
MATLAB offers a number of ways for entering data, both on the screen or on file. Most of the syntax specifications are copied from the MATLAB help documentation.
displays prompt as a prompt on the screen, waits for input from the keyboard, and returns the value entered in user_entry. Entering any letter will create an error.
user_entry = input('prompt','s')
returns the entered string as a text variable rather than as a variable name or numerical value. This form will either take numbers or strings as entry; the user_entry variable will always be a string, even if a number is
IO_sreen_1
Function
Description entered.
The response to the input prompt can be any MATLAB expression, which is evaluated using the variables in the current workspace: if you enter a series of numerical values between [ ], these values will be considered as a array (this is a way to enter multiple data). This command is quick and useful for taking in a single line of keyboard entry.
Single value input An example of the use of input using numerical data is given in demo_input_01.m
% % use of the input function for an interactive approach % ht = input('Enter the height of the cylinders (m)? '); mx_diam = input('Enter the maximum diameter (m)? ');
When the 's' option is specified in the input command (input(prompt,s)), the entered string is returned as-is, as shown in demo_input_02.m. Matlab provides a set of string conversion functions that can be applied to extract the right data out of the string. Running the script produces this result
>> demo_input_02 Enter your data: this is a string Name Size Bytes inp_data 1x16 32
Class char
Attributes
Multiple value input An example of the use of input where multiple values can be entered is given in demo_input_03.m
% vec = input('Enter a set of numerical values (Enter the values between [ ])');
IO_sreen_2
TIP: Be sure to tell the user how to enter the data, especially if it is to be entered according to a specific format
and returns user input for multiple prompts in the cell array. prompt is a cell array containing prompt strings. dlg_title specifies a title for the dialog box. num_lines specifies the number of lines for each user-entered value. num_lines can be a scalar, column vector, or matrix. defAns specifies the default value to display for each prompt. defAns must contain the same number of elements as prompt and all elements must be strings.
listdlg
Create a list dialog box that enables the user to select one or more items from a list.
IO_sreen_3
Function
Description
[Selection,ok] = listdlg('ListString',S)
Selection is a vector of indices of the selected strings (in single selection mode, its length is 1). Selection is [ ] when ok is 0. ok is 1 if you click the OK button, or 0 if you click the Cancel button or close the dialog box. Double-clicking on an item or pressing Return when multiple items are selected has the same effect as clicking the OK button.
menu
the menu is displayed with a title is in the string variable 'mtitle' and the choices are string variables 'opt1', 'opt2', and so on. menu returns thenumber of the selected menu item
The inputdlg function This command is useful for taking in multiple lines from the keyboard all at once. The code for the inputdlg consists of two parts. The first creates the box with appropriate entry labels and title, and the second where the entries are converted to a form that is usable by Matlab. The four arguments (prompt, dlg_title, num_lines, and defAns) are variables; they must be defined in advance. The entries initially are returnded as a cell array and must be converted before they can be used in calculations. This is done using curly brackets {} to access the cell contents. Numerical data, characters, and file names can all be entered in a dialog box. Inside a dialog box you can move from field to field either with the mouse or by using the tab key. An example of the use of inputdlg is given in demo_inputdlg_01.m
% define the labels for the individual entries (between curly braces {}) prompt = { 'Temperature (K)', 'Pressure (Pa)', 'Filename'}; % define a title for the dialog box dlg_title = 'Data Entry for Problem 1'; % create the dialog box with the inputdlg command answer = inputdlg(prompt, dlg_title);
IO_sreen_4
with
predefined
default
values
is
given
in
% define the labels for the individual entries (between curly braces {}) prompt = { 'Entry 1', 'Entry 2', 'Entry 3'}; % define a title for the dialog box dlg_title = 'Data Entry for Problem 2'; % define default answers defAns = {'[1 2 3]', 'water', 'A'}; % create the dialog box with the inputdlg command answer = inputdlg(prompt, dlg_title, [3;2;1], defAns);
IO_sreen_5
The listdlg function If you have a list of options where can be chosen from, listdlg is the solution to go, it is a powerful function allows the user to select one or more choice(s) from a list of items. An example of the use of listdlg is given in demo_listdlg_01.m
% prepare the list of options to select from format_list = [{'fig - MATLAB figure'}, {'jpg - JPEG'}, ... {'bmp - Windows bitmap'}, {'emf - Enhanced metafile'}, ... {'eps - EPS Level 1'}, {'m - MATLAB M-file'}, ... {'pbm - Portable bitmap'}, {'pcx - Paintbrush 24-bit'}, ... {'pgm - Portable Graymap'}, {'png - Portable Network Graphics'}, ... {'ppm - Portable Pixmap'}, {'tif - TIFF (kompr.)'}]; [selection, was_OK] = listdlg('PromptString', 'Select file formats to save pictures:', ... 'ListSize', [250 200], 'SelectionMode', 'single', ... 'ListString', format_list);
IO_sreen_6
The menu function If a very limited choice of parameters is available to choose from, then the menu function can be used. The user has only to click on the right button, and the index of its choice is returned as a result An example of the use of menu is given in demo_menu_01.m
% ask the user the color of the plot k = menu('Choose a color','Red','Green','Blue'); % select the color depending on the index chosen color = ['r','g','b'];
IO_sreen_7
Output to screen
The disp function
Table IO_screen-3. disp function Function
disp
Description Display text or array disp(X) displays an array, without printing the array name. If X contains a text string, the string is displayed. Note that disp does not display empty arrays.
TIP: A combination of text and variables is possible by concatenation. A numerical variable has to be transformed into a string first.
% put some text onto the screen disp('This is text'); % put the numerical values onto the screen disp(x);
IO_sreen_8
% combine some text and numerical values (numerical values have to be % transformed into string format disp(['First element= ' num2str(x(1)) ' Last element= ' num2str(x(10))]);
Interactive IO
Several build in dialog boxes are already available in MATLAB. The most interesting are given in the table below. Check the MATLAB HELP for more on dialog boxes an the format to use. Table IO_screen-4. Some interesting built-in dialog boxes Function errordlg Description Create error dialog box
errordlg('errorstring','dlgname','on')
a dialog box named 'dlgname' that contains the string 'errorstring'. 'on' specifies whether to replace an existing dialog box having the same name. 'on' brings an existing error dialog having the same name to the foreground. helpdlg Display help dialog box
helpdlg('helpstring','dlgname')
displays a dialog box named 'dlgname' containing the string 'helpstring'. MATLAB wraps the text in 'helpstring' to fit the width of the dialog box. The dialog box remains on your screen until you press the OK button or the Enter key. questdlg Create question dialog box
button= questdlg('qstring','title','default')
'qstring' is a cell array or a string that automatically wraps to fit within the dialog box. 'title' is displayed in the dialog's title bar. The dialog has three default buttons, Yes, No, and Cancel. If the user presses one of these three buttons, button is set to the name of the button pressed. If the user presses the close button on the dialog, button is set to the empty string. If the user presses the Return key, button is set to 'Yes'. warndlg Create warning dialog box
IO_sreen_9
Function
Description
h = warndlg('warnstring','dlgname',createmode)
specifies whether a warning dialog box is modal or non-modal. Valid values for createmode are 'modal', 'non-modal', and 'replace'. If createmode is 'modal' or 'replace', the first available warning dialog box with the specified title is updated to reflect the new properties of the warning dialog box. All other such warning dialog boxes are deleted. If createmode is 'non-modal', the warning dialog box is not replaced and a new handle is created. The default value for createmode is 'non-modal'.
waitbar
TIP: When using errordlg, you have to make a choice if you want to popup error boxes for each error message or if you want to recycle the error box and have the same box displaying different error messages. This is done by specifying the third parameter 'on'.
TIP: The default mode of warndlg, will always create a new dialog box to show a new warning.
TIP: The waitbar command is especially useful, when you have forloops in your program, then you can visualise the time passing by.
An example of the use these different interactive dialog boxes is given in demo_interactivedlg_01.m
while 1 % ask the user to choose from the options k_choice = menu('Choose a dialog box','errordlg', 'helpdlg', 'warndlg', 'questdlg', 'waitbar', 'stop'); % use the switch switch k_choice
IO_sreen_10
case 1 % the same error dialog box is kept, watch the time changing str_1 = ['OUCH! This is the right time: ' datestr(now)]; errordlg(str_1, 'error_1', 'on'); case 2 % the same help dialog box is kept, watch the time changing, % click ok, to make the box dissappear str_2 = ['FYI: ' datestr(now)]; helpdlg(str_2, 'help_2'); case 3 % use an extra inputdlg window to enter data prompt = { 'enter a number'}; dlg_title = 'Data Entry for Problem warning'; defAns = {'4'}; % create the dialog box with the inputdlg command answer = inputdlg(prompt, dlg_title, 1, defAns); x = str2num(answer{1}); if ((x<0.1) | (x>1)) warndlg('Inadequate range. Value set to 0.5','Input Error') end case 4 % a default 2 button question box is used answer=questdlg('Do you want to install this software?'); if strcmp(answer,'Yes') license=['LICENSE this software is licensed free of charge for educational use ']; license=questdlg(license,'Do you agree?','No'); end case 5 % the computational loop takes 5 seconds h = waitbar(0,'Please wait...'); for i=1:5, pause(1); waitbar(i/5) end close(h) case 6 break end end
IO_sreen_11
Formatted IO
The disp function can be used to put a string onto the screen, if you want the string to have a specified format, the best way is to build up the string with the sprintf command and use format specifiers. The sprintf function
Table IO_screen-5. sprinf command Function sprintf Description Write formatted data to string
[s, errmsg] = sprintf(format, variables)
format is the specified format. It consists of a chain of format specifiers (place holders) variables is the list of variables to print according to the specified format. returns The result is returned in a string variable s. An error message string errmsg is returned if an error occurred. errmsg is an empty matrix if no error occurred.
The format specification used in MATLAB is based on the model used in the C programming language. Format specifiers (starting with %) are used to build the layout of the string to print.
IO_sreen_12
format placeholders Formatting takes place via placeholders within the format string. For example, if a program prints out a zip code, a prefix could be "ZIP code: ". To denote that an integer is to be shown immediately after that message, the format string "ZIP code: %d." is used. Table IO_screen-6. Format specification specification '% [flag][width][.precision]type' syntax for placeholder
%-12.5e
format
Table IO_screen-7.Optional format specifier Flag + Can be optional Will always denote the sign '+' or '-' of a number (the default is to omit the sign for positive numbers). Only applicable to numeric types. Will left-align the output of this placeholder (the default is to right-align the output). Pad arguments with leading zeros '0' (instead of spaces) to left fill a fixed length field.
Width number Causes to pad the output of this placeholder with spaces until it is at least number characters wide. If number has a leading '0', then padding is done with '0' characters.
.Precision number For non-integral numeric types, causes the decimal portion of the output to be expressed in at least number digits. For the string type, causes the output to be truncated at number characters.
IO_sreen_13
Table IO_screen-8. Type format specifier Type c d E, e Print a char (character). Print an int as a signed decimal number. rint a double value in standard form ([]d.ddd e[+/-]ddd). 'e' uses lower-case letters, 'E' uses upper-case letters. Print a double in normal (fixed-point) notation. Print a double in either normal or exponential notation, whichever is more appropriate for its magnitude. 'g' uses lower-case letters, 'G' uses upper-case letters. This type differs slightly from fixed-point notation in that insignificant zeroes to the right of the decimal point are not included. Also, the decimal point is not included on whole numbers. Print an unsigned int in octal. Print a character string. Print an unsigned int as a hexadecimal number. 'x' uses lower-case letters and 'X' uses upper-case.
G, g
o s X, x
\n \t \b \r \f
IO_sreen_14
\\ %%
Printing a string Strings will be pritned using the %Ls format specifier. L specifies the length of the string. The string will be right-aligned (if the string is smaller than L characters). The flag - will left align the string. If the length is not specified, the length will be equal to the length of the string variable to be printed.
% most simple format s = sprintf('Hello world \n'); disp(s) % changing the format - use s type str_hello = 'Hello world'; sprintf('%s',str_hello) % default right alignment sprintf('%30s',str_hello) % left alignment sprintf('%-30s',str_hello) % what happens if the specified length is smaller than the string? % the string will still be printed completely sprintf('%5s',str_hello) % The "%s" code inserts text in the template. fileName = 'home/assignments/a1.txt'; s = sprintf('My first assignment is in the file, "%s" \n', fileName); disp(s) % digit string specifying the minimum number of digits to be printed s = sprintf('%5c','matlab'); disp(s) s = sprintf('\n'); disp(s) % watch out where to place the new line escape sequence s = sprintf('%5c \n','matlab'); disp(s)
IO_sreen_15
m a t l a b matlab
Printing numbers A real number will be printed following the %+- L.D type, format. L is the total length of the printed number (decimal point included). D is the number of digits to be printed to the right of the decimal point. The default alignment is right, putting a - in front will left align.
IO_sreen_16
% Numbers can be inserted in the text. "%f is a code for insert% ing a number. s = sprintf('First number = %f, next number = %f \n', 11, 2/3); disp(s) % The number of places after the decimal point can be % controlled: "%.2f" produces two digits after the point. s = sprintf('First number = %.2f, next number = %.9f \n', 1/3, 1/3); disp(s) % the same numer, but printed with the exponential type e s = sprintf('First number = %.2e, next number = %.9E \n', 1/3, 1/3); disp(s)
% The special sequence, "\n", starts a new line. s = sprintf(' Pi to 2 places %.2f \n Pi to 12 places %.12f \n', pi,pi); disp(s) % The "%e" code displays numbers in scientific notation: s = sprintf(' Pi = %e Million = %e 1/700 = %E \n', pi, 1E6, 1/700); disp(s) % For more (or fewer) places after the decimal point X=9.12345678901234E-8; s = sprintf(' 2 places %.2e; 14 places %.14e \n', X,X); disp(s) % A digit string including a period (.) s = sprintf('%10.4f',123.456); disp(s)
% printing 100.35 with different type specifiers sprintf('%5g',100.35) sprintf('%d',100.35) % printing 100 with different type specifiers sprintf('%c',100) sprintf('%s',100) sprintf('%d',100) sprintf('%g',100) sprintf('%6.2f',100) sprintf('%6.2e',100) sprintf('%o',100)
IO_sreen_17
14 places 9.12345678901234e-008
ans = 1.003500e+002
ans = d Warning: The argument for the %s format specifier must be of type char (a string). > In demo_format_02 at 53 ans = d
ans = 100
ans = 100
ans = 100.00
ans = 1.00e+002
IO_sreen_18
ans = 144
TIP : sprintf can be used as a vector command, if the variable is not a scalar, the format is utilized for the elements of the array (column by column)
% a vector x = 1:10; s = sprintf(' %d ,',x); disp(s) % a matrix (column wise) x = [1 2; 3 4]; s = sprintf(' %d ,',x); disp(s) % building a 2-column structure % the data is stored in a vector z = []; x = 1:10; for i=1:length(x) z = [z ,x(i), sin(x(i))]; end; s = sprintf('%04.1f | %+8.6e \n ', z ); disp(s)
IO_sreen_19
The fprintf command is analogous to the sprintf command and is used for a formatted print into a file.
IO_sreen_20