Find Header in .CSV File and Read Column

I have a large number of .CSV files in one folder. These files have different columns of data. I need to locate the desired columns by matching the header(string) and read only these columns. Example:
Date Time Temp_F Temp_C Lights_ON A/C_ON
5/23/15 12:23:07 70 21 0 1
5/23/15 12:23:08 71 22 0 1
5/23/15 12:23:09 71 22 1 1
Date Time Temp_F Temp_C Temp_K Lights_ON A/C_ON
5/24/15 13:30:27 63 17 290 1 0
5/24/15 13:30:28 64 18 291 0 0
5/24/15 13:30:29 65 18 291 1 0
I'd like to read Time, Temp_C and Lights_ON from these two files.
Before, the data was the same in all the files. I knew which columns to read and which columns to skip and was using the following code:
c = textscan('%*s%s%*d%d%d%*d', 'Delimiter', ',', 'Headerlines', 1);
Now I need to sort through the headers and match the strings and only read those columns. How would I go about doing this? Can I use textscan to accomplish this? Or maybe csvread or another command? I have attached a sample .CSV file. Thanks in advance.

 Réponse acceptée

Star Strider
Star Strider le 24 Mai 2015
Modifié(e) : Star Strider le 25 Mai 2015
This is one way to approach it:
[n,s,r] = xlsread('Jacee Johnson Book1.csv');
des_cols = {'Time', 'Temp_C', 'Lights_ON'};
colhdrs = s(1,:);
[~,ia] = intersect(colhdrs, des_cols);
colnrs = flipud(ia);
Data = n(:, colnrs-1);
It first reads the file in, then compares the column headers to your desired strings to find the desired columns in ‘colnrs’. Since ‘n’ here is a double array, it then selects the desired columns by numbers, and returns them in ‘Data’. The ‘n’ variable does not include the date (a string), so I subtracted 1 from those columns so they would match appropriately. The time (in Data(:,1) here) is in fractions of a day.

4 commentaires

Walter Roberson
Walter Roberson le 24 Mai 2015
I think you wanted [~,ia] as your output, not [~ia]
Star Strider
Star Strider le 25 Mai 2015
Corrected now. Did a copy-paste from working code. Don’t know how the comma got dropped.
Jacee Johnson
Jacee Johnson le 25 Mai 2015
Thank you very much! This method seems like it will work!
Star Strider
Star Strider le 25 Mai 2015
My pleasure!

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 24 Mai 2015

0 votes

Consider using the relatively new readtable() as that allows you to address content by column name.

1 commentaire

Jacee Johnson
Jacee Johnson le 25 Mai 2015
I was reading about it but unfortunately I only have access to MATLAB 2011. Thanks for the help.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Large Files and Big Data dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by