find: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Fix SQF) |
Lou Montana (talk | contribs) m (Text replacement - "// since Arma 3" to "// since {{arma3}}") |
||
(One intermediate revision by the same user not shown) | |||
Line 26: | Line 26: | ||
|gr2= Arrays | |gr2= Arrays | ||
|descr= Searches for an array element within array or | |descr= Searches for an array element within an array or an ANSI string within an ANSI string. | ||
{{Feature | | {{Feature|arma3|If Unicode support is desired, see [[forceUnicode]].}} | ||
{{Feature | important | Search is cASe-seNsItiVE!}} | {{Feature|important|Search is cASe-seNsItiVE!}} | ||
|s1= array [[find]] element | |s1= array [[find]] element | ||
|p1= array: [[Array]] - | |p1= array: [[Array]] - array to search in | ||
|p2= element: [[Anything]] - | |p2= element: [[Anything]] - array element to find | ||
|r1= [[Number]] - | |r1= [[Number]] - zero-based position of the first array element that matches x, -1 if not found | ||
|s2= string [[find]] substring | |s2= string [[find]] substring | ||
Line 42: | Line 42: | ||
|s2since= arma3 1.28 | |s2since= arma3 1.28 | ||
|p21= string: [[String]] - | |p21= string: [[String]] - string to search in | ||
|p22= substring: [[String]] - | |p22= substring: [[String]] - substring to find | ||
|r2= [[Number]] - | |r2= [[Number]] - zero-based position of the first sequence of characters that matches substring, -1 if not found | ||
|s3= string [[find]] [substring, indexStart] | |s3= string [[find]] [substring, indexStart] | ||
Line 52: | Line 52: | ||
|s3since= arma3 2.02 | |s3since= arma3 2.02 | ||
|p41= string: [[String]] - | |p41= string: [[String]] - string to search in | ||
|p42= substring: [[String]] - | |p42= substring: [[String]] - substring to find | ||
|p43= indexStart: [[Number]] - | |p43= indexStart: [[Number]] - zero-based index which defines where find starts from | ||
|r3= [[Number]] - | |r3= [[Number]] - zero-based position of the first sequence of characters that matches substring, -1 if not found | ||
|x1= <sqf>["Apples", "Oranges", "Pears"] find "Oranges"; // returns 1</sqf> | |x1= <sqf>["Apples", "Oranges", "Pears"] find "Oranges"; // returns 1</sqf> | ||
|x2= <sqf>[1, [2], [[3]]] find [[3]]; // returns 2 - does not work in OFP</sqf> | |x2= <sqf>[1, [2], [[3]]] find [[3]]; // returns 2 - does not work in OFP, returns -1</sqf> | ||
|x3= <sqf>if (magazines player find "Strela" != -1) then { hint "You've got Strela!"; };</sqf> | |x3= <sqf>if (magazines player find "Strela" != -1) then { hint "You've got Strela!"; };</sqf> | ||
Line 70: | Line 70: | ||
|x5= <sqf>"abc" find ""; // returns 0</sqf> | |x5= <sqf>"abc" find ""; // returns 0</sqf> | ||
|x6= <sqf>"abcdefghijklmnopqrstuvxyz" find ["z", 20];</sqf> | |x6= <sqf> | ||
"abcdefghijklmnopqrstuvxyz" find "z"; // returns 24 | |||
"abcdefghijklmnopqrstuvxyz" find ["z", 20]; // returns 24, better performance | |||
</sqf> | |||
|x7= <sqf> | |||
"abcßdef" find "c" // 2 | |||
"abcßdef" find "ß" // 3 | |||
"abcßdef" find "d" // 5 - before forceUnicode | |||
forceUnicode 0; // since {{arma3}} v2.02 | |||
"abcßdef" find "d" // 4 | |||
</sqf> | |||
|seealso= [[in]] [[findIf]] [[forceUnicode]] | |seealso= [[in]] [[findIf]] [[forceUnicode]] | ||
Line 80: | Line 92: | ||
|text= Using '''[[nil]]''' on either side of '''find''' will make the whole statement return [[Nothing]]: | |text= Using '''[[nil]]''' on either side of '''find''' will make the whole statement return [[Nothing]]: | ||
<sqf> | <sqf> | ||
_array = [1,2,nil,4,5]; | _array = [1, 2, nil, 4, 5]; | ||
_result = _array find nil; | _result = _array find nil; | ||
hintSilent str (isNil "_result"); // true | hintSilent str (isNil "_result"); // true | ||
Line 87: | Line 99: | ||
hintSilent str (isNil "_result"); // true | hintSilent str (isNil "_result"); // true | ||
</sqf> | </sqf> | ||
}} | }} | ||
Line 120: | Line 106: | ||
|text= If you want to return all occurences of a given string in a string use the following code. Thanks to ''sharp.'' for providing the code. | |text= If you want to return all occurences of a given string in a string use the following code. Thanks to ''sharp.'' for providing the code. | ||
<sqf> | <sqf> | ||
private _fnc_findStringsInString = | private _fnc_findStringsInString = | ||
{ | { | ||
params ["_string", "_search"]; | params ["_string", "_search"]; | ||
if (_string == "") exitWith {[]}; | if (_string == "") exitWith { [] }; | ||
private _searchLength = count _search; | private _searchLength = count _search; | ||
private _return = []; | private _return = []; | ||
private _i = 0; | private _i = 0; | ||
private _index = 0; | private _index = 0; | ||
while {_index = _string find _search; _index != -1} do | while { _index = _string find _search; _index != -1 } do | ||
{ | { | ||
_string = _string select [_index + _searchLength]; | _string = _string select [_index + _searchLength]; | ||
_i = _i + _index + _searchLength; | _i = _i + _index + _searchLength; | ||
_return pushBack _i - _searchLength; | _return pushBack _i - _searchLength; | ||
}; | }; | ||
_return | _return; | ||
}; | }; | ||
["Test,123,123,Test","Test"] call _fnc_findStringsInString; // returns [0,13] | ["Test,123,123,Test", "Test"] call _fnc_findStringsInString; // returns [0, 13] | ||
</sqf> | </sqf> | ||
}} | }} |
Latest revision as of 18:02, 18 November 2023
Description
- Description:
- Searches for an array element within an array or an ANSI string within an ANSI string.
- Groups:
- StringsArrays
Syntax 1
- Syntax:
- array find element
- Parameters:
- array: Array - array to search in
- element: Anything - array element to find
- Return Value:
- Number - zero-based position of the first array element that matches x, -1 if not found
Syntax 2
- Syntax:
- string find substring
- Parameters:
- string: String - string to search in
- substring: String - substring to find
- Return Value:
- Number - zero-based position of the first sequence of characters that matches substring, -1 if not found
Syntax 3
- Syntax:
- string find [substring, indexStart]
- Parameters:
- string: String - string to search in
- substring: String - substring to find
- indexStart: Number - zero-based index which defines where find starts from
- Return Value:
- Number - zero-based position of the first sequence of characters that matches substring, -1 if not found
Examples
- Example 1:
- ["Apples", "Oranges", "Pears"] find "Oranges"; // returns 1
- Example 2:
- [1, [2], [[3]]] find [[3]]; // returns 2 - does not work in OFP, returns -1
- Example 3:
- Example 4:
- Example 5:
- "abc" find ""; // returns 0
- Example 6:
- "abcdefghijklmnopqrstuvxyz" find "z"; // returns 24 "abcdefghijklmnopqrstuvxyz" find ["z", 20]; // returns 24, better performance
- Example 7:
- "abcßdef" find "c" // 2 "abcßdef" find "ß" // 3 "abcßdef" find "d" // 5 - before forceUnicode forceUnicode 0; // since Arma 3 v2.02 "abcßdef" find "d" // 4
Additional Information
- See also:
- in findIf forceUnicode
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
- Posted on Jan 04, 2015 - 09:38 (UTC)
- Using nil on either side of find will make the whole statement return Nothing:
- Posted on Jul 16, 2020 - 07:33 (UTC)
-
If you want to return all occurences of a given string in a string use the following code. Thanks to sharp. for providing the code.
private _fnc_findStringsInString = { params ["_string", "_search"]; if (_string == "") exitWith { [] }; private _searchLength = count _search; private _return = []; private _i = 0; private _index = 0; while { _index = _string find _search; _index != -1 } do { _string = _string select [_index + _searchLength]; _i = _i + _index + _searchLength; _return pushBack _i - _searchLength; }; _return; }; ["Test,123,123,Test", "Test"] call _fnc_findStringsInString; // returns [0, 13]
Categories:
- Scripting Commands
- Introduced with Operation Flashpoint: Elite version 1.00
- Operation Flashpoint: Elite: New Scripting Commands
- Operation Flashpoint: Elite: Scripting Commands
- Operation Flashpoint: Scripting Commands
- ArmA: Armed Assault: Scripting Commands
- Arma 2: Scripting Commands
- Arma 2: Operation Arrowhead: Scripting Commands
- Take On Helicopters: Scripting Commands
- Arma 3: Scripting Commands
- Command Group: Strings
- Command Group: Arrays