> Le 4 mai 2017 à 14:22, Jörg Knebel via 4D_Tech <4d_tech@lists.4d.com> a écrit 
> :
> 
> Hi all
> 
> I’m wondering if someone has a clever routine to count the number of 
> appearances of a specific character/word in a string/text and is willing to 
> share it.

I use this one:

//Str_count (find_t;in_t {;"*") -> long
//$3 optional: pass "*" for strict comparison (default not strict)
//example :
//  $text:="eéèEÈÉ"
//  $what:="e"
//  $nb1:=Str_count ($what;$text) -> 6
//  $nb2:=Str_count ($what;$text;"*") -> 1
C_LONGINT($0)
C_TEXT($1)
C_TEXT($2)
C_TEXT($3)

C_BOOLEAN($strict_b)
C_LONGINT($findLen_l)
C_LONGINT($len_l)
C_LONGINT($out_l)
C_LONGINT($params_l)
C_LONGINT($start_l)
C_LONGINT($textLen_l)
C_TEXT($find_t)
C_TEXT($in_t)
C_TEXT($nmc_t)

If (False)
        C_LONGINT(Str_count ;$0)
        C_TEXT(Str_count ;$1)
        C_TEXT(Str_count ;$2)
        C_TEXT(Str_count ;$3)
End if

//_
$out_l:=-1  //error
$nmc_t:=Current method name
$params_l:=Count parameters
Case of
        : (Not(Asserted($params_l>1;$nmc_t+" 2 parameters required")))
        //error
Else
        $find_t:=$1
        $in_t:=$2
        $findLen_l:=Length($find_t)
        $textLen_l:=Length($in_t)
        $out_l:=0
        $strict_b:=($params_l>2)
        
        Case of
                : ($findLen_l=0)
                : ($findLen_l>$textLen_l)
        Else
                $start_l:=1
                $len_l:=$findLen_l
                If ($strict_b)
                        $start_l:=Position($find_t;$in_t;$start_l;*)
                        While ($start_l>0)
                                $out_l:=$out_l+1
                                $start_l:=$start_l+$len_l
                                $start_l:=Position($find_t;$in_t;$start_l;*)
                        End while
                Else
                        $start_l:=Position($find_t;$in_t;$start_l;$len_l)
                        While ($start_l>0)
                                $out_l:=$out_l+1
                                $start_l:=$start_l+$len_l
                                
$start_l:=Position($find_t;$in_t;$start_l;$len_l)
                        End while
                End if
        End case
        
End case
$0:=$out_l
//_

-- 
Arnaud de Montard 




**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**********************************************************************

Reply via email to