Module:String - RimWorld Wiki (2024)

Taken from https://en.wikipedia.org/w/index.php?title=Module%3AString%2Fdoc&action=edit

This module is intended to provide access to basic string functions.

Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace.

Contents

  • 1 Global options
  • 2 len
  • 3 sub
  • 4 match
  • 5 pos
  • 6 find
  • 7 replace (gsub)
  • 8 rep
  • 9 escapePattern
  • 10 count
  • 11 join

Global options[edit]

ignore_errors
If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message.
error_category
If an error occurs, specifies the name of a category to include with the error message.
This has not been changed from the wikipedia version, so it may not work.
no_category
If set to 'true' or 1, no category will be added if an error is generated.

Unit tests for this module are available at Module:String/testcases.

len[edit]

Use #len instead.

sub[edit]

Use #sub instead

match[edit]

This function returns a substring from the source string that matches a specified pattern.

Usage:

{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}

OR

{{#invoke:String|match|s= source_string |pattern= pattern_string |start= start_index |match= match_number |plain= plain_flag |nomatch= nomatch_output }}

Parameters:

s
The string to search
pattern
The pattern or string to find within the string
start
The index within the source string to start the search. The first character of the string has index 1. Defaults to 1.
match
In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1.
plain
Boolean flag indicating that pattern should be understood as plain text and not as a Scribunto ustring pattern (a unicode-friendly Lua-style regular expression). Defaults to false (to change: plain=true)
nomatch
If no match is found, output the "nomatch" value rather than an error.
ignore_errors
If no match is found and ignore_errors=true, output an empty string rather than an error.

If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found.If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure.

For information on constructing Lua patterns, a form of regular expression, see:

Examples:

  • {{#invoke:String|match| abc123def456 |%d+}} → 123
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ }} → 123
  • {{#invoke:String|match| abc123def456 |%d+|6}} → 23
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 }} → 3
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 |match= 2 }} → 456
  • {{#invoke:String|match|s= abc123%d+ |pattern= %d+ }} → 123
  • {{#invoke:String|match|s= abc123%d+ |pattern= %d+ |plain= true }} → %d+
  • {{#invoke:String|match|s= abc |pattern= %d }}String Module Error: Match not found
  • {{#invoke:String|match|s= abc |pattern= %d |nomatch= No numeric characters in string }} → No numeric characters in string
  • {{#invoke:String|match|s= abc |pattern= %d |ignore_errors= true }}
  • {{#invoke:String|match|s= 0012001200 |pattern= 0*(%d*) }} → 12001200

pos[edit]

This function returns a single character from the target string at position pos.

Usage:

{{#invoke:String|pos|target_string|index_value}}

OR

{{#invoke:String|pos|target= target_string |pos= index_value }}

Parameters:

target
The string to search
pos
The index for the character to return

The first character has an index value of 1.

If one requests a negative value, this function will select a character by counting backwardsfrom the end of the string. In other words pos = -1 is the same as asking for the last character.

A requested value of zero, or a value greater than the length of the string returns an error.

Examples:

  • {{#invoke:String|pos| abcdefghi | 4 }} → c
  • {{#invoke:String|pos|target= abcdefghi |pos= 4 }} → d

find[edit]

This function allows one to search for a target string or pattern within another string.

Usage:

{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}

OR

{{#invoke:String|find|source= source_string |target= target_string |start= start_index |plain= plain_flag }}

Parameters:

source
The string to search
target
The string or pattern to find within source
start
The index within the source string to start the search, defaults to 1
plain
Boolean flag indicating that target should be understood as plain text and not as a Scribunto ustring pattern (a unicode-friendly Lua-style regular expression); defaults to true

This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0.

This function should be safe for UTF-8 strings.

Examples:

  • {{#invoke:String|find|abc123def|12}} → 4
  • {{#invoke:String|find|source=abc123def|target=12}} → 4
  • {{#invoke:String|find|source=abc123def|target=pqr}} → 0
  • {{#invoke:String|find| abc123def |123}} → 5
  • {{#invoke:String|find|source= abc123def |target= 123 }} → 4
  • {{#invoke:String|find|source=abc123def|target=%d |start=3 |plain=false }} → 4

When using unnamed parameters, preceding and trailing spaces are kept and counted:

  • {{#invoke:String|find| abc123def |c|false}} → 5
  • {{#invoke:String|find|source= abc123def |target=c|plain=false}} → 3
  • {{#invoke:string|find|abc 123 def|%s|plain=false}} → 4

Testing for the presence of a string:

  • {{#ifexpr|{{#invoke:string|find|haystack|needle}}|Found needle|Didn't find needle}} → Didn't find needle

replace (gsub)[edit]

This function allows one to replace a target string or pattern within another string. To Lua programmers: this function works internally by calling mw.ustring.gsub.

Usage:

{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}

OR

{{#invoke:String|replace|source= source_string |pattern= pattern_string |replace= replace_string |count= replacement_count |plain= plain_flag }}

Parameters:

source
The string to search
pattern
The string or pattern to find within source
replace
The replacement text
count
The number of occurrences to replace; defaults to all
plain
Boolean flag indicating that pattern should be understood as plain text and not as a Scribunto ustring pattern (a unicode-friendly Lua-style regular expression). Defaults to true

Examples:

  • "{{#invoke:String|replace| abc123def456 |123|XYZ}}" → " abcXYZdef456 "
  • "{{#invoke:String|replace|source= abc123def456 |pattern= 123 |replace= XYZ }}" → "abcXYZdef456"
  • "{{#invoke:String|replace| abc123def456 |%d+|XYZ|1|false}}" → " abcXYZdef456 "
  • "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |count=1 |plain= false }}" → "abcXYZdef456"
  • "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= XYZ |plain= false }}" → "abcXYZdefXYZ"
  • {{#invoke:String|replace|source= 0012001200 |pattern= ^0* |plain= false }} → 12001200

rep[edit]

Repeats a string n times. A simple function to pipe string.rep to templates.

Usage:

{{#invoke:String|rep|source|count}}

Parameters:

source
The string to repeat
count
The number of repetitions.

Examples:

  • "{{#invoke:String|rep|hello|3}}" → "hellohellohello"
  • "{{#invoke:String|rep| hello | 3 }}" → " hello hello hello "

escapePattern[edit]

In a Lua pattern, changes a class character into a literal character. For example: in a pattern, character . catches "any character"; escapePattern will convert it to %., catching just the literal character ".".

Usage:

  • {{#invoke:String|escapePattern|pattern_string}}

Parameters:

pattern_string
The pattern string to escape

Examples:

  • "{{#invoke:String|escapePattern|A.D.}}" → "A%.D%."
  • "{{#invoke:String|escapePattern|10%}}" → "10%%"

count[edit]

Counts the number of times a given pattern appears in the arguments that get passed on to this module. Counts disjoint matches only.

Usage:

{{#invoke:String|count|source_str|pattern_string|plain_flag}}

OR

{{#invoke:String|count|source= source_string |pattern= pattern_string|plain= plain_flag }}

Parameters:

source_string
The string to count occurrences in
pattern
The string or pattern to count occurrences of within source
plain
Boolean flag indicating that pattern should be understood as plain text and not as a Scribunto ustring pattern (a unicode-friendly Lua-style regular expression). Defaults to true

Examples:

  • Count of 'a': "{{#invoke:String|count|aabbcc|a}}" → "2"
  • Count occurrences of 'aba': "{{#invoke:String|count|ababababab|aba}}" → "2"
  • Count of "either 'a' or 'c' ":"{{#invoke:String|count|aabbcc|[ac]|plain=false}}" → "4"
  • Count of "not 'a' ": "{{#invoke:String|count|aaabaaac|[^a]|plain=false}}" → "2"
  • Count of "starts with 'a' ": "{{#invoke:String|count|aaabaaac|^a|plain=false}}" → "1"

join[edit]

Joins all strings passed as arguments into one string, treating the first argument as a separator.

Usage:

{{#invoke:String|join|separator|string1|string2|...}}

Parameters:

separator
String that separates each string being joined together
Note that leading and trailing spaces are not stripped from the separator.
string1/string2/...
Strings being joined together

Examples:

  • "{{#invoke:String|join|x|foo|bar|baz}}" → "fooxbarxbaz"
  • "{{#invoke:String|join||a|b|c|d|e|f|g}}" → "abcdefg"
  • "{{#invoke:String|join|,|a|b|c|d|e|f|g}}" → "a,b,c,d,e,f,g"
  • "{{#invoke:String|join|, |a|b|c|d|e|f|g}}" → "a, b, c, d, e, f, g"
  • "{{#invoke:String|join| – |a|b|c|d|e|f|g}}" → "a – b – c – d – e – f – g"

The preceding example uses the html entity – but the unicode character also works.

Template:Sandbox other

--[[This module is intended to provide access to basic string functions.Most of the functions provided here can be invoked with named parameters,unnamed parameters, or a mixture. If named parameters are used, Mediawiki willautomatically remove any leading or trailing whitespace from the parameter.Depending on the intended use, it may be advantageous to either preserve orremove such whitespace.Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated.Unit tests for this module are available at Module:String/tests.]]local str = {}--[[_matchThis function returns a substring from the source string that matches aspecified pattern. It is exported for use in other modulesUsage:strmatch = require("Module:String")._matchsresult = strmatch( s, pattern, start, match, plain, nomatch )Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error.For information on constructing Lua patterns, a form of [regular expression], see:* http://www.lua.org/manual/5.1/manual.html#5.4.1* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns]]-- This sub-routine is exported for use in other modulesfunction str._match( s, pattern, start, match_index, plain_flag, nomatch )if s == '' thenreturn str._error( 'Target string is empty' )endif pattern == '' thenreturn str._error( 'Pattern string is empty' )endstart = tonumber(start) or 1if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) thenreturn str._error( 'Requested start is out of range' )endif match_index == 0 thenreturn str._error( 'Match index is out of range' )endif plain_flag thenpattern = str._escapePattern( pattern )endlocal resultif match_index == 1 then-- Find first match is simple caseresult = mw.ustring.match( s, pattern, start )elseif start > 1 thens = mw.ustring.sub( s, start )endlocal iterator = mw.ustring.gmatch(s, pattern)if match_index > 0 then-- Forward searchfor w in iterator domatch_index = match_index - 1if match_index == 0 thenresult = wbreakendendelse-- Reverse searchlocal result_table = {}local count = 1for w in iterator doresult_table[count] = wcount = count + 1endresult = result_table[ count + match_index ]endendif result == nil thenif nomatch == nil thenreturn str._error( 'Match not found' )elsereturn nomatchendelsereturn resultendend--[[matchThis function returns a substring from the source string that matches aspecified pattern.Usage:{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}OR{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}}Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error.If invoked using named parameters, Mediawiki will automatically remove any leading ortrailing whitespace from each string. In some circ*mstances this is desirable, inother cases one may want to preserve the whitespace.If the match_number or start_index are out of range for the string being queried, thenthis function generates an error. An error is also generated if no match is found.If one adds the parameter ignore_errors=true, then the error will be suppressed andan empty string will be returned on any failure.For information on constructing Lua patterns, a form of [regular expression], see:* http://www.lua.org/manual/5.1/manual.html#5.4.1* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns]]-- This is the entry point for #invoke:String|matchfunction str.match( frame )local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )local s = new_args['s'] or ''local start = tonumber( new_args['start'] ) or 1local plain_flag = str._getBoolean( new_args['plain'] or false )local pattern = new_args['pattern'] or ''local match_index = math.floor( tonumber(new_args['match']) or 1 )local nomatch = new_args['nomatch']return str._match( s, pattern, start, match_index, plain_flag, nomatch )end--[[posThis function returns a single character from the target string at position pos.Usage:{{#invoke:String|pos|target_string|index_value}}OR{{#invoke:String|pos|target=target_string|pos=index_value}}Parameters target: The string to search pos: The index for the character to returnIf invoked using named parameters, Mediawiki will automatically remove any leading ortrailing whitespace from the target string. In some circ*mstances this is desirable, inother cases one may want to preserve the whitespace.The first character has an index value of 1.If one requests a negative value, this function will select a character by counting backwardsfrom the end of the string. In other words pos = -1 is the same as asking for the last character.A requested value of zero, or a value greater than the length of the string returns an error.]]function str.pos( frame )local new_args = str._getParameters( frame.args, {'target', 'pos'} )local target_str = new_args['target'] or ''local pos = tonumber( new_args['pos'] ) or 0if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) thenreturn str._error( 'String index out of range' )endreturn mw.ustring.sub( target_str, pos, pos )end--[[findThis function allows one to search for a target string or pattern within anotherstring.Usage:{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}OR{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to trueIf invoked using named parameters, Mediawiki will automatically remove any leading ortrailing whitespace from the parameter. In some circ*mstances this is desirable, inother cases one may want to preserve the whitespace.This function returns the first index >= "start" where "target" can be foundwithin "source". Indices are 1-based. If "target" is not found, then thisfunction returns 0. If either "source" or "target" are missing / empty, thisfunction also returns 0.This function should be safe for UTF-8 strings.]]function str.find( frame )local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )local source_str = new_args['source'] or ''local pattern = new_args['target'] or ''local start_pos = tonumber(new_args['start']) or 1local plain = new_args['plain'] or trueif source_str == '' or pattern == '' thenreturn 0endplain = str._getBoolean( plain )local start = mw.ustring.find( source_str, pattern, start_pos, plain )if start == nil thenstart = 0endreturn startend--[[replaceThis function allows one to replace a target string or pattern within anotherstring.Usage:{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}OR{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}}Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true]]function str.replace( frame )local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )local source_str = new_args['source'] or ''local pattern = new_args['pattern'] or ''local replace = new_args['replace'] or ''local count = tonumber( new_args['count'] )local plain = new_args['plain'] or trueif source_str == '' or pattern == '' thenreturn source_strendplain = str._getBoolean( plain )if plain thenpattern = str._escapePattern( pattern )replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.endlocal resultif count ~= nil thenresult = mw.ustring.gsub( source_str, pattern, replace, count )elseresult = mw.ustring.gsub( source_str, pattern, replace )endreturn resultend--[[ simple function to pipe string.rep to templates.]]function str.rep( frame )local repetitions = tonumber( frame.args[2] )if not repetitions thenreturn str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )endreturn string.rep( frame.args[1] or '', repetitions )end--[[escapePatternThis function escapes special characters from a Lua string pattern. See [1]for details on how patterns work.[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#PatternsUsage:{{#invoke:String|escapePattern|pattern_string}}Parameters pattern_string: The pattern string to escape.]]function str.escapePattern( frame )local pattern_str = frame.args[1]if not pattern_str thenreturn str._error( 'No pattern string specified' )endlocal result = str._escapePattern( pattern_str )return resultend--[[countThis function counts the number of occurrences of one string in another.]]function str.count(frame)local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})local source = args.source or ''local pattern = args.pattern or ''local plain = str._getBoolean(args.plain or true)if plain thenpattern = str._escapePattern(pattern)endlocal _, count = mw.ustring.gsub(source, pattern, '')return countend--[[joinJoin all non empty arguments together; the first argument is the separator.Usage:{{#invoke:String|join|sep|one|two|three}}]]function str.join(frame)local args = {}local sepfor _, v in ipairs( frame.args ) doif sep thenif v ~= '' thentable.insert(args, v)endelsesep = vendendreturn table.concat( args, sep or '' )end--[[Helper function that populates the argument list given that user may need to use a mix ofnamed and unnamed parameters. This is relevant because named parameters are notidentical to unnamed parameters due to string trimming, and when dealing with stringswe sometimes want to either preserve or remove that whitespace depending on the application.]]function str._getParameters( frame_args, arg_list )local new_args = {}local index = 1local valuefor _, arg in ipairs( arg_list ) dovalue = frame_args[arg]if value == nil thenvalue = frame_args[index]index = index + 1endnew_args[arg] = valueendreturn new_argsend--[[Helper function to handle error messages.]]function str._error( error_str )local frame = mw.getCurrentFrame()local error_category = frame.args.error_category or 'Errors reported by Module String'local ignore_errors = frame.args.ignore_errors or falselocal no_category = frame.args.no_category or falseif str._getBoolean(ignore_errors) thenreturn ''endlocal error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'if error_category ~= '' and not str._getBoolean( no_category ) thenerror_str = '[[Category:' .. error_category .. ']]' .. error_strendreturn error_strend--[[Helper Function to interpret boolean strings]]function str._getBoolean( boolean_str )local boolean_valueif type( boolean_str ) == 'string' thenboolean_str = boolean_str:lower()if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'or boolean_str == '' thenboolean_value = falseelseboolean_value = trueendelseif type( boolean_str ) == 'boolean' thenboolean_value = boolean_strelseerror( 'No boolean value found' )endreturn boolean_valueend--[[Helper function that escapes all pattern characters so that they will be treatedas plain text.]]function str._escapePattern( pattern_str )return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )endreturn str
Module:String - RimWorld Wiki (2024)

References

Top Articles
Car Games - Drive the best cars online | PacoGames.com
Car Games | Play Online for Free | NuMuKi
PBC: News & Top Stories
F2Movies.fc
Basic Setup – OpenXR & Pimax HMDs...
Inmate Inquiry Mendocino
What Was D-Day Weegy
Strange World Showtimes Near Harkins Metrocenter 12
Craigslist Com Humboldt
1977 Elo Hit Wsj Crossword
Almost Home Natchitoches Menu
Litter Robot 3 Dump Position Fault
Nyu Paralegal Program
Rainbird Wiring Diagram
Epay. Medstarhealth.org
Birmingham City Schools Clever Login
Lighthouse Diner Taylorsville Menu
Longfellow's Works - Evangeline
Ratchet And Clank Tools Of Destruction Rpcs3 Freeze
Kohls Locations Long Island
Asa Morse Farm Photos
Tethrd Coupon Code The Hunting Public
Gina's Pizza Port Charlotte Fl
Dtm Urban Dictionary
Cric7.Net Ipl 2023
Funny Marco Birth Chart
Nbc Breaking News Nyc
Heyimbee Forum
Haverhill, MA Obituaries | Driscoll Funeral Home and Cremation Service
Ring Of Endurance Osrs Ge
Lvaction Login
Acbl Homeport
Nickelodeon Home Media
Cnb Pittsburg Ks
Costco Gasoline and Sam's Club Fuel Center Gas Savings - Consumer Reports
Bj 사슴이 분수
9 best hotels in Atlanta to check out in 2023 - The Points Guy
Dyi Urban Dictionary
Theatervoorstellingen in Roosendaal, het complete aanbod.
General Kearny Inn Motel & Event Center
Idaho Pets Craigslist
Craigslist Boats For Sale By Owner Sacramento
Watkins Brothers Funeral Homes Macdonald Chapel Howell Obituaries
John Deere Z355R Parts Diagram
Viaggio Apostolico a Singapore: Santa Messa nello Stadio Nazionale presso il “Singapore Sports Hub” (12 settembre 2024)
Grasons Estate Sales Tucson
Petra Gorski Obituary
Currently Confined Coles County
Fgo Spirit Root
Craigslist Ri Rhode Island
Wrdu Contests
James in Spanish | Spanish to Go
Latest Posts
Article information

Author: Ray Christiansen

Last Updated:

Views: 5657

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Ray Christiansen

Birthday: 1998-05-04

Address: Apt. 814 34339 Sauer Islands, Hirtheville, GA 02446-8771

Phone: +337636892828

Job: Lead Hospitality Designer

Hobby: Urban exploration, Tai chi, Lockpicking, Fashion, Gunsmithing, Pottery, Geocaching

Introduction: My name is Ray Christiansen, I am a fair, good, cute, gentle, vast, glamorous, excited person who loves writing and wants to share my knowledge and understanding with you.