![]() Capt. Horatio T.P. Webb | SEQUENTIALS VbScript and Javascript Parks -- Spring 2003 Last Updated 12 PM 6/11/2015 |
![]() | |||||
VBScript Functions | Javascript Properties and Methods | ||||
ASC usage is: data_name=ASC("some character") Returns the ascii code number of the character e.g., ASC("A") returns the integer 65.
|
charCodeAt() method usage is: data_name=some_string.charCodeAt(integer) Returns the ASCII character number of the character at the location in the string specified by the integer. The characters in the string are numbered beginning at 0. e.g., "TEXAS".charCodeAt(3) returns the ASCII character number of the fourth character ("A") which is 65. | ||||
CHR usage is: data_name=CHR(some integer <= 255)
e.g., fred=CHR(65) returns the character A |
fromCharCode() method usage is: data_name=String.fromCharCode(integer,integer,integer,...) Returns the ascii characters associated with a list of one or more comma separated integers. (i.e., the integers are between 0 and 255 that define the integer location of where the character appears on the list of ASCII characters) e.g., String.fromCharCode(65) returns the character "A". e.g., String.fromCharCode(65,66,67) returns the character string "ABC". | ||||
Ucase
usage is: Ucase("string") Converts all the string characters to upper case e.g., fred=ucase("to be or not to be")
|
toUpperCase method
usage is: some_string.toUpperCase(); Converts all the string characters to upper case. e.g.,
fred="to be or not to be"; assigns "TO BE OR NOT TO BE" to new_fred | ||||
Lcase
usage is: Lcase("string") returns the string with all characters converted to lower case e.g., fred=Lcase("Internet")
|
toLowerCase method
usage is: some_string.toLowerCase(); Converts all the string characters to lower case. e.g.,
fred="Internet"; assigns "internet" to new_fred | ||||
Ltrim
usage is: Ltrim("string") removes leading blanks (left side) from the string e.g., fred=Ltrim(" 123")
|
|||||
Rtrim
usage is: Rtrim("string") removes trailing (right side) blanks from the string e.g., fred=Rtrim(" 123 ")
|
|||||
Trim
usage is: Trim("string") removes both leading and trailing blanks from the string e.g., fred=Trim(" 123 ")
|
|||||
Left
usage is: Left("string",number_of_characters_to_remove) remove the left-most number of characters specified e.g., fred=Left("123456789",5)
|
|||||
Right
usage is: Right("string",number_of_characters_to_remove) remove the right-most number of characters specified e.g., fred=Right("123456789",5)
|
|||||
StrReverse
usage is: new_string = StrReverse( original_string ) StrReverse reverses the sequence of characters in original_string and returns the new string to new_string. e.g.,
| |||||
concat (string version, see array version here)
usage is: some_string.concat( string-1, string-2, string-3, ... ) the .concat (string version) attaches to the END of some_string the string values of string-1, string-2, string-3,...etc. e.g.,
| |||||
slice (string version, see array version here)
usage is: some_string.slice( begin , end ); the .slice (string version) extracts characters from some_string strating at the index value of begin and continues up to BUT NOT including the index value end. If the end is specified as a negative number, the process stops at this value from the end of the some_string (i.e.,
if end = -1, the last character is NOT copied to some_string; if end is not specified, all elements from begin to the end of some_string are copied. The original contents of some_string are not modified or destroyed. e.g., fred = "ABCDEFGH";
fred = "ABCDEFGH";
fred = "ABCDEFGH";
| |||||
InStr
usage is: InStr(start_char,"string-1","string-2",case_match) Beginning at start_char, the function finds the location of string-2 in string-1. The function returns the location (character number) where string-2 begins. start_char is optional. string-1 and string-2 are BOTH required, case_match is optional -- a 0 means case sensitive (exact matches only) and a 1 means case insensitive (exact matches only). Returns a zero is string-2 is NOT found in string-1. e.g.,
InStrRev(start_char,"string-1","string-2",case_match) works the same as InStr except that the search is performed FROM THE END of the string TO the beginning. start_char is optional -- if omitted the search starts at the LAST character. |
indexOf() method lastIndexOf() method search() method match() method
indexOf usage is: some_string.indexOf(search_string ,start_char) Beginning at start_char, the method finds the location of search_string in some_string. The method returns the location (character number) where search_string begins. start_char is optional. if the search_string is not found the method returns a -1. if the start_char is omitted, the method begins at string location zero (i.e., the first character). This method returns the location of the first occurrence of the search_string (i.e., the search is from left to right) e.g.,
lastIndexOf usage is: some_string.lastIndexOf(search_string ,start_char) Beginning at start_char, the method finds the location of search_string in some_string. The method returns the location (character number) where search_string begins. start_char is optional. if the search_string is not found the method returns a -1. if the start_char is omitted, the method begins at the last string location. This method returns the location of the last occurrence of the search_string (i.e., the search is from right to left) e.g.,
search usage is: some_string.search(string); The location where string appears in some_string is returned. If the string is not found a -1 is returned. e.g.,
fred="12xx12341234"; assigns 2 to xx_location. match usage is: some_string.match(string); Creates an array where each occurrence of the string that appears in some_string is stored. Note that all the values in the array are the same. e.g.,
fred="123412341234"; assigns "12" to array_of_12[0], "12" to array_of_12[1],and "12" to array_of_12[2] | ||||
Len
usage is: Len("string") returns the length of the string e.g., fred=len("12345678")
|
.length property (string version -- see array version here)
usage is: some_string..length returns the length of the string e.g., fred="12345678"; e.g., length_of_fred=fred.length;
| ||||
Mid
usage is: Mid("string",start_char,number_of_characters_to_retreive) beginning at start_char,
e.g., fred=Mid("123456789",6,3)
|
charAt() method substr() method substring() method
charAt() usage is: data_name=some_string.charAt(integer) Returns the character at the location in the string specified by the integer. The characters in the string are numbered beginning at 0. e.g., some_string.charAt(3) returns the fourth character in the string. substring() usage is: new_string=some_string.substring(start_char,end_char); Returns the string at the location in the string starting at start_char and up to BUT NOT INCLUDING end_char. The characters in the string are numbered beginning at 0 (e.g.,
fred="Yellow Rose of Texas"; assigns "w" to new_string.
substr() usage is: new_string=some_string.substr(start_char,number_of_characters_to_extract); Returns the string at the location in the string starting at start_char and then extracting a number of characters equal to number_of_characters_to_extract. The characters in the string are numbered beginning at 0. If the second parameter is omitted, all the characters in the string to the right of the start_char are returned. (e.g.,
fred="Yellow Rose of Texas"; assigns "w Rose" to new_string. | ||||
replace
usage is: replace ( string, search_for_string, replace_with_string, start_char, number_of_replacements, comparison_type) Beginning at start_char, the function finds the search_for_string in string and replaces it with replace_with_string. The value of number_of_replacements determines how many times this can occur.
The default value for start_char if omitted is 1. The replace function can return:
e.g., fred=replace("123412341234","23","xx",5,1,1)
|
replace method replace usage is: some_string.replace(string-1, string-2); The value of string-1 is replaced in some_string with the value of string-2 once. Only the first occurrence in the string from left to right is replaced. e.g.,
fred="123412341234"; This javascript replace method ONLY replaces the first occurrence of string-1 with string-2. To replace all occurrences we need to use a loop like this:
while ( some_string.indexOf(string-1) > -1) This while loop:
|
||||
Space
usage is: Space(number_of_spaces) creates a string with number_of_spaces spaces. e.g., fred=Space(4)
|
|||||
FormatNumber
usage is: FormatNumber( expression or variable , number_of_digits_to_the_right_of_the_decimal, include_leading_zero, use_parenthesis_for_negatives, group_digits) converts a numeric expression or numeric variable to a string.
e.g., formatnumber(17869.435)
|
Formatting numbers
There are two javascript formatting methods:
| ||||
FormatCurrency
usage is: FormatCurrency( expression or variable , number_of_digits_to_the_right_of_the_decimal, include_leading_zero, use_parenthesis_for_negatives, group_digits) converts a numeric expression or numeric variable to a string. after conversion the currency symbol ($) is added to the left of the string
e.g., formatcurrency(17869.435)
|
|||||
FormatPercent
usage is: FormatPercent( expression or variable , number_of_digits_to_the_right_of_the_decimal, include_leading_zero, use_parenthesis_for_negatives, group_digits) converts a numeric expression or numeric variable to a string. the numeric result is multiplied by 100 before conversion and the percent symbol (%) added to the right
e.g., formatpercent(17.435)
|
|||||
FormatDate
usage is: FormatDate( date string , format number)
e.g.,
|
|||||
String
usage is: String(number_of_occurences,"character",) creates a string with number_of_occurences copies of the character e.g., fred=String (5,"a")
|
|||||
Hex
usage is: Hex(integer) returns the hexadecimal (base 16) equivalent of the integer e.g., fred=Hex(15321)
|
|||||
Oct
usage is: Oct(integer) returns the octal (base 8) equivalent of the integer e.g., fred=Oct(15321)
|
|||||
Split
usage is:
Dim array name =
The function searches string and retrieves substrings that appear BETWEEN occurrences of the
"character(s) used to define the split positions" and returns them to a zero-based array that appears on the left of the = sign. e.g.,
fred="1234,5678,abcd"; assigns "1234" to fred_array(0), "5678" to fred_array(1) and "abcd" to fred_array(2). |
split method usage is: some_string.split(character_to_use_as_define_the_split; The characters in some_string are split into multiple strings and stored in an array. The character in the parenthesis (character_to_use_to_define_the_split) determines where the split occurs. This character is not stored in the array. e.g.,
var fred="1234,5678,abcd";
assigns: | ||||
String Conversions
Seven conversions to strings are provided:
|
parseInt() function parseFloat() function toString() These functions convert strings to numbers. parseInt usage is: fred=parseInt(string containing a number); returns a integer.
parseFloat usage is: fred=parseFloat(string containing a number); returns a number of digits, a decimal point and a minus sign if present. The function ignores non-numerics. Note: these are NOT methods -- they are functions. You do not use object notation here like you do on must methods in this column. You might suppose you should say: variable_name.parseInt(); WRONG. This would imply that parseInt() was a method. It is NOT. It is a function that you pass an argument like this: variable_2 = parseInt(variable_1); It is always possible that javascript will be unable to convert that value you specify to an integer. For example this:
alice="abcd"; This will results in fred getting the value "NAN" (i.e., Not A Number). To prevent this you can check first:
if ( isNaN(alice) ) NOTE: The full format of parseInt is: some_variable=parseInt(some_string,radix) The radix term defines the base of the number to be returned. Normally this defaults to base 10. However, you should supply the base for the number you wish to return because there are a few places where unintended results occur. Most often this happens with the strings "08" and "09". Both parseInt("08") and parseInt("09") return zero!. The javascript convention for numeric constants is:
"0x" followed by some digits is assumed to be hexadecimal (base 16)(e.g., 0xff is 255) Thus javascript checks the beginning of the string to determine the base (radix). If it encounters a "0x" as the first two characters it assumes this is a hexadecimal string; if it encounters a zero as the first character it assumes it is an octal; otherwise it assumes it is decimal. Thus "08" and "09" convert to zero since the strings have invalid octal values (i.e., 8 and 9). But "00", "01", "02", "03", "04", "05", "06", and "07" are correctly converted from octal to 0, 1, 2, 3, 4, 5, 6, and 7. Just to be sure always specify the radix. toString() the .toString method converts a number to a string. Usage is: variable containing a number.toString(); For example:
fred=14; Returns "14" to alice.
fred=-14.33; Returns "-14.33" to alice. You can also change the numeric base (or radix) by using: variable containing a number.toString(radix); For example:
fred=17; Returns "10001" to alice (one 16s + no 8s + no 4s + no 2s + 1 unit = 17).
fred=17; Returns "122" to alice (1 9s + 2 3s + 2 units = 17).
fred=17; Returns "101" to alice (1 16s + 0 4s + 1 unit = 17).
fred=17; Returns "21" to alice (2 8s+ 1 unit = 17).
fred=17; Returns "11" to alice (1 16s + 1 unit).
| ||||
![]() | |||||
VBScript | Javascript | ||||
Addition
usage is: (numeric variable or constant) + (numeric variable or constant) sums the two values e.g., fred=14 + 21
e.g., fred=alice + 21
|
Same as VBScript but adds:
variable++
increments the value of
variable += constant or expression
adds the value of the constant or expression to the value variable
| ||||
Subtraction
usage is: (numeric variable or constant) - (numeric variable or constant) calculate the difference between the two values e.g., fred=14 - 2
e.g., fred=alice - 21
|
Same as VBScript but adds:
variable--
decrements the value of
variable -= constant or expression
subtracts the value of the constant or expression from the value variable
/ | ||||
Multiplication
usage is: (numeric variable or constant) * (numeric variable or constant) multiplies the two values e.g., fred=14 * 2
e.g., fred=alice * 2
|
same as VBScript | ||||
Division (floating point)
usage is: (numeric variable or constant) / (numeric variable or constant) divides first value by the second value e.g., fred=14 / 2
e.g., fred=alice / 2
|
same as VBScript | ||||
Division (integer)
usage is: (numeric variable or constant) \ (numeric variable or constant) divides first value by the second, but stores only the integer portion of the answer e.g., fred=14 \ 6
e.g., fred=36 \ 5
|
|||||
Exponentiation
usage is: (numeric variable or constant) ^ (numeric variable or constant) raises first value to the power of the second value e.g., fred=4 ^ 3
e.g., fred=3 ^ 2
|
pow() method Raises a number to a power. Two arguments must be supplied to the method. usage is: fred=Math.pow(number,power); e.g., fred=math.pow(4,3);
e.g., fred=Math.pow(3,2);
| ||||
Modular Arithmetic (mod)
usage is: (numeric variable or constant) mod (numeric variable or constant) divides the first value by the second and returns the remainder e.g., fred=4 mod 3
e.g., fred=3 mod 3
|
Modular Arithmetic %
usage is: (numeric variable or constant) % (numeric variable or constant) divides the first value by the second and returns the remainder e.g., fred=4 % 3;
e.g., fred=3 % 3;
| ||||
Negation (unary minus)
usage is: -(numeric variable or constant) multiplies the value by -1 e.g., fred= - 3
e.g., fred= - alice
|
same as VBSscript | ||||
Operator Precedent
The math operators are executed in the following order of precedent:
|
Operator Precedent
The math operators are executed in the following order of precedent:
|
||||
![]() | |||||
VBScript Functions | Javascript Properties and Methods | ||||
Absolute Value (ABS)
usage is: ABS(numeric variable or constant) returns the value as a positive number e.g., fred= ABS (-3)
e.g., fred= ABS (alice)
|
abs() method
usage is: Math.abs(constant, variable or expression);
returns the value of the constant, variable or expression as a positive number. e.g., fred= Math.abs(-3);
e.g., fred= Math.abs(alice);
| ||||
Sign (SGN)
usage is: SGN(numeric variable or constant) returns the value the sign
e.g., fred= SGN (-3)
e.g., fred= SGN (+3)
e.g., fred= SGN (0)
|
|||||
Logarithm -- natural (LOG)
usage is: LOG(numeric variable or constant) returns the natural logarithm of the value (i.e., base e or 2.718282) e.g., fred= LOG (10)
e.g., logarithm of 100 base 10 = log(100)/log(10)=2 |
log() method usage is: Math.log(numeric variable or constant); returns the natural logarithm of the value (i.e., base e or 2.718282) e.g., fred= Math.log(10)
e.g., logarithm of 100 base 10 = log(100)/log(10)=2 | ||||
Exponentiation (EXP)
usage is: EXP(numeric variable or constant) returns the e raised to the power of the value e.g., fred= EXP (2)
|
exp() method
usage is: Math.exp(numeric variable or constant) returns the e raised to the power of the value e.g., fred= Math.exp(2)
|
||||
Square Root(SQR)
usage is: SQR(numeric variable or constant) returns the square root of the value e.g., fred= SRQ (16)
|
sqrt() method
usage is: Math.sqrt(numeric variable or constant) returns the square root of the value e.g., fred= Math.sqrt(16);
| ||||
Sin (SIN)
usage is: SIN(numeric variable or constant) returns the trigonometric sin of the value the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= SIN (45.0*3.14159/180.0)
|
sin() method
usage is: Math.sin(numeric variable or constant) returns the trigonometric sin of the value the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= Math.sin(45.0*3.14159/180.0);
| ||||
Cosine (COS)
usage is: COS(numeric variable or constant) returns the trigonometric cosine of the value the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= COS (45.0*3.14159/180.0);
|
cos() method
usage is: Math.cos(numeric variable or constant) returns the trigonometric cosine of the value the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= Math.cos(45.0*3.14159/180.0);
| ||||
Tangent (TAN)
usage is: TAN(numeric variable or constant) returns the trigonometric tangent of the value the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= TAN (45.0*3.14159/180.0);
|
tan() method
usage is: Math.tan(numeric variable or constant) returns the trigonometric tangent of the value the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= Math.tan(45.0*3.14159/180.0);
| ||||
ArcTangent (ATN)
usage is: COS(numeric variable or constant) returns the trigonometric arctangent of the value (i.e., the angle whose tangent is the value) the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= ATN (1.0*180.0/31.14159)
|
atan() method
usage is: atan(numeric variable or constant) returns the trigonometric arctangent of the value (i.e., the angle whose tangent is the value) the function value must be expressed in radians NOT in degrees to get from degrees to radians use the expression: radians = degrees*3.14159/180. to go from radians to degrees use the expression: degrees = radians*180.0/3.14159 e.g., fred= Math.atan (1.0*180.0/31.14159)
| ||||
Fix (FIX) and Int (INT)
usage is: FIX(numeric variable or constant) INT(numeric variable or constant) both functions return the integer portion of the value e.g., fred= FIX (45.3)
e.g., fred= INT (45.3)
e.g., fred= FIX (-5.3)
e.g., fred= INT (-5.7)
|
ceil() method floor() method round() method ceil() usage is: fred=Math.ceil(floating point number); This method rounds up to the next larger integer. floor() usage is: fred=Math.floor(floating point number); This method rounds down to the next smaller integer. round() usage is: fred=Math.round(floating point number); This method rounds to the nearest integer (if < 0.5 it rounds down -- if > 0.5 it rounds up)
| ||||
min and max
min usage is: some_variable = Math.min ( arg-1 , arg-2, arg-3, ...); returns to some_variable the smaller of the numbers arg-1, arg-2, arg-3, etc. e.g., r=Math.min(3,5,7,1,0,-1); returns -1 to r.
max usage is: some_variable = Math.max ( arg-1 , arg-2, arg-3, ...); returns to some_variable the largest of the numbers arg-1, arg-2, arg-3, etc. e.g., r=Math.max(3,5,7,1,0,-1); returns 7 to r. There is no specific built-in min and max function in javascript for finding the largest and smallest elements in an array. There are many work-around for this issue (see this discussion). As noted in the discussion the fastest way to do this is to:
For minimums the code for finding the smallest value in array named fred would be:
minfred = fred[0]; For a maximum:
maxfred = fred[0]; To find both the minimum and maximum:
minfred = fred[0]; (see Cyberknight's answer (Apr 2 2014) in the stackoverflow.com discussion link above) | |||||
Random Numbers (RND)
usage is: RND returns a number between 0 and 1 (i.e., 0.0 > RND < 1.0) note that the result is never 0.0 or 1.0 e.g., fred=RND
e.g., to generate numbers between 1.0 and 27.0, use:
|
random method usage is: fred=Math.random(); Returns a pseudo-random number between 0.0 and 1.0. | ||||
Randomize
usage is: Randomize causes a new sequence of random numbers to be generated
| |||||
![]() | |||||
VBScript Functions | Javascript Properties and Methods | ||||
UBound and LBound
usage is: variable = UBound ( array_name , dimension ) and variable = LBound ( array_name , dimension ) UBound returns to variable the largest subscript available in the array named array_name. This is NOT the number of array elements (note most often arrays begin numbering at zero). LBound returns to variable the smallest subscript available in the array named array_name. A typical use for these two functions is to define the processing limits for a loop. For example:
Dim a(4) This code would display a sequence of message boxes that display : "1st", "2nd", "3rd" and then "4th". UBound would be 3 and LBound would be 0. |
.length (array version)
usage is: variable = array_name.length; variable is assigned an integer which is the length (number of elements) of array_name (i.e., the number of elements in array_name). Note that this is NOT the largest index of array_name. As the javascript arrays are zero-based (i.e., the first array element has an index of zero), the largest array element has an index of array_name.length - 1. | ||||
Join
usage is: string = Join (array_name, delimiter) Concatenates all the elements of the array_name into a single string. array_name is the name of a single dimension array. delimiter is optional -- if supplied this string is used in the result to separate each of the elements of the array. If delimiter is NOT provided the space character is used to separate the items. If delimiter is a zero length string, the elements are NOT separated. e.g.,
Dim a(4) fred gets assigned the value "a b c d" |
Join
usage is: string = array_name.join (delimiter); Concatenates all the elements of the array_name into a single string. array_name is the name of a single dimension array. delimiter is optional -- if supplied this string is used in the result to separate each of the elements of the array. If delimiter is NOT provided a comma is used to separate the items. If delimiter is a zero length string, the elements are NOT separated.
e.g.,
var a = new Array(4) fred gets assigned the value "a,b,c,d" |
||||
Filter
usage is: array_name_2 = Filter ( array_name_1 , string , include ) Filter searches an array specified as the first argument (i.e., array_name_1) looking for array elements that contain the second argument string. For each element of array_name_1 that contains string, a copy is made an placed in array_name_2. include is optional -- if true the Filter returns elements that DO CONTAIN string; if include is false the Filter returns elements that DO NOT CONTAIN string. Default for include is true. | |||||
concat
usage is: array-1.concat ( item-1, item-2, item-3, ... ); .concat attaches to the end of array-1 the items provided in the argument list in sequence. An item may be an array. e.g.,
var a = new Array (); after the .concat, a contains:
a[0]="1"; | |||||
slice
usage is: var array_2 = array-1.slice ( beginning-element , ending-element );
.slice returns a new array whose zeroth element from array-1's beginning-element element. This process continues up to BUT NOT including array-1's ending-element. If the ending-element is specified as a negative number, the process stops at this value from the end of the array (i.e., if ending-element is not specified, all elements from beginning-element to the end of array-1 are copied to array_2. The original contents of array-1 are not modified or destroyed. e.g.,
var a = new Array ();
a[0]="1"; this code produces:
b[0]="2"; | |||||
reverse
usage is: array.reverse (); .reverse swaps the order of the elements of array. The first (index value = 0) becomes the last; the second (index value = 1) becomes the next-to last; ... ;the next-to-last becomes the second (index value = 1); and the last becomes the first (index value = 0). e.g.,
var a = new Array (); this code produces:
a[0]=9 | |||||
![]() | |||||
VBScript Functions | Javascript Properties and Methods |
What is the Time and Date?
|
What is the Time and Date?
Dates and Time in javascript are based on accessing you computer's current data and time through the creation of a Date object as: var date_time_object = new Date () The value returned is in: DDD MMM dd hh:mm:ss tmz YYYY where:
e.g., Most of the following methods use the Date object you create to "get" or "set" one of the parts of the Date object.
Using a date field, the example below shows the .gettime/date property() values. In IE getDate is: Fri May 1 14:01:24 CDT 2009 Firefox says: Fri May 01 2009 14:06:50 GMT-0500 (Central Daylight Time) getDate() is 1
getMonth() is 4 Month and Day names have to be constructed by using additional code as do "AM" or "PM". |
||
|