<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nsis.sourceforge.io/mediawiki/index.php?action=history&amp;feed=atom&amp;title=StrCount</id>
	<title>StrCount - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nsis.sourceforge.io/mediawiki/index.php?action=history&amp;feed=atom&amp;title=StrCount"/>
	<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=StrCount&amp;action=history"/>
	<updated>2026-08-13T04:26:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=StrCount&amp;diff=23194&amp;oldid=prev</id>
		<title>Seki: creation</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=StrCount&amp;diff=23194&amp;oldid=prev"/>
		<updated>2013-04-24T09:58:20Z</updated>

		<summary type="html">&lt;p&gt;creation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{PageAuthor|seki}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Requires:&amp;#039;&amp;#039;&amp;#039; [[LogicLib header file]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 1.0.&lt;br /&gt;
&lt;br /&gt;
This function returns the number of occurrences of a substring (that can be a single character) in a string.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
${StrCount} String SubString sensitiveness&lt;br /&gt;
Pop ResultVar&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
Push String&lt;br /&gt;
Push SubString&lt;br /&gt;
Push sensitiveness&lt;br /&gt;
Call StrCount&lt;br /&gt;
Pop ResultVar&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
; String&lt;br /&gt;
: The string where we want to search for &amp;#039;&amp;#039;SubString&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
; SubString&lt;br /&gt;
: Character(s) to find in &amp;#039;&amp;#039;String&amp;#039;&amp;#039;, a single char or a substring.&lt;br /&gt;
&lt;br /&gt;
; sensitiveness&lt;br /&gt;
: can be &amp;#039;&amp;#039;s&amp;#039;&amp;#039; for a case-sensitive search or anything else for case-insensitive search.&lt;br /&gt;
&lt;br /&gt;
; ResultVar&lt;br /&gt;
: The variable that will get the number of occurrences.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
Push AbABABa&lt;br /&gt;
Push Ba&lt;br /&gt;
Push &amp;quot;i&amp;quot;&lt;br /&gt;
Call StrCount&lt;br /&gt;
Pop $0 ;$0=3&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
${StrCount} abcdefcd c i&lt;br /&gt;
Pop $0 ;$0=2&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Function Code ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!define StrCount &amp;quot;!insertmacro StrCount&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!macro StrCount str look si&lt;br /&gt;
    Push ${str}&lt;br /&gt;
    Push ${look}&lt;br /&gt;
    Push ${si}&lt;br /&gt;
    Call StrCount&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function StrCount &lt;br /&gt;
	;takes the following parameters by the stack:&lt;br /&gt;
	; case sensitive (&amp;#039;s&amp;#039;) or insensitive&lt;br /&gt;
    ; string to lookup&lt;br /&gt;
    ; string where to search&lt;br /&gt;
&lt;br /&gt;
	Exch $2	;Stack = ($2 test str)&lt;br /&gt;
    Exch	;Stack = (test $2 str)&lt;br /&gt;
    Exch $1	;Stack = ($1 $2 str)&lt;br /&gt;
    Exch	;Stack = ($2 $1 str)&lt;br /&gt;
    Exch 2	;Stack = (str $1 $2)&lt;br /&gt;
    Exch $0	;Stack = ($0 $1 $2)&lt;br /&gt;
    Exch 2	;Stack = ($2 $1 $0) just to pop in natural order&lt;br /&gt;
    Push $3&lt;br /&gt;
    Push $4&lt;br /&gt;
    Push $5	&lt;br /&gt;
    Push $6	;Stack = ($6 $5 $4 $3 $2 $1 $0)&lt;br /&gt;
&lt;br /&gt;
	StrLen $4 $1    &lt;br /&gt;
    StrCpy $5 0&lt;br /&gt;
    StrCpy $6 0&lt;br /&gt;
&lt;br /&gt;
    ;now $0=str, $1=test, $2=s/i, $3=tmp str, $4=lookup len, $5=index, $6=count&lt;br /&gt;
    &lt;br /&gt;
    loop:&lt;br /&gt;
    StrCpy $3 $0 $4 $5&lt;br /&gt;
    StrCmp $3 &amp;quot;&amp;quot; end&lt;br /&gt;
    ${if} $2 == &amp;#039;s&amp;#039;&lt;br /&gt;
    	StrCmpS $3 $1 count ignore&lt;br /&gt;
    ${else}&lt;br /&gt;
    	StrCmp $3 $1 count ignore&lt;br /&gt;
    ${endif}&lt;br /&gt;
    count:&lt;br /&gt;
    IntOp $6 $6 + 1	;count++&lt;br /&gt;
    ignore:&lt;br /&gt;
    IntOp $5 $5 + 1 ;index++&lt;br /&gt;
	goto loop&lt;br /&gt;
	end:&lt;br /&gt;
	&lt;br /&gt;
    Exch 6	;Stack = ($0 $5 $4 $3 $2 $1 $6)&lt;br /&gt;
	Pop $0&lt;br /&gt;
    Pop $5&lt;br /&gt;
    Pop $4&lt;br /&gt;
    Pop $3&lt;br /&gt;
    Pop $2&lt;br /&gt;
    Pop $1	;Stack = ($6)&lt;br /&gt;
    Exch $6	;count is on top stack&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Versions History ==&lt;br /&gt;
&lt;br /&gt;
;1.0&lt;br /&gt;
:Initial release.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Author: Sébastien Kirche ([[User:seki|seki]]).&amp;lt;br&amp;gt;&lt;br /&gt;
Wiki page based on [[StrTok function|StrTok]] documentation.&lt;br /&gt;
&lt;br /&gt;
[[Category:String Functions]]&lt;/div&gt;</summary>
		<author><name>Seki</name></author>
	</entry>
</feed>