Read Excel File in Matlab and Have Columns Into Variables
So far, we accept indirectly discussed several methods of getting input information from the user, and several methods of outputting the result in a MATLAB program. This note attempts at formalizing all the previous discussions and introduce more than general efficient methods of code interaction with users.
Methods of information input/output in MATLAB
Permit'southward begin with an instance code that explains the meaning of input/output (I/O) in MATLAB,
a = 0.1 ; b = one ; x = 0.six ; y = a * exp ( b * ten ) In the above code, a, b, x are examples of input information to code, and y is an example of lawmaking output. In such cases as in the above, the input data is said to be hardcoded in the program.
Input information can exist fed to a MATLAB program in four different ways,
- let the user reply questions in a dialog in MATLAB concluding window,
- let the user provide input on the operating system command line,
- let the user write input data in a graphical interface,
- allow the user provide input data in a file.
There are 2 major methods of information output,
- writing to the terminal window, as previously washed using
disp()function, or, - writing to an output file.
We accept already extensively discussed printing output to the terminal window. Reading from and writing data to file is also easy as we volition come across here.
Input/output from MATLAB terminal window
We accept already introduced and used this method frequently in the by, via the MATLAB's built-in function input(). If nosotros were to get the input data for the above code via the last window, an case approach would be the following,
datain = input ( 'input [a,b,c]: ' ); a = datain ( 1 ); b = datain ( 2 ); x = datain ( 3 ); y = a * exp ( b * ten ) input a,b,c: [0.i, ane, 0.6] y = 0.1822 One could also read the input values as string ans then convert them to real values or parse the input using i of MATLAB's built-in functions, for example,
>> datain = input ( 'input [a,b,c]: ' , 's' ); input [ a , b , c ]: [ 0.1 , 1 , 0.half dozen ] >> grade ( datain ) >> datain = str2num ( datain ) datain = 0.1000 1.0000 0.6000 >> a = datain ( 1 ); >> b = datain ( 2 ); >> x = datain ( 3 ); >> y = a * exp ( b * ten ) Input/output data from operating system's command line
This arroyo is near popular in Unix-like environments, where most users are accustomed to using the Fustigate command line. Notwithstanding, it tin can be readily used in Windows cmd environment as well. For this arroyo, we accept to invoke MATLAB from the figurer operating system'due south control line, that is, Fustigate in Linux systems, and cmd in Windows,
start matlab -nosplash -nodesktop -r "testIO" Then a MATLAB command-line window opens in your calculator similar the following that runs automatically your code (stored in testIO.m).
In the above control, we are starting MATLAB from the Bone control line with our own choice of optional arguments for MATLAB. You can specify startup options (also called control flags or control-line switches) that instruct the MATLAB program to perform sure operations when you kickoff it. On all platforms, specify the options every bit arguments to the MATLAB command when you kickoff at the operating system prompt. For example, the post-obit starts MATLAB and suppresses the display of the splash screen (a splash screen is a graphical control element consisting of a window containing an image, a logo, and the current version of the software. A splash screen usually appears while a game or program is launching),
The flag -nodesktop effect in opening merely the MATLAB command line, and no MATLAB Graphical user interface (GUI) simply similar the figure above. Finally, the flag -r executes the MATLAB file that appears correct afterwards information technology, specified equally a string or as the proper name of a MATLAB script or function. If a MATLAB statement is MATLAB code, you should enclose the string with double quotation marks. If a MATLAB argument is the name of a MATLAB function or script, do not specify the file extension and practise not use quotation marks. Any required file must exist on the MATLAB search path or in the startup folder. You can too set MATLAB'south working folder right from the control-line using -sd flag. You tin can find find more than information about all possible flags hither. On Windows platforms, you tin precede a startup option with either a hyphen (-) or a slash (/). For case, -nosplash and /nosplash are equivalent.
Note that yous can besides quote MATLAB on the Bone command line, along with the proper name of the script yous want to run. For instance, suppose you wanted to run the original script,
a = 0.i ; b = 1 ; 10 = 0.half-dozen ; y = a * exp ( b * x ) However, at present with a, b, x, given at runtime. You could write a script file exam.yard that contains,
and give the variables values at runtime, on Bone command line, like the following,
matlab -nosplash -nodesktop -r "a = 0.ane; b = 1; 10 = 0.6; testIO" The figure beneath shows a screen-shot illustrating the output of the in a higher place command.
Input/output data from a Graphical User Interface
This method of inputting data is washed by amalgam a Graphical User Interface (GUI) which opens and takes input from the user. This is probably one of the almost user-friendly methods for users to input data. Y'all can do this in MATLAB for case by using the built-in office inputdlg() which creates a dialog box that gathers user input. But this method of data drove is across the scope of our class. More information near this can exist institute here.
Input/output data from file
In cases where the input/output information is large, the command-line arguments and input from the terminal window are not efficient anymore. In such cases, the well-nigh mutual approach is to let the lawmaking read/write information from a pre-existing file, the path to which is nigh oft given to the code via the Bone control line or MATLAB final window.
There are many methods of importing and exporting data to and from MATLAB, only some of which we volition discuss here. For more than information run across here, here, and hither. The post-obit tabular array shows some of the most important import functions in MATLAB, which we will talk over here also.
| Function | Description |
|---|---|
load() | Load MATLAB variables from file into MATLAB workspace |
save() | save MATLAB variables from MATLAB workspace into a MATLAB `.mat` file. |
fscanf() | Read data from text file |
fprintf() | Write data to a text file |
dlmread() | Read ASCII-delimited file of numeric information into matrix |
dlmwrite() | Write a numeric matrix into ASCII-delimited file |
csvread() | Read comma-separated value (CSV) file |
csvwrite() | Write values of a matrix into a comma-separated (CSV) file |
xlswrite() | Read Microsoft Excel spreadsheet file |
xlswrite() | write information into a Microsoft Excel spreadsheet file |
readtable() | Create table from file |
writetable() | Write table to file |
imread() | Read prototype from graphics file |
imwrite() | Write image to graphics file |
importdata() | Load data from file |
textscan() | Read formatted information from text file or string |
fgetl() | Read line from file, removing newline characters |
fread() | Read data from binary file |
fwrite() | Write data to binary file |
type() | Display contents of file |
Loading/saving MATLAB workspace variables
MATLAB has two useful functions that can save the workspace variables into special MATLAB .mat files, to exist later load once more into the same or another MATLAB workspace for farther work or manipulation. The function save() saves workspace variables to a given file. The most useful options for this part are the post-obit,
salve ( filename ) save ( filename , variables ) save ( filename , variables , fmt ) -
save(filename)saves all variables from the electric current workspace in a MATLAB formatted binary file chosen MAT-file with the given proper namefilename. If the filefilenameexists,salvage()overwrites the file. -
save(filename,variables)saves but the variables or fields of a structure array specified byvariables. For case,p = rand ( ane , 10 ); q = ones ( x ); save ( 'pqfile.mat' , 'p' , 'q' )volition create the binary MAT file pqfile.mat which contains the two variables.
-
salve(filename,variables,fmt)saves the requested variables with the file format specified pastfmt. The variables statement is optional. If you do non specify variables, the salve office saves all variables in the workspace. File format, specified as one of the following. When using the command form of save, you lot do not demand to enclose the input in single or double quotes, for example,salve myFile.txt -ascii -tabs. For instance,p = rand ( i , ten ); q = ones ( x ); salvage ( 'pqfile.txt' , 'p' , 'q' , '-ascii' )will create an ASCII text file pqfile.txt which contains the two variables
pandq.
| Value of fmt | File Format |
|---|---|
'-mat' | Binary MAT-file format. |
'-ascii' | Text format with eight digits of precision. |
'-ascii','-tabs' | Tab-delimited text format with eight digits of precision. |
'-ascii','-double' | Text format with 16 digits of precision. |
'-ascii','-double','-tabs' | Tab-delimited text format with 16 digits of precision. |
Similarly, ane tin can reload the same files into MATLAB workspace again if needed, for instance using MATLAB load() part,
>> load ( 'pqfile.txt' ) >> pqfile pqfile = Columns 1 through 8 0.0975 0.2785 0.5469 0.9575 0.9649 0.1576 0.9706 0.9572 1.0000 1.0000 1.0000 one.0000 1.0000 1.0000 one.0000 1.0000 1.0000 ane.0000 one.0000 one.0000 i.0000 ane.0000 i.0000 1.0000 1.0000 one.0000 1.0000 i.0000 i.0000 ane.0000 1.0000 1.0000 i.0000 ane.0000 ane.0000 1.0000 i.0000 one.0000 one.0000 1.0000 1.0000 1.0000 i.0000 1.0000 1.0000 1.0000 1.0000 ane.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 i.0000 ane.0000 one.0000 1.0000 1.0000 i.0000 one.0000 1.0000 ane.0000 i.0000 one.0000 1.0000 1.0000 i.0000 1.0000 1.0000 1.0000 1.0000 ane.0000 ane.0000 1.0000 ane.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 i.0000 1.0000 1.0000 Columns 9 through 10 0.4854 0.8003 i.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 ane.0000 i.0000 1.0000 ane.0000 1.0000 one.0000 1.0000 ane.0000 ane.0000 1.0000 1.0000 1.0000 1.0000 But note that upon loading the Ascii file, the information nigh the individual variables is lost. Past contrast, loading data using the MAT file will preserve the structure of the variables,
>> load ( 'pqfile.mat' ) >> p p = Columns one through 8 0.1419 0.4218 0.9157 0.7922 0.9595 0.6557 0.0357 0.8491 Columns 9 through 10 0.9340 0.6787 q = one i i one ane 1 i one i 1 1 1 1 i 1 i i i 1 1 1 1 1 1 one 1 i i 1 1 1 1 one 1 1 one 1 1 1 1 1 1 1 1 one one 1 1 one ane 1 i 1 1 1 1 ane one 1 1 1 1 ane 1 1 1 1 1 1 1 1 ane i 1 ane i 1 1 ane ane 1 1 i 1 1 i 1 i 1 1 1 1 i i i 1 ane 1 one ane Reading/writing a formatted file using fscanf() and fprintf()
At that place are numerous methods of reading the contents of a file in MATLAB. The most lilliputian and probably least pleasing method is through MATLAB's built-in office fscanf(). To read a file, say this file, you will have to first open it in MATLAB,
fileID = fopen ( 'information.in' , 'r' ); formatSpec = '%f' ; A = fscanf ( fileID , formatSpec ) fclose ( fileID ); Note that unlike the C linguistic communication'south fscanf(), in MATLAB fscanf() is vectorized significant that information technology can read multiple lines all at once. Here, the attribute 'r' states that the file is opened to read it (vs writing, or some other purpose). A listing of bachelor options for fopen() is the following,
| Attribute | Description |
|---|---|
'r' | Open file for reading. |
'w' | Open or create new file for writing. Discard existing contents, if any. |
'a' | Open or create new file for writing. Append data to the finish of the file. |
'r+' | Open file for reading and writing. |
'due west+' | Open up or create new file for reading and writing. Discard existing contents, if any. |
'a+' | Open or create new file for reading and writing. Suspend data to the finish of the file. |
'A' | Open file for appending without automatic flushing of the current output buffer. |
'W' | Open file for writing without automatic flushing of the current output buffer. |
The general syntax for reading an array from an input file using fscanf() is the following,
array = fscanf ( fid , format ) [ array , count ] = fscanf ( fid , format , size ) where the optional statement size specifies the amount of data to be read from the file. There are three versions of this argument,
-
n: Reads exactlynorthwardvalues. After this statement,arraywill be a column vector containingnorthvalues read from the file. -
Inf: Reads until the end of the file. After this statement,arraywill exist a cavalcade vector containing all of the data until the end of the file. -
[due north g]: Reads exactly, $n\times chiliad$ values, and format the data as an $northward\times m$ array. For example, consider this file, which contains 2 columns of numeric information. One could read this data usingfscanf()similar the following,>> formatSpec = '%d %f' ; >> sizeA = [ 2 Inf ]; >> fileID = fopen ( 'nums2.txt' , 'r' ); >> A = transpose ( fscanf ( fileID , formatSpec , sizeA )) >> fclose ( fileID );A = 1.0000 2.0000 3.0000 4.0000 5.0000 0.8147 0.9058 0.1270 0.9134 0.6324
Now suppose you perform some on performance on A, say the elemental multiplication of A by itself. Then you want to store (suspend) the result into another file. You can do this using MATLAB part fprintf(),
>> formatSpec = '%d %f \north' ; >> fileID = fopen ( 'nums3.txt' , 'due west+' ); >> fprintf ( fileID , formatSpec , A .* A ); >> fclose ( fileID ); The option w+ tells MATLAB to store the result in a file named num3.txt, and if the file does already exist, then append the result to the end of the current existing file. To see what formatting specifiers you can use with MATLAB fscanf() and fprintf(), see this folio.
MATLAB also has some rules to skip characters that are unwanted in the text file. These rules are really details that are specific to your needs and the best approach is to seek the solution to your specific trouble past searching MATLAB'due south manual or the web. For example, consider this file which contains a ready of temperature values in degrees (including the Celsius degrees symbol). One manner to read this file and skipping the degrees symbol in MATLAB could be then the following set of commands,
>> fileID = fopen ( 'temperature.dat' , 'r' ); >> degrees = char ( 176 ); >> [ A , count ] = fscanf ( fileID , [ '%d' degrees 'C' ]) >> fclose ( fileID ); A = 78 72 64 66 49 count = v This method of reading a file is very powerful only rather detailed, low-level and cumbersome, peculiarly that you accept to ascertain the format for the content of the file accordingly. Most often, other higher-level MATLAB's built-in function come to rescue us from the hassles of using fscanf(). For more information about this role though, if yous really want to stick to it, see here. Some important MATLAB special characters (escape characters) that can also announced in fprintf() are also given in the following tabular array.
| Symbol | Effect on Text |
|---|---|
'' | Single quotation mark |
%% | Single pct sign |
\\ | Single backslash |
\northward | New line |
\t | Horizontal tab |
\v | Vertical tab |
Reading/writing data using dlmread()/dlmwrite() and csvread()/csvwrite()
The methods discussed to a higher place are rather archaic, in that they require a bit of attempt past the user to know something near the structure of the file and its format. MATLAB has a long listing of advanced IO functions that tin can handle a broad diverseness of information file formats. Two of the about common functions are dedicated specifically to read data files containing delimited data sets: csvread() and dlmread().
In the field of scientific computing, a Comma-Separated Values (CSV) data file is a type of file with extension .csv, which stores tabular data (numbers and text) in plain text format. Each line of the file is called a information record and each tape consists of one or more fields, separated by commas. The use of the comma as a field separator is the source of the name for this file format.
Now suppose you wanted to read ii matrices whose elements were stored in CSV format in two csv data files matrix1.csv and matrix2.csv. You lot can accomplish this task simply past calling MATLAB's built-in csv-reader function called csvread(filename). Here the discussion filename is the path to the file in your local difficult drive. For example, download these two given csv files above in your MATLAB working directory and then try,
>> Mat1 = csvread ( 'matrix1.csv' ); >> Mat2 = csvread ( 'matrix2.csv' ); Then suppose you lot desire to multiply these two vectors and store the result in a new variable and write it to a new output CSV file. You could do,
Mat3 = Mat1 * Mat2 ; >> csvwrite ( 'matrix3.csv' , Mat3 ) which would output this file: matrix3.csv for you.
Alternatively, you could also utilise MATLAB's congenital-in functions dlmread() and dlmwrite() functions to do the same things as above. These two functions read and write ASCII-delimited file of numeric data. For case,
>> Mat1 = dlmread ( 'matrix1.csv' ); >> Mat2 = dlmread ( 'matrix2.csv' ); >> Mat3 = Mat1 * Mat2 ; >> dlmwrite ( 'matrix3.dat' , Mat3 ); Note that, dlmread() and dlmwrite() come up with an optional argument delimiter of the following format,
>> dlmread ( filename , delimiter ) >> dlmwrite ( filename , matrixObject , delimiter ) where the argument delimiter is the field delimiter character, specified every bit a grapheme vector or string. For example, in the above case, the delimiter is comma ','. In other cases, y'all could, for example, apply white infinite ' ', or '\t' to specify a tab delimiter, and and then on. For example, y'all could have equally written,
>> dlmwrite ( 'matrix4.dat' , Mat3 , '\t' ); to create a tab-delimited file named matrix4.dat.
Reading/writing information using xlsread() and xlswrite()
Once information becomes more than circuitous than simple numeric matrices or vectors, then we need more complex MATLAB functions for IO. An example of such a case is when yous take stored your information in a Microsoft Excel file. For such cases, you can use xlsread(filename) to read the file specified past the input argument filename to this role. We will, subsequently, see some instance usages of this role in homework. Similarly, you could write information into an excel file using xlswrite(). For instance,
>> values = { 1 , 2 , iii ; 4 , v , '10' ; seven , 8 , 9 }; >> headers = { 'Get-go' , '2d' , 'Third' }; >> xlswrite ( 'XlsExample.xlsx' ,[ headers ; values ]); would create this Microsoft Excel file for you.
Reading/writing data using readtable() and writetable()
Another important and highly useful set of MATLAB functions for IO are readtable() and writetable(). The function readtable() is used to read data into MATLAB in the grade of a MATLAB tabular array data type. For example, you could read the same Excel file that we created above into MATLAB using readtable() instead of xlsread(),
>> XlsTable = readtable ( 'XlsExample.xlsx' ) XlsTable = Start Second 3rd _____ ______ _____ 1 2 'three' 4 five 'x' vii 8 '9' Reading and writing paradigm files using imread() and imwrite()
MATLAB has a actually broad range of input/output methods of data. Nosotros have already discussed some of the most useful IO approaches in the previous sections. For graphics files, nonetheless, none of the previous functions are useful. Suppose you lot wanted to import a jpg or png or some other type graphics file into MATLAB to further process it. For this purpose, MATLAB has the built-in function imread() which can read paradigm from an input graphics file. For example, to read this image file in MATLAB, you could do,
>> homer = imread ( 'homer.jpg' ); >> imshow ( homer ) to get the following figure in MATLAB,
Now suppose you desire to convert this effigy to black-and-white and save it as a new figure. Yous could do,
>> homerBW = rgb2gray ( homer ); >> imshow ( homerBW ) >> imwrite ( homerBW , 'homerBW.png' ); to get this black and white version of the above image, now in png format (or in any format you lot may wish, that is also supported past MATLAB).
Reading a file using importdata()
Probably, the most general MATLAB function for data input is importdata(). This function can be used to import well-nigh any type of data and MATLAB is capable of automatically recognizing the correct format for reading the file, based on its extension and content. For example, you lot could read the same image file above, using importdata(),
>> newHomer = importdata ( 'homer.jpg' ); >> imshow ( newHomer ) to import it to MATLAB. At the aforementioned fourth dimension, y'all could too utilise it to import data from the excel file that we created above, XlsExample.xlsx,
>> newXls = importdata ( 'XlsExample.xlsx' ) newXls = data: [3x3 double] textdata: {3x3 cell} colheaders: {'First' '2nd' 'Third'} or similarly, read a csv-delimited file like matrix3.csv,
>> newMat3 = importdata ( 'matrix3.csv' ) newMat3 = Columns 1 through 7 62774 103230 77362 87168 65546 64837 100700 104090 143080 104700 116500 108250 105400 111110 80351 112850 89506 113890 106030 70235 110620 99522 134130 73169 134190 117710 92878 94532 59531 102750 91679 111350 80539 84693 96078 58504 76982 52076 91449 80797 69246 61569 76170 104310 93950 114860 89779 101530 87014 91610 118380 90636 107840 91120 90247 84871 85943 110670 73451 114410 100840 111660 77908 82570 94427 57213 81175 79305 78718 68662 Columns viii through 10 79446 78102 106570 102950 116850 137810 113210 108800 128700 93013 119130 132700 95750 100980 100450 67044 80635 78006 86355 103760 119710 92649 98589 132660 73117 109270 99401 65283 66888 114030 In general, you tin can utilize importdata() to read MATLAB binary files (MAT-files), ASCII files and Spreadsheets, likewise as images and audio files.
Reading a file using fgetl()
Another useful MATLAB function for reading the content of a file is fgetl() which can read a file line by line, removing the new line characters \n from the finish of each line. The entire line is read equally a string. For instance, consider this file. 1 could read the content of this text file using the office fgetl() similar the following,
>> fid = fopen ( 'text.txt' ); >> line = fgetl ( fid ) % read line excluding newline character line = The main benefit of using a weakly-typed linguistic communication is the ability to practice rapid prototyping. The number of lines of lawmaking required to declare and use a dynamically allocated assortment in C (and properly clean upward after its use) is much greater than the number of lines required for the same process in MATLAB. >> line = fgetl ( fid ) % read line excluding newline character >> line = fgetl ( fid ) % read line excluding newline character line = Weak typing is likewise good for code-reuse. You can code a scalar algorithm in MATLAB and with relatively little effort alter it to piece of work on arrays also every bit scalars. The fact that MATLAB is a scripted instead of a compiled language too contributes to rapid prototyping. Reading data from web using webread()
In today'south world, it oftentimes happens that the information you demand for your research is already stored somewhere on the globe-wide-web. For such cases, MATLAB has built-in methods and functions to read and import data or even a webpage. For case, consider this folio on this form's website. It is indeed a text file containing a fix of IDs for some astrophysical events. Suppose, you needed to read and store these IDs locally on your device. You could just try the following code in MATLAB to fetch all of the tabular array's information in a unmarried string via,
>> webContent = webread ( 'https://www.cdslab.org/matlab/notes/data-transfer/io/triggers.txt' ) webContent = '00745966 00745090 00745022 00744791 00741528 00741220 00739517 00737438 ... 00100319' At present if we wanted to get the private IDs, we could simply use strplit() function to split up the IDs at the line suspension characters '\n',
>> webContent = strsplit ( webContent , '\n' ) webContent = one×1019 cell array Columns 1 through xi {'00745966'} {'00745090'} {'00745022'} ... Source: https://www.cdslab.org/matlab/notes/data-transfer/io/index.html
0 Response to "Read Excel File in Matlab and Have Columns Into Variables"
ارسال یک نظر