跳转到内容

从压缩包中编程 Gambas/函数

来自 Wikibooks,开放世界中的开放书籍

函数参考

[编辑 | 编辑源代码]

字符串函数

[编辑 | 编辑源代码]
字符代码
Asc 返回字符的 ASCII 代码 每个字符都有一个 ASCII 代码,例如 Asc("A") 是 65。
Chr 从 ASCII 代码返回一个字符 Chr(65) 是 "A"。Chr(32) 是空格。Chr(1) 是 Ctrl-A

在检查是否按下了键时,请使用 Key["A"] 或 Key[Key.ShiftKey] 代替键盘上键的数字,而不是字符的数字。

字符串的一部分
Left 字符串的左边部分 Left("Hello", 4) 是 "Hell"
Mid 字符串的“中间”部分

Mid(String, StartingAt, HowLong)

Mid("Gambas", 3, 2) 是 mb,因为它是从位置 3 开始且长度为 2 个字符的字符串。
Right 字符串的右边部分 Right("String", 4) 是 "ring"
查找和替换
InStr 第二个字符串在第一个字符串中的位置

InStr(String, LookFor)

InStr(String, LookFor, StartingAt)

InStr("Gambas is basic", "bas") 是 4,因为 bas 从位置 4 开始。

InStr("Gambas is basic", "bas", 6) 是 11,因为 InStr 只从位置 6 开始查找 bas。

如果未找到字符串,则返回 0。

InStr("Gambas is basic", "bas", -5) 是 11。-5 表示只从末尾开始查找 5 个字符直到末尾,即位置 10,即第二个空格。请注意,最后一个字母 c 距离末尾不是 1 个字符。它就是末尾。i 距离末尾 1 个字符。

Replace 一个字符串,其中每个出现的某些东西都被其他东西替换

Replace(String, LookFor, WithThis)

Replace("Abracadabra", "a", "*") 是 Abr*c*d*br*

Message( Replace(LetterText, "<name>", FirstName&" "&LastName) )

Subst 一个字符串,其标记被其他字符串替换 Subst("Tell &1 to arrive at &2 PM", "Mark", "4") 是

"Tell Mark to arrive at 4 PM"

更改大小写
UCase 将字符串转换为大写。 UCase("gerard") 是 "GERARD"
LCase 字符串转换为小写 LCase("GERARD") 是 "gerard"
修整
Trim 两端没有空格的字符串 Trim(" Hello ") 是 "Hello"
LTrim 左修整

从开头删除空格的字符串

LTrim(" Hello") 是 "Hello"
RTrim 右修整

从结尾删除空格的字符串

RTrim("Hello ") 是 "Hello"
构建字符串
String 由同一个字符串重复多次组成的字符串。

String(HowMany, WhichString)

String(6, "*") 是 "******"

String(2, "Gambas") 是 "GambasGambas"

Space 一个空格字符串 Space(8) 是 8 个空格
Quote 带引号的字符串

UnQuote 函数会移除它们。

Quote("Hello,") & " she said." 是 "Hello," she said.
其他
Len 字符串的长度 Len("Gambas is basic") 是 15
Comp 比较两个字符串

Comp(FirstString, SecondString)

Comp(FirstString, SecondString, Mode)

如果两个字符串相同,则返回 0。

如果第一个字符串在字典中出现在第二个字符串之后,则返回 +1

如果第一个字符串在字典中出现在第二个字符串之前,则返回 -1

如果 Comp(UserName, "Akiti", gb.IgnoreCase) = 0 Then Message("Welcome Akiti!") else Message("You’re not Akiti!")

Split 一个由字符串组成的数组

Split(String, Separator)

Dim z As String[] = Split("John,Mary,Paul,Gemma,Lucille,Hamish", ",")

字符串在逗号处分割。

数字函数

[编辑 | 编辑源代码]
正数和负数
Abs 数字的绝对值 - 移除任何负号。 Abs(7) = 7

Abs(-7) = 7

