Search code examples
matlabdata-importmatlab-table

Importing Data from a .txt file into Matlab


First of all thank you for reading my question.
I am trying to import data from a file with following format into Matlab:

#Text  
#Text: Number  
...  
#Text: Number  
Set1:  
1 2  
3 4   
Set2:  
5 6  
7 8   
...  

I would like to get those numbers into two matrices of the form:
(1 5
3 7)
and
(2 6
4 8)

I started by only building the first of those two matrices.

 Winkel = 15;
 xp = 30;

 M = readtable('Ebene_1.txt')
 M([1:4],:) = [];
 M(:,3) = [];

for i=0:Winkel-1
   A = table2array(M((2+i*31:31+i*31),1))
end

But this solution only gave me cell arrays which I could not transform into normal vectors.

I also tried to use the importdata command, but could not find a way to get this to work either. I know there are many other questions similar to mine, but I could not find one where all the data were in a single column. Also, there are many Matlab-commands for importing data into Matlab and I am not sure which would be the best.
First time asking such a question online so feel free to ask me for more details.


Solution

  • You can import the data you provided in your sample using readtable, however because of the format of your file you will need to tweak the function a bit.

    You can use detectImportOptions to tell the function how to import the data.

    %Detect import options for your text file.
    opts = detectImportOptions('Ebene_1.txt')
    
    %Specify variable names for your table.
    opts.VariableNames = {'Text','Number'};
    
    %Ignore last column of your text file as it does not contain data you are interested in.
    opts.ExtraColumnsRule = 'ignore';
    
    %You can confirm that the function has successfully identified that the data is numeric by inspecting the VariableTypes property.
    %opts.VariableTypes
    
    %Read your text file with detectImportOptions.
    M = readtable('Ebene_1.txt',opts)
    

    Now that you have table M, simply apply basic Matlab operations to obtain the matrices as you specified.

    %Find numerical values in Text and Number variables. Ignore NaN values.
    A = M.Text(~isnan(M.Text));
    B = M.Number(~isnan(M.Number));
    
    %Build matrices.
    A = [A(1:2:end)';A(2:2:end)']
    B = [B(1:2:end)';B(2:2:end)']
    

    Output:

    A =
    
         1     5
         3     7
    
    B =
    
         2     6
         4     8