How to read csv file with asterix
4 views (last 30 days)
Show older comments
Hello,
The NOAA csv data file has the following format (showing only the first 5 rows):
USAF WBAN YR--MODAHRMN DIR SPD GUS CLG SKC L M H VSB WW WW WW W TEMP DEWP SLP ALT STP MAX MIN PCP01 PCP06 PCP24 PCPXX SD
037683 ***** 201001010020 010 10 *** 34 BKN * * * 7.0 ** ** ** * 36 30 ****** 29.56 ****** *** *** ***** ***** ***** ***** **
037683 ***** 201001010050 010 9 *** *** SCT * * * 7.0 ** ** ** * 36 30 ****** 29.56 ****** *** *** ***** ***** ***** ***** **
037683 ***** 201001010120 020 9 *** 722 SCT * * * 7.0 ** ** ** * 36 30 ****** 29.56 ****** *** *** ***** ***** ***** ***** **
037683 ***** 201001010150 360 9 *** 30 OVC * * * 7.0 ** ** ** * 36 30 ****** 29.56 ****** *** *** ***** ***** ***** ***** **
This one has 28 columns (but it can vary). It has all mixed - for example, the column 'CLG' has values [34, *, 722, 30, ...]. How to extract a particular column, and yet be able to skip the row containing the asterix data? One entire row can be asterix - which would mean that no data is available for that particular day. If the index of the skipped row containing asterix is known, that would be beneficial.
Thanks.
0 Comments
Accepted Answer
dpb
on 1 May 2014
Actually, it's not too bad...
>> fid=fopen('noaa.csv','r');
>> l=fgetl(fid); % the header
>> toks=tokens(l);ntok=length(toks); % how many columns?
>> c=textscan(fid,repmat('%s',1,ntok),'collectoutput',true) % read that many as strings
c =
{4x28 cell}
>> fid=fclose(fid);
Now begin to do something w/ the data...
>> [~,iclg]=intersect(toks,'CLG','rows') % find a particular variable location
iclg =
7
>> clg=str2double(c{1}(:,iclg)) % convert to numeric
clg =
34
NaN
722
30
>>
find(isnan())
will return locations of missing for however you wish to deal with them.
This is one place where the cell array helps, for sure...
5 Comments
More Answers (0)
See Also
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!