Saji,
The soon  to be released [mid-late June 2009] NCL v5.1.1
has a number of new string handling functions. See:
    http://www.ncl.ucar.edu/future_release.shtml
These functions could be used to perform tasks like your
ruby code.
I have a sample, which use the new functions in NCL v5.1.1
to perform something similar to what you have done with Ruby.
;----------------------------------------------------
  a = (/1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1/)
  print(a)
;Convert integer array a to string array b
;After add new type conversion,  probably in the release after NCL  
v5.1.1
;b = tostring(a)
;For NCL v5.1.1
  b = sprinti("%i", a)
  print(b)
;concatenate string array b to a single string
  str = str_concat(b)
  print(str)     ;str = "1110001001111"
;find the index of "111" in str
  c = str_index_of_substr(str, "111", 0)
  print(dimsizes(c))     ;dimsizes(c) = 2
  print(c)   ;c = (/0, 9/)
;Or do it differently
  delim = "0"
;find number of fields separated by delimiter
  nfields = str_fields_count(str, delim)
  print(nfields)   ; nfields = 3
;define a new string array of size nfields
  newStrArr = new(nfields, string)
;get each field from str separated by delimiter, and save to newStrArr
  do n = 1, nfields
     newStrArr(n-1) = str_get_field(str, n, delim)
  end do
  print(newStrArr) ;newStrArr = (/"111", "1", "1111"/)
;At this point, you can use NCL current functions to process this new  
string array,
;or you can convert it to integer array, and so on...
;----------------------------------------------------
Wei Huang
huangwei_at_ucar.edu
VETS/CISL
National Center for Atmospheric Research
P.O. Box 3000 (1850 Table Mesa Dr.)
Boulder, CO 80307-3000 USA
(303) 497-8924
On Jun 4, 2009, at 3:58 AM, Saji N. Hameed wrote:
> Dear NCL-ers,
>
>  Suppose I have a 1D array of binaries (/1,1,1,0,0,0,1,0,0,1,1,1,1/)
>  and I want to calculate number of 3 or more sucessive 1's
>  (in this example, there are two such events)
>
>  is there a good way to do that? FYI, I am trying to make an
>  index of number of warm spells in a given period. I can write
>  an algorithm with some do loops, but was wondering if there is
>  a simpler way?
>
> saji
>
> ps: in ruby, i could have done perhaps this way
>   irb> a=[1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1]
>   irb> b=a.join.split(/[0]+/) # array to string, split string at  
> multiple 0's
>     => ["111", "1", "1111"]
>   irb> b.map! {|num|  (num.to_i>=111)? num=1 : num=nil}
>     => [1, nil, 1]
>   irb> b.nitems
>     => 2
>
>
> -- 
> Saji N. Hameed
>
> APEC Climate Center          				
> 1463 U-dong, Haeundae-gu,                               +82 51 745  
> 3951
> BUSAN 612-020, KOREA                    		saji_at_apcc21.net
> Fax: +82-51-745-3999
>
>
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Thu Jun 04 2009 - 09:25:10 MDT
This archive was generated by hypermail 2.2.0 : Mon Jun 08 2009 - 09:30:31 MDT