---
url: >-
  /statelake/scripting-reference/functions-and-procedures/file-functions/matchpattern.md
---

# MatchPattern

The **MatchPattern** function returns the boolean value **True** if the string **Source** matches with the pattern specified by the parameter **Pattern**.

This matching function is intended for matching file paths and file names, and uses the wildcard characters defined for Windows file searches, i.e. \* for zero or more matching characters, and ? for a match in the specified character position.

The values for **Source** and **Pattern** should not exceed the maximum length for file names (255 characters).

For generic string matching and manipulation functions, not involving file names, please refer to [String Functions](/statelake/scripting-reference/functions-and-procedures/string-functions/).

**Declaration**: Function MatchPattern( source, pattern : String) : Boolean

A quick example would be as follows.

```pascal
procedure OnMapEvent(var Value:Variant);
begin
 if MatchPattern('test.txt', '*.txt') then //returns true
    LogInfo('The file is of type .txt');

 if MatchPattern('c:\program files\test.txt', '*.txt') then //also returns true
    LogInfo('The file is of type .txt');

end;
```

The following tests for matches will return True:

* MatchPattern('TEST.TXT', '\*.txt')
* MatchPattern('test.txt', '\*.TXT')
* MatchPattern('test.txt', '????.txt')
* MatchPattern('c:\program files\test.txt', 'c:\\\*\test.txt')
* MatchPattern('c:\program files\test.txt', 'c:\\\*\\\*.txt')
* MatchPattern('c:\program files\test.txt', 'c:\\\*.txt')

The following tests for matches will return False:

* MatchPattern('test.txt', '?.txt') // too many characters
* MatchPattern('t.txt', '????.txt') // not enough characters

These are illustrated by the code segment as below.

```pascal
procedure ScriptEvent (var Value : variant);
var
 //Initialise the variabled for the "source" and "pattern" arguments
  s, p: string;
begin
  s := 'test.txt'; p := '*.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'c:\program files\test.txt'; p := '*.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));

  s := 'TEST.TXT'; p := '*.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'test.txt'; p := '*.TXT'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'test.txt'; p := '????.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'test.txt'; p := '?.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 't.txt'; p := '????.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'c:\program files\test.txt'; p := 'c:\*\test.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'c:\program files\test.txt'; p := 'c:\*\*.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));
  s := 'c:\program files\test.txt'; p := 'c:\*.txt'; LogInfo('MatchPattern(''' + s + ''', ''' + p + ''') is ' + BoolToFloString(MatchPattern(s, p)));

end;
```

The resulting entries in the log is as follows.
