编程最重要的基础技术就是操作字符串,所以我们首先向大家介绍字符串库.
字符串就是由多个字符组成的字符串,注意字符与字符串是不同的.字符只是字符串中一个最小的单位。
一个英文字符、在内存中占用一个8bit位的字节(8个二进制位),在计算机内部字符实际上就是一个8bit位的数值。
字符在内存中的数值数据称为字节码。
而一个中文字符,通常占两个字节(16个二进制位)
通常在其他的编程语言中,字符串指一段文本。文本总是以"/0"(字节码等于0)表示结束。
所以字符串也就不可能包括"/0"。这也是普通文本与二进制数据的最大区别。
但是在LAScript中,字符串指的是二进制数据,而不是单纯的文本。允许包括"/0"。
即可以处一普通的文本,也可以处理二进制数据。这在其他编程语言里似乎不可思议。
n = string.len(str)
返回字符串str的长度n,也可以直接写 n = #str;
str2 = string.rep(str, n)
返回重复n次字符串s的串;
类似于c++中的 lpsz = char[n],在调用WinAPI的时候,我们可以用这个函数分配字符串缓冲区。
chr = string.byte(str, i)
取字符串str的第i个字符的字节码(整数值);
第二个参数可以省略(使用默认值1)。
str = string.char(chr[,...])
参数为0个或多个整数值,将每个整数作为字符的字节码连接成字符串。
例如:
str = string.c(lpsz)
将API函数中的字符串C指针转换为LAScript字符串. lpsz是一个数字值,必须是一个有效的字符串内存指针.
如果您不是精通C语言中的指针,请谨慎使用这个函数,输入错误的指针值程序会立即崩溃。
tab = string.split( str ,",")
拆分字符串str,第二个参数(可指定多个,可使用模式匹配)指定分隔符,
返回一个table数组。
str2 = string.lower(str)
将字符串str转换为小写
str2 = string.upper(str)
将字符串str团换为大写
str2 = string.reverse(str);
把字符串的所有字符反转变成从后向前排列。
str2 = string.trim(str ," ")
去除字符串首尾指定的字符,用第二个参数指定要去除的字符,
可指定多个,可使用模式匹配,例如用%s表示所有空白字符。
str2 = string.sub(str,i,j)
截取字符串str的从第i个字符到第j个字符之间的字符串。
i和j表示字符串索引,正数从前向后数,负数从后向前数,
1表示第一个字符,-1表示最后一个字符.参数j可以省略(使用默认值-1);
str2 = string.left(str ,n)
从字符串左侧取两个字符,注意一个中文字占两个字节。
你也可以用 str2 = string.sub(str,0,n) 实现同样的功能
str2 = string.right(str ,n)
从字符串右侧取两个字符,注意一个中文字占两个字节
你也可以用 str2 = string.sub(str,-(n),-1) 实现同样的功能.
string.format用来格式化字符串(按指定的规则连接字符串或输出其他变量并返回新的字符串) 。
使用方法与C语言的printf函数相同(实际上很多编程语言中都有同样的格式化函数).
string.format(fm,...);
第一个参数用fm表示输出的格式,每个%符号后面是一个格式化表达式,每个格式化表达式按顺序对应后面的参数。
所以用了N个格式化表达式,就必须在后面添加N个参数。
下面是一个简单的例子:
格式化语法详细说明:
格式化表达式:%[零个或多个标志][最小字段宽度][精度][修改符]格式码
注意:[]方括号表示可选参数
1、格式码
代码 c
参数 数字值(number)
含义 参数被裁剪为8位字节码并作为字符进行打印。
代码 i,d
参数 数字值(number)
含义 参数作为一个十进制整数打印。如果给出了精度而且值的位数小于精度位数,前面就用0填充。
代码 u,o,x,X
参数 数字值(number)
含义 参数作为一个无符号数字值打印,u使用十进制,o使用八进制,x或X使用十六进制,两者的区别是x约定使用abcdef,而X约定使用ABCDEF。
代码 e,E
参数 数字值(number)
含义 参数根据指数形式打印。例如,6.023000e23是使用代码e,6.023000E23是使用代码E。小数点后面的位数由精度字段决定,缺省值是6。
代码 f
参数 数字值(number)
含义 参数按照的常规浮点格式打印。精度字段决定小数点后面的位数,缺省值是6。
代码 g,G
参数 数字值(number)
含义 参数以%f或%e(如G则%E)的格式打印,取决于它的值。如果指数大于等于-4但小于精度字段就使用%f格式,否则使用指数格式。
代码 s
参数 字符串值(string)
含义 打印一个字符串。
代码 q
参数 (无)
含义 打印一个字符串,并将字符串置于一对引号中,如果字符串中包含引号换行等自动添加转义符。如果要读取一个字符串传为脚本代码。为避免用户恶意注入引号等特殊字符,可以使用%q进行格式化。
代码 %
参数 (无)
含义 取消%转义打印一个%字符,即用%%表示本来的%。
2、 标志
标志 -
含义 值在字段中做对齐,缺省情况下是右对齐。
标志 0
含义 当数值为右对齐时,缺省情况下是使用空格填充值左边未使用的列。这个标志表示用零填充,它可用于d,i,u,o,x,X,e,E,f,g和G代码。
使用d,i,u,o,x和X代码时,如果给出了精度字段,零标志就被忽略。如果格式代码中出现了负号,零标志也没有效果。
标志 +
含义 当用于一个格式化某个有符号值代码时,如果值非负,正号标志就会给它加上一个正号。如果该值为负,就像往常一样显示一个负号。在
缺省情况下,正号并不会显示。
标志 空格
含义 只用于转换有符号值的代码。当值非负时,这个标志把一个空格添加到它开始的位置。注意这个标志和正号标志是相互排斥的,如果两个
同时给出,空格标志便被忽略。
标志 #
含义 选择某些代码的另一种转换形式:
用于... #标志...
o 保证产生的值以一个零开头
x,X 在非零值前面加0x前缀(%X则为0X)
e,E,f 确保结果始终包含一个小数点,即使它后面没有数字
g,G 和上面的e,E和f代码相同。另外,缀尾的0并不从小数中去除
3、 字段宽度
字段宽度是一个十进制整数,用于指定将出现在结果中的最小字符数。如果值的字符数少于字段宽度,就对它进行填充以增加长度。
4、 精度
精度以一个句点开头,后面跟一个可选的十进制数。如果未给出整数,精度的缺省值为零。
对于d,i,u,o,x和X类型的转换,精度字段指定将出现在结果中的最小的数字个数并覆盖零标志。如果转换后的值的位数小于宽度,就在它的前面插入零。如果值为零且精度也为零,则转换结果就不会产生数字。
对于e,E和f类型的转换,精度决定将出现在小数点之后的数字位数。
对于g和G类型的转换,它指定将出现在结果中的最大有效位数。
当使用s类型的转换时,精度指定将被转换的最多的字符数。
如果用于表示字段宽度和/或精度的十进制整数由一个星号代替,那么printf的下一个参数(必须是个整数)就提供宽度和(或)精度。因此,
这些值可以通过计算获得而不必预先指定。
5、示例
格式代码
|
A
|
ABC
|
ABCDEF
GH
|
%
s
|
A
|
ABC
|
ABCDEFGH
|
%5s
|
####A
|
##ABC
|
ABCDEFGH
|
%.5s
|
A
|
ABC
|
ABCDE
|
%5.5s
|
####A
|
##ABC
|
ABCDE
|
%-5s
|
A####
|
ABC##
|
ABCDEFGH
|
格式代码
|
1
|
-12
|
12345
|
123456789
|
%
d
|
1
|
-12
|
12345
|
123456789
|
%6
d
|
#####1
|
###-12
|
#12345
|
123456789
|
%.4
d
|
0001
|
-0012
|
12345
|
123456789
|
%6.4
d
|
##0001
|
#-0012
|
#12345
|
123456789
|
%-4
d
|
1####
|
-12#
|
12345
|
123456789
|
%04
d
|
0001
|
-012
|
12345
|
123456789
|
%+
d
|
+1
|
-12
|
+12345
|
+123456789
|
格式代码
|
1
|
.01
|
.00012345
|
12345.6789
|
%
f
|
1.000000
|
0.010000
|
0.000123
|
12345.678900
|
%10.2
d
|
######1.00
|
#####0.01
|
######0.00
|
##12345.67
|
%
e
|
1.000000e+00
|
1.000000e-02
|
1.234500e-04
|
1.234568e+04
|
%.4
e
|
1.0000e+00
|
1.0000e-02
|
1.2345e-04
|
1.2346e+04
|
%
g
|
1
|
0.01
|
0.00012345
|
12345.7
|
格式代码
|
6.023e23
|
%
f
|
60229999999999975882752.000000
|
%10.2
e
|
60229999999999975882752.00
|
%
e
|
6.023000e+23
|
%.4
e
|
6.0230e+23
|
%
g
|
6.023e+23
|
用上面的格式化函数可以轻松实现数字的进制转换
--数字转换为二进制字符串
str = string.format("%b",23 );
--二进制字符串转换为数字
n = tonumber(str,2)
--数字转换为八进制字符串
str = string.format("%o",23 );
--八进制字符串转换为数字
n = tonumber(str,8)
--数字转换为十六进制字符串
str = string.format("%x",23 );
--十六进制字符串转换为数字
n = tonumber(str,16)
模拟精灵v7.10 格式化时间的函数有 string.time;string.ftime;os.data;os.time 等函数。
os.time 是从table生成数字时间值 string.time是从字符串生成数字时间值。
os.data 与string.ftime功能相同从时间值反过来生成字符串或时间。
这里我们介绍string.time函数、string.ftime函数,下面是使用示例:
格式化语法(在很多编程语言中都适用的语法)