datestr bug

John W. Eaton jwe at bevo.che.wisc.edu
Tue Sep 9 17:59:53 CDT 2008


On 24-Jul-2008, John W. Eaton wrote:

| On 24-Jul-2008, Ben Abbott wrote:
| 
| | hmmm ... perhaps strrep.m could be modified to allow for a mask as a  
| | fourth argument?
| | 
| |   For example, it might be modified to work as below ...
| | 
| | 	octave:#> str = "d == dddd";
| | 	octave:#> mask = zeros (size (str));
| | 	octave:#> [str, mask] = strrep (str, "dddd", "Wednesday", mask)
| | 
| | 	str = "d == Wednesday"
| | 	mask = [0 0 0 0 0 1 1 1 1 1 1 1 1 1]
| | 
| | 	octave:#> [str, mask] = strrep (str, "d", "W", mask)
| | 
| | 	str = "W = Wednesday"
| | 	mask = [1 0 0 0 0 1 1 1 1 1 1 1 1 1]
| | 
| | The new version of strrep might replace the original, a new function  
| | (__strrep__.m ?) or a subfunction of datestr.
| | 
| | Comments/Suggestions?
| 
| Wouldn't it be better to transform the (strange) Matlab datestr format
| string to an strftime format string and just use that (I think that
| was already suggested)?  Here's a start:
| 
|   %C%y       yyyy    Full year                                       2005
|   %y         yy      Two-digit year                                  2005
|   %B         mmmm    Full month name                                 December
|   %b         mmm     Abbreviated month name                          Dec
|   %m         mm      Numeric month number (padded with zeros)        01, 08, 12
|   ?          m       First letter of month name (capitalized)        D
|   %A         dddd    Full weekday name                               Sunday
|   %a         ddd     Abbreviated weekday name                        Sun
|   %e         dd      Numeric day of month (padded with zeros)        11
|   ?          d       First letter of weekday name (capitalized)      S
|   %I or %H?  HH      Hour of day, padded with zeros if PM is set     09:00
|    and %p            and not padded with zeros otherwise             9:00 AM
|   %M         MM      Minute of hour (padded with zeros)              10:05
|   %S         SS      Second of minute (padded with zeros)            10:05:03
| 	     PM      Use 12-hour time format                         11:30 PM
|   ?          QQ      Quarter
| 
| You'd still need to
| 
|    handle "m", "d", and "QQ" before passing the string to strftime
| 
|    recognize PM early in order to determine what should be done with HH
| 
|    use some care to avoid incorrect substitutions (for exmaple,
|    translating "mm" -> "%m" followed by translating "m", would cause
|    trouble, but perhaps you could use another character for that
|    temporarily, folowed by another translation?)
| 
| but I think you could avoid the problem we are having now.
| 
| Or, instead of doing a series of global substitutions on the entire
| string, just walk through the string once, looking for matches and
| generating the output.  That way you don't ever perform substitutions
| on things that have already been substituted.  But that would probably
| require nested loops, so might best be done in C++.
| 
| Ugh, what a crazy function.

I checked in the following change.  It uses the "convert to strftime
format specifiers" method I outlined above.

jwe

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: diffs
Url: https://www-old.cae.wisc.edu/pipermail/bug-octave/attachments/20080909/60507fd3/attachment-0001.ksh 


More information about the Bug-octave mailing list