MATLAB IO screen

advertisement
ICT Onderzoek LUDIT
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.
Input from screen
The input function
MATLAB can prompt you for input at any time by using the input command. This
command will display a text string, if specified, and waits for input.
Table IO_screen-1. input function
Function
input
Description
Prompts user for input
user_entry = input('prompt')
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
ICT Onderzoek LUDIT
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)? ');
Running the script produces this result
>> demo_input_01
Enter the height of the cylinders (m)? 5
Enter the maximum diameter (m)? 6
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
Attributes
char
inp_data =
this is a string
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
ICT Onderzoek LUDIT
Running the script produces this result
>> >> demo_input_03
Enter a set of numerical values (Enter the values between [ ])[1 2 3]
mean of the values entered:
mean_calc =
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
Input dialog boxes
Besides the standard input command, MATLAB also provides a few dialog boxes that
can be used to enter data interactively. These graphical elements are easy to include in
(existing) MATLAB code; this approach is different from the MATLAB GUI way!
MATLAB is very well suited for providing a proof of concept. If you want to
demonstrate quickly that a concept is fundamentally correct, you code it and debug it
quickly in MATLAB. Most of the times these programs have some tunable parameters
which need to be adjusted by the user. It is of no good practice to let the user dig into
your code to change a parameter, but it is preferable that these values are entered using a
dialog box. MATLAB's own ready-to-go dialog boxes are almost always sufficient for
this.
Table IO_screen-2. Input dialog boxes
Function
inputdlg
Description
Create input dialog box
answer = inputdlg(prompt,dlg_title,num_lines,defAn
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
IO_sreen_3
Create a list dialog box that enables the user to select one or
more items from a list.
ICT Onderzoek LUDIT
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
Generate menu of choices for user input
k = menu('mtitle','opt1','opt2',...,'optn')
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);
Running the program produces this result
IO_sreen_4
ICT Onderzoek LUDIT
Figure IO_screen-1. dialog box demo_inputdlg_01
A more complex example,
demo_inputdlg_02.m
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);
Running the program produces this result
IO_sreen_5
ICT Onderzoek LUDIT
Figure IO_screen-2.dialog box demo_inputdlg_02
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);
Running the program produces this result
IO_sreen_6
ICT Onderzoek LUDIT
Figure IO_screen-3. dialog box demo_listdlg_01
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'];
Running the program produces this result
IO_sreen_7
ICT Onderzoek LUDIT
Figure IO_screen-4. menu dialog box demo_menu_01.m
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.
An example of the use of menu is given in demo_menu_01.m
% put some text onto the screen
disp('This is text');
% put the numerical values onto the screen
disp(x);
IO_sreen_8
ICT Onderzoek LUDIT
% 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
Description
errordlg
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
IO_sreen_9
Create warning dialog box
ICT Onderzoek LUDIT
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'.
Open waitbar
waitbar
h = waitbar(x,'title')
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
ICT Onderzoek LUDIT
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
Running the program produces this result
IO_sreen_11
ICT Onderzoek LUDIT
Figure IO_screen-5. Different interactive dialog boxes
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
Description
sprintf
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
ICT Onderzoek LUDIT
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
a
format
%-12.5e
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).
0
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
IO_sreen_13
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.
ICT Onderzoek LUDIT
Table IO_screen-8. Type format specifier
Type
c
Print a char (character).
d
Print an int as a signed decimal number.
E, e
rint a double value in standard form ([]d.ddd e[+/-]ddd). 'e' uses lower-case
letters, 'E' uses upper-case letters.
f
Print a double in normal (fixed-point)
notation.
G, g
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.
o
Print an unsigned int in octal.
s
Print a character string.
X, x
Print an unsigned
int as a
hexadecimal number. 'x' uses lower-case
letters and 'X' uses upper-case.
Table IO_screen-9. Escape sequences
\n
New line
\t
Horizontal tab
\b
Backspace
\r
Carriage return
\f
Form feed
IO_sreen_14
ICT Onderzoek LUDIT
\\
print a backslash ‘\’ symbol
%%
%% print a percent symbol ‘%’
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.
An example of the string formating is given in demo_format_01.m
% 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
ICT Onderzoek LUDIT
s = sprintf('%c','matlab');
disp(s)
s = sprintf('\n');
disp(s)
Running the program produces this result
>> demo_format_01
Hello world
ans =
Hello world
ans =
Hello world
ans =
Hello world
ans =
Hello world
My first assignment is in the file, "home/assignments/a1.txt"
m
a
t
l
a
b
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
ICT Onderzoek LUDIT
An example of the string formating is given in demo_format_02.m
%
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)
Running the program produces this result
IO_sreen_17
ICT Onderzoek LUDIT
>> demo_format_02
First number = 11.000000,
First number = 0.33,
next number = 0.666667
next number = 0.333333333
First number = 3.33e-001,
next number = 3.333333333E-001
Pi to 2 places 3.14
Pi to 12 places 3.141592653590
Pi = 3.141593e+000
Million = 1.000000e+006
2 places 9.12e-008;
1/700 = 1.428571E-003
14 places 9.12345678901234e-008
123.4560
ans =
100.35
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
ICT Onderzoek LUDIT
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)
An example of the string formating is given in demo_format_03.m
% 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)
Running the program produces this result
>> demo_format_03
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,
1 , 3 , 2 , 4 ,
01.0 | +8.414710e-001
02.0 | +9.092974e-001
03.0 | +1.411200e-001
04.0 | -7.568025e-001
05.0 | -9.589243e-001
06.0 | -2.794155e-001
07.0 | +6.569866e-001
08.0 | +9.893582e-001
09.0 | +4.121185e-001
10.0 | -5.440211e-001
IO_sreen_19
ICT Onderzoek LUDIT
The fprintf command is analogous to the sprintf command and is used for a
formatted print into a file.
IO_sreen_20
Download