Read text file in MATLAB

If you would like to analyze data generated from other sources, you will most likely need to import the data from a text, csv, or xls file.  Here we’ll provide different methods you can use to import this data.

First, you will need to select the file of interest, with the filename stored in the variable ‘file’:

% Select file
[filename, pathname] = uigetfile ('*.*', 'Pick a file');
file = [pathname, filename];

In our example, we will be importing a tab-delimited textfile generated by Sensor Data. The data file we are playing with is test_gyroscope_t3.txt.  As you can see, this file has 13 header lines (two of which are blank lines) and 110 lines of data (consisting of time, x axis, y axis, z axis).

Now that your file has been selected, you have several options through which to import.  First let’s look at textread. While this function will soon be decremented, it still serves a nice purpose. We can specify a delimiter, and then parse out the header and data using cellfun.

% Using textread, which will be removed in later MATLAB releases
% Read in file
allData = textread(file, '%s', 'delimiter', '\n');
% Make allData cells empty if numerical 
numericalArray = cellfun(@(s) sscanf(s,'%f').' ,allData, 'un', 0);
% Get Header
header = allData(cellfun('isempty',numericalArray));
% Get Data
data = vertcat(numericalArray{:});

With this piece of code, you will have a 11×4 cell array for the header and a 110×4 double for the numerical data. What if we were to use textscan as recommended by MATLAB rather than textread? Well now the code is a little bit longer, and you need to specify before hand how many columns of data you want as well as how many header lines are in the file. This method might be useful if you want to manually select only certain columns and even start at a later row, but does require knowledge of your data file. Here we’ll initialize the values for the headerlength and columnlength to 13 and 4, respectively. You’ll also notice our usage of the command repmat, which comes in very handy here and elsewhere.

% If you know the header and column length using textscan
headerLength = 13;
numColumns = 4;
fid = fopen(file);
% this is error message for reading the file
if fid == -1 
    error('File could not be opened, check name or path.')
end
% Get header
header = cell(headerLength, 1);
for i = 1:headerLength
    header{i} = fgetl(fid);
end
fclose(fid);
fid = fopen(file);
% Read in numerical data
data = textscan(fid, repmat('%f',1,numColumns), 'headerlines', headerLength);
data = cell2mat(data);
fclose(fid);

Again, our data has been stored into 11×4 cell array for the header and a 110×4 double for the numerical data. So this is great, now you can read in data… but wait, MATLAB also has a great function, which we just found that allows you to do all this with just a single line of code!

% importdata
A = importdata(file);

Importdata! This command will output the data to a struct, with a field for the data (110×4 double), textdata (11×4 cell) and colheaders (1×4 cell). The colheaders is simply the title for each column of data, in our case ‘Time’, ‘X’, ‘Y’, ‘Z’. You can even specify the delimiter for the file as the second argument to importdata, though the default character is interpreted from the file.

Regardless of which method you choose, you should now have access to your all-important data within MATLAB, so you can now begin analysis.

If you have found any other methods for importing data into MATLAB, please let us know.

Check convexity of polygon

As we demonstrated in our previous post, we can generate polygons by tracing a circle around a given center and placing vertices at randomly spaced angles and radii.

MATLAB irregular polygon

While on visual inspection it should be clear whether some polygons are convex or concave, we want to find a way to check for this property mathematically. We will do so by checking the direction that each internal angle takes around the polygon, as by definition, convex polygons will have all internal angles of less than 180 degrees (additional rules include the fact that all diagonals are contained within the polygon and a line drawn through a convex polygon in any direction will intersect at exactly two points).

Continue reading

Creating 2-D polygons in MATLAB

The basic premise of computational geometry is to calculate distances, areas, intersections and other geometrical calculations on basic objects such as points, lines and polygons. To begin this series on computational geometry in MATLAB, we’ll discuss the creation of random polygons in MATLAB.

Continue reading

A Blackjack GUI in Matlab – Part IV of using Guide

With this post we wrap up our introduction to using guide with a look at the usage of a push button and a drop-down menu in our creation of a blackjack strategy guide GUI. As a look back, or to catch up, you can visit our three previous posts: Part I: Creating the layout using guide; Part II: Setting up a table; and Part III: getting user input from radio buttons and text boxes. Finally, we have also attached all of the necessary code to the end of this post to do as you please.

Continue reading

Building GUIs in Matlab – Part III Utilizing User Input

In this post we will combine the ideas presented in part I and part II on building a GUI utilizing guide in Matlab. So far we have generated two graphical windows, one of which includes radio buttons, edittable text boxes, a drop-down menu, and a push button, and the second of which has a modifiable strategy table. The object now is to combine the two windows, and allow for proper user control of all of these components.
Continue reading

Building a GUI in Matlab – Part II Tables

Last week we looked at the usage of guide in building a GUI. We included radio buttons, both editable and static text boxes, a drop-down menu and a push button. This week, we’ll create our second GUI to display a table (uitable). As all the decisions in blackjack hinge on two pieces of information: 1) the face up card of the dealer; and 2) the player cards, a look-up table can provide an optimal method for making a simple informed choice of whether to hit, stand, split or double down.
Continue reading

Building a GUI in Matlab using Guide – Part I

Users crave the ability to use graphical user interfaces (GUIs) to perform tasks. While command line input can be beneficial and easier to implement (see our previous post on user inputs), error handling and decision making can be more intuitive through a GUI. Over the next several weeks, we’ll demonstrate the wonderful capabilities of Matlab in creating such GUIs. Using the Matlab built-in GUI building tool guide, we will build a functional program that takes in user inputs and displays useful information. In order to make this exercise fun, we’ll be creating a GUI that provides the optimum strategy for decision making in the game of blackjack.

Continue reading

Sending messages with sendmail

When running long code streams, waiting in front of the computer watching the program run can be excruciating. Sometimes I find myself doing this if I do not know how long the code will run, or if there will be errors returned. (I also sit in front of the computer because I enjoy watching cat gifs and the old school de-fragmentation screens, so who knows…) But you don’t have to! Go out and accomplish something else while your computer chugs away. With the useful command sendmail, we can send messages to our email or phone with some simple commands. Through this post, I’ll share some sample .m files that we commonly use to notify ourselves of code completion or errors.

Continue reading