How to read csv file with asterix
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
dpb
2014-5-1
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 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 String Parsing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!