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.

 Akzeptierte Antwort

Star Strider
Star Strider am 24 Mai 2015
Bearbeitet: Star Strider am 25 Mai 2015

1 Stimme

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 24 Mai 2015

0 Stimmen

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

1 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Large Files and Big Data finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by