Sgn 数字的符号 (+, 0, –) Sign(3.14) = +1

Sign(–6) = –1

Sign(0) = 0

转换为整数
Int 数字的整数部分

负数向下取整;正数舍弃小数部分。

Int(3.2) = 3

Int(3.9) = 3

Int(6) = 6

Int(-7.2) = -8

Int(-7.9) = -8

Round 将数字四舍五入到最接近的整数或十的次方

例如,10^2 是 100,所以 Round(x,2) 是四舍五入到最接近的 100。

负数表示小数位数

Round(Pi, -2) = 3.14

Print Round(1972, 2) = 2000

Frac 数字的小数部分

日期的小数部分是时间。

Frac(3.14) = 0.14

Frac(Date(1999, 12, 13, 14, 20, 00)) = 0.597222222015

CDate(Frac(Date(1999, 12, 13, 14, 20, 00))) = 14:20:00

Fix 数字的整数部分 - 移除任何小数部分 Fix(3.14) = 3

Fix(-3.14) = -3

CInt 转换为整数

完全舍弃小数部分。

Int(3.2) = 3

Int(3.9) = 3

Int(6) = 6

Int(-7.2) = -7

Int(-7.9) = -7

Floor 向下取整到下一个最小的整数 Floor(3.14) = 3

Floor(-3.14) = -4

Ceil 向上取整到下一个最大的整数 Ceil(3.14) = 4

Ceil(-3.14) = 3

比较
Max 两个数字中较大的一个

也适用于日期

Max(6,4) = 6
Min 两个数字中较小的一个

也适用于日期

Min(6,4) = 4
增加和减少
INC 增加一个变量;与 x += 1 或 x = x+1 相同

这是一个过程而不是函数(没有括号;它是动词而不是名词)

INC x
DEC 减少一个变量;与 x –= 1 或 x = x–1 相同

这是一个过程而不是函数。

DEC x

字符测试函数

[编辑 | 编辑源代码]

空字符串是 NULL。IsNull("") 是 True。IsNull("M") 是 False

IsAscii 测试字符串是否仅包含 ASCII 字符。
IsBlank 测试字符串是否仅包含空白字符。
IsDigit 测试字符串是否仅包含数字。
IsHexa 测试字符串是否仅包含十六进制数字。
IsLCase 测试字符串是否仅包含小写字母。
IsLetter 测试字符串是否仅包含字母。
IsPunct 测试字符串是否仅包含可打印的非字母数字字符。
IsSpace 测试字符串是否仅包含空格字符。
IsUCase 测试字符串是否仅包含大写字母。

随机数

[编辑 | 编辑源代码]
Randomize 没有它,每次运行程序时您都会得到相同的随机数序列。 Randomize

只用这个词本身。

Rand 两个数字之间的随机整数。 Rand(1,6) 是 1 到 6(包括 1 和 6)之间的随机数。这可以是骰子掷出的结果。

Rand(1,2) 是 1 或 2 之一。

Rnd 一个随机浮点数。 Rnd( ) 在 0 到 1 之间

Rnd(9) 在 0 到 9 之间,但永远不会是 9 本身。

Rnd(10, 20) 在 10 到 20 之间,但永远不会是 20。

时间和日期

[编辑 | 编辑源代码]

给定的日期和时间在内部存储为两个整数,第一个是日期,第二个是时间。以下示例可能会解释您对日期和时间可以做什么。

示例

Now 07/08/2019 19:18:54.929 2019 年 7 月 8 日,晚上 8:19 左右

当前日期和时间

Format(Now, "dddd dd/mm/yyyy hh:nn:ss") 星期二 09/07/2019 20:45:13 关于 Format() 函数的更多信息将在后面介绍。您可以使用它以您想要的方式显示日期和/或时间,或者任何数字。顺便说一下,现在是 7 月 9 日下午 8:46。
Date() 07/07/2019 23:00:00 今天开始的时间,减去一个小时的夏令时。
Date(1955, 6, 1) 05/31/1955 23:00:00 某人的生日,减去一个小时的夏令时。日期由年、月、日组成。
Date(2019, 12, 25, 6, 15, 0) 12/25/2019 05:15:00 2019 年 12 月 25 日上午 6:15。打开圣诞礼物的时间到了。

年、月、日、时、分、秒

DateAdd(Date(1955, 6, 1), gb.Day, 14) 06/14/1955 23:00:00 1955 年 6 月 1 日后的 14 天。再次减去一个小时的夏令时。

除了天数外,您还可以添加其他内容

gb.Second, gb.Minute, gb.Hour,

gb.Day, gb.Week, gb.WeekDay (忽略星期六和星期日)

gb.Month, gb.Quarter, gb.Year

DateDiff(Date(2019, 7, 6), Date(Now), gb.Day) 2 两天前到现在的天数
DateDiff(Date(Now), Date(2018, 12, 25), gb.Day) 195 圣诞节至今的天数?

(现在是 2019 年。上一个圣诞节是 2018 年。)

DateDiff(RecentDate, PastDate, Units)

DateDiff(Date(Now), Date(2019, 12, 25), gb.Day) 170 离圣诞节还有多少天?

(现在是 2019 年。)

DateDiff(Date(1955, 6, 1), Now, gb.Second) 2022959392 我活了多少秒
DateDiff(Date(1955, 6, 1), Now, gb.Day) 23413 我活了多少天
CLong(DateDiff(Date(1955, 6, 1), Now, gb.Minute)) * 72 2427551928 ... 不,等等,是 2427552144 ... 不,等等,是 2427552216 ... 我出生以来有多少次心跳。

必须将 DateDiff 转换为长整数,因为如果没有它,就会出现溢出问题:它显示为负数。长整数可以容纳非常大的数字。

日期和时间的各个部分
Hour(Now) & " hrs " & Minute(Now) & " mins" 14 hrs 39 mins 现在是下午 2:39。

您还可以使用这些

Day(), Hour(), Minute(), Month()

Second(), Time(), Week(), Weekday()

Year()

"Rip van Winkle, this is " & Year(Now) Rip van Winkle, this is 2019 日期的年份部分
WeekDay(Now) 2 0 = 星期日,6 = 星期六

2 表示今天是星期二。

如果 WeekDay(Now) = gb.Tuesday 则 label1.text = "今天是星期二。" 否则 label1.text = "今天不是星期二。" 今天是星期二。 gb.Tuesday 是一个值为 2 的常量。使用常量意味着您无需记住星期二是 2。

其他还有 gb.Monday, gb.Wednesday, gb.Thursday, gb.Friday, gb.Saturday 和 gb.Sunday

Time(Now) 14:58:44.654 日期的时间部分(Now 是当前日期和时间)
Time(14, 08, 25) 14:08:25 从其各个部分组装时间

Time(Hour, Minutes, Seconds)

Time() 15:05:09.515 现在的准确时间
转换
Val("1/6/55") 05/31/1955 23:00:00 将字符串转换为日期

1 小时的差额是由于夏令时造成的。

Val("1/6/55 2:00") 06/01/1955 01:00:00 1955 年 6 月 1 日凌晨 2:00

1 小时的差额是由于夏令时造成的。

Val("1-6-55 2:00") 对格式非常敏感… 被忽略
Str(2484515) 2484515 如果您提供一个数字,Str() 将将该数字转换为字符串。
Dim D As Date = 2484515

label1.text = Str(D)

16/05/2002 01:00:00 该数字已更改为日期。

Str() 将其转换为本地日期格式

Dim D As Date = 2484515

label1.text = D

05/16/2002 美国日期格式
CDate("1-6-55 2:00") 错误 “需要日期,但得到的是字符串。”

不仅敏感,而且被冒犯了...

从 Zip 文件中编程 Gambas
 ← 你知道吗 函数 常量 → 
华夏公益教科书