質問

I have a file with a data value and timestamp that I am trying to split in Matlab. This is the format:

-18.151346    Mon Jan 28 11:33:08 2013

I am using the textscan function to try and split it.

data=textscan(fid,'%f%s%s%f%s%n','delimiter','space');

I am trying to split the timestamp into separate columns so that I can just use the time and not the date or year. I had a look at some previous questions which were very similar but for some reason I just can't get it to do what I want. My resulting cell array is in this format.

Column 1     Column 2   Column 3 
-18.151346   Mon       Jan 28 11:33:08 2013

I am completely new to Matlab so any help would be greatly appreciated. Thanks in advance.

役に立ちましたか?

解決

  1. You're using a 'space' string as a delimiter, which is illegal in textscan. Specify it as ' ' instead.
  2. You want treat consecutive spaces as one, so you should also set the 'MultipleDelimsAsOne' flag to 1.

The correct syntax should be:

textscan( fid, '%f%s%s%s%s%n', 'delimiter', ' ', 'MultipleDelimsAsOne', 1);

Had you not tried to tinker with the delimiter option, this behavior would've been done properly by default, so just omit all options:

textscan( fid, '%f%s%s%s%s%n');

Also note that you need a flag for each item in the string that is surrounded by spaces. In other words, for a string like this:

-18.151346 Mon Jan 28 11:33:08 2013

the timestamp in string form will be stored in the 5th column of the resulting cell array.

他のヒント

To read the timestamp I'd use regexp.

The solution I'm gonna advise can be optimized, but it can help you at least as first try.

A = regexp(str,'[^\s]+','match');

This way you match all the regular expressions within your string. Then, you know that values and time are stored as element 1 and 5.

I made a short test with:

cell = {'-18.151346 Mon Jan 28 11:33:08 2013','19.33333 Tue Feb 29 10:12:23 2012'};

and this leads you to a cell A{1,2}.

Again, this procedure is perfectible, but you can use it as hint.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top