PB得到首拼音码函数无错码

合集下载

pb规范——精选推荐

pb规范——精选推荐

pb规范编程规范及常见问题⼀、开发标准与命名约定●在代码开发中,所有的运算符(+ 、-、 *、 / 、〈、〉等)及赋值动词(=)的前后者应加上⼀个空格,最好在函数的参数表中的每个变量前⾯也要加⼊⼀个空格。

如:wf_Dfjs_Dldb( Ad_zdl, As_lb ) 。

●应使⽤TAB⽽不是空格来缩排循环或复合语句中的代码,显⽰其包含关系。

●函数名,事件名或变量名的定义⼀律⽤英⽂书写(不便定义的⽤拼⾳⾸字母),要求能从字⾯上表⽰清楚;变量尽量不要出现嵌套,函数不要⽤敏感字符(如ItemChanged);⾸字母⽤⼤写,单词之间不⽤连字符(_)如:wf_RightTrim() 。

●SQL语句⾸字母⼤写,同时要考虑SQL的通⽤性(Oracle 、SQLServer 、 SQLanywhere),使⽤标准SQL语句。

●单⾏结构的语句尽量分解多⾏:If n_Rows > 6 thendw_report.Retrieve()EndIf⽽⾮ If n_Rows >6 then dw_report.Retrieve() 。

●在函数或事件代码中,应加⼊相应的注释内容与函数头(事件头)如下所⽰:////////////////////////////////////////////////////////////////////////////// //////* Function: ()Access: PublicArguments:Returns:Description: */////////////////////////////////////////////////////////////////////////////// ////////以下开始为代码代码中功能块之间要有明显标记,⾄少隔⾏区分;各功能块前有明确功能注释。

●函数的功能要分明,尽量不要出现⼀个函数完成多个任务的情况。

●循环变量:对于循环变量,允许定义单字母:I、J、K;以及M、N、L,但这些变量的定义仅限在Local中。

PB中文件操作函数大全

PB中文件操作函数大全

PB中文件操作函数大全PB中文件操作函数大全()功能关闭先前用()函数打开的文件。

语法( fileno )参数fileno:integer,指定要关闭文件的文件句柄,该句柄使用()函数打开文件时得到返回值Integer。

函数执行成功时返回1,发生错误时返回-1。

如果fileno参数的值为NULL,那么()函数返回NULL。

()功能删除指定的文件。

语法( )参数:string类型,指定要删除文件的文件名,其中可以包含路径返回值Boolean。

函数执行成功时返回TRUE,发生错误时返回FALSE。

如果参数的值为NULL,那么()函数返回NULL。

()功能检查指定的文件是否存在。

语法( )参数:string类型,指定要检查存在性的文件的文件名,其中可以包含路径返回值Boolean。

如果指定文件存在时返回TRUE,不存在时返回FALSE。

如果参数的值为NULL,那么()函数返回NULL。

用法如果参数指定的文件被另一个应用加锁锁住,那么()函数也将返回FALSE。

()功能得到指定文件的长度(以字节为单位)。

语法( )参数:string类型,指定要得到其长度的文件的文件名,其中可以包含路径返回值Long。

函数执行成功时返回指定文件的长度(以字节为单位)。

如果指定的文件不存在,函数返回-1。

如果参数的值为NULL,那么()函数返回NULL。

功能以指定的读写方式打开指定的文件,同时返回该文件的句柄。

语法({,{,{,{,writemode,{creator,}}}}})参数:string类型,指定要打开文件的名称,其中可以包含路径:枚举类型,可选项,指定文件打开方式。

有效取值为:?LineMode! - 缺省值,行模式;?StreamMode! - 流模式:枚举类型,可选项,指定文件访问方式。

有效取值为:?Read! - 缺省值,只读方式,这样打开的文件只能进行读操作;?Write! - 只写方式,这样打开的文件只能进行写操作?:枚举类型,可选项,指定文件加锁方式。

Pb读硬盘序列号和加密rsa算法

Pb读硬盘序列号和加密rsa算法

Pb读硬盘序列号和加密rsa算法很实用的代码,环境:PB9.0说明:大家知道,每当我们格式化软盘或硬盘时系统都会给它分配一个序列号,即用DOS命令dir 显示出的"Volume Serial Number is 0A41-0E0A"。

该序列号是随机产生的,且具有唯一性。

也就是因为这个原因许多软件的测试版本利用该项技术使测试版一旦过了限定期限就不能再使用,即使将该软件重新安装也无济于事。

另外,有些共享软件的注册码也是通过这个序列号来生成的。

同样的方法我们也可以运用到软件的防拷贝技术。

那么如何才能实现上述功能呢?为了达到目的我们必须首先能够得到硬盘的序列号,其次,为了安全起见我们最好再选择一种加密算法,将加密后的硬盘的序列号作为密文公开存放,软件通过解密得到明文,即硬盘的序列号,通过将解密后的硬盘序列号和实际的硬盘序列号相比较得出程序是否合法。

这一步当然是由应用程序秘密运行,用户根本不知道,从而达到软件的二次加密目的,同时也隐藏了软件的合法性识别过程,使破译者无从下手。

下面就来谈谈如何具体实现。

一、如何读取硬盘序列号要读取硬盘序列号我们可以用汇编来实现,但毕竟不容易,况且也不能有效的结合到PB脚本中。

在PB中我们可以通过调用Windows提供的外部函数GetVolumeInformationA()来实现。

这相对来说比较简单。

该函数的原型为:BOOL GetVolumeInformation(LPCTSTR lpRootPathName,LPTSTR lpVolumeNameBuffer,DWORD nVolumeNameSize,LPDWORD lpVolumeSerialNumber,LPDWORD lpMaximumComponentLength,LPDWORD lpFileSystemFlags,LPTSTR lpFileSystemNameBuffer,DWORD nFileSystemNameSize上述原型中,参数类型只要是以"LP-"开头的表明该参数用的是长指针(Long Pointer)类型,即在PB中调用时的参数传递是通过引用传递。

pb常用函数

pb常用函数

数组函数LowerBound()LowerBound()功能得到指定数组第n维的下界。

语法LowerBound ( array {, n } )参数array:数组名n:数值类型,可选项,指定要得到数组哪一维的下界。

缺省值为1返回值Long。

函数执行成功时返回array数组第n维的下界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,LowerBound()函数返回NULL。

UpperBound()UpperBound()功能得到指定数组第n维的上界。

语法UpperBound( array {, n } )参数array:数组名n:数值类型,可选项,指定要得到数组哪一维的上界。

缺省值为1 返回值Long。

函数执行成功时返回array数组第n维的上界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,UpperBound()函数返回NULL。

Blob(大二进制对象)函数Blob()Blob()功能将字符串转换成Blob类型数据。

语法Blob ( text )参数text: string类型,指定要转换的数据返回值Blob。

函数执行成功时返回转换后的Blob类型数据;如果text参数的值为NULL,则Blob()函数返回NULL。

BlobEdit()功能将任意类型的数据插入到Blob类型变量的指定位置。

语法BlobEdit ( blobvariable, n, data )参数blobvariable:Blob类型的已初始化变量,将向该变量中插入数据n:指定插入位置,有效值在1到4,294,967,295之间data:要插入到Blob类型变量中的数据,其数据类型可以是任何有效的PowerBuilder数据类型返回值Unsigned long。

函数执行成功时返回下次可以插入数据的位置;如果blobvariable变量中空间不够或任何参数的值为NULL,则BlobEdit()函数返回NULL。

PB命名规范

PB命名规范

第1章 - 应用系统源程序基本规范1.程序命名规则命名方法之所以要标准化,主要出于以下几个目的。

1)即使只从名字,也可以判断出起什麽作用?是何种类型?提高了可读性及可维护性;2)避免编译及链接时的冲突/不一致,而这种冲突/不一致在把一些模块移到别的一些操作系统中时有可能发生;3)阅读源程序以及进行调试时,某个符号属于哪一个模块,能很快的明白;4)和用途直接有关的固有名词的使用,能够防止由于疏忽而错误地使用于别的用途。

对于变量来说,一个用途一个变量是一个重要的原则;5)可维护性。

命名的方法是随着软件系统开发使用的编程语言和编程工具的不同而变化的。

例如:编程语言的不同决定了可使用的字符,X-Windows编程时使用X-Windows形式的命名原则因此,详细的规定必须根据项目Project的不同情况而定。

“开始编程之前,必须设定编程详细准则”是一个必须遵守的原则。

以下,将阐述我们在设定详细准则时,一些必须考虑到的基本原则,并提供一些范例。

标识符是程序中用来代表变量、标号、函数、窗口、菜单、控件和对象等名称的符号在源程序中使用的标识符(变量,函数,文件),应该满足下列基本条件:1、必须以字母或下划线开头;2、其它可以是字母、数据及些特殊符号;3、最长为40个字符,中间不能有空格;4、保留字不能作为标识符;5、根据其名称,可以容易地推断它的用途;6、根据其名称,可以容易地推断变量的作用域和类型1) 变量的命名及定义对于PB来说,它有五个系统预定义的全局的变量:SQLCA、SQLDA、SQLSA、Message、Error,这五个变量名在程序中不要显式定义,其它变量名的定义遵循如下规则:权限(A) + 类型缩写(B) + _ + 拼音缩写、英文(C)说明:(1)、定义的变量一律小写;(2)、权限(A)列表:(3)、类型缩写(B)例如:统计数据窗口返回的总行数则可定义变量 Int li_zhs (5)、例子:Int li_zhsLong ll_hd变量的定义遵循如下语法:数据类型{{精度}} 变量名{[数值]} {=初值}{,变量名{[数值]} {=初值}….}说明:(1)、数据类型采用首字母大写,其它小写;(2)、变量的命名以上面的规定为准。

PB编程要求

PB编程要求
6、注意数据窗口控件双击事件的处理程序,需要取得GetClickedRow()判断是否大于零,如果不大于零不能往下继续执行程序!
20071219新增
1、当使用F_FkDataCheck()函数判断是否被应用时,切忌只要返回值不等于“1”时都是被应用了!
2、所有放在窗体上方的按钮之间的间距为默认单位值:18;即:当前按钮的X值和前面按钮的X+Width的差值为18;当按钮一行放不下的情况下分成多行显示!!!
b、所有放在窗口底部的按钮没有特殊需求的情况下都要使这组按钮对于窗口水平线左右居中,目测就可以了!
2、所有对数据窗口对象需要加条件进行刷新的操作,切忌直接通过GetSqlSelect()中查找From来进行Where条件相加,这样不利于程序的拓展,现有方法:通过窗口实例变量存取GetSqlSelect()结果,然后直接在这个变量的基础上进行条件拼接,这样有利于程序的维护和拓展!
2、查询条件数据的生成规则:
1)、如果基础数据中有拼音码的:条件生成规则为:拼音码左取8位并且都统一成大写+名称+150个空格+序号(主键ID序号)
2)、如果基础数据中没有拼音码有编码的:条件生成规则为:编码左取8位并且都统一成大写+名称+150个空格+序号(主键ID序号)
2)、如果基础数据中没有拼音码并且没有编码的:条件生成规则为:名称+150个空格+序号(主键ID序号)
20071221新增
1、数据窗口对象中挂子数据窗口对象的可编辑的字段一定要注意子数据窗口的显示宽度、勾选垂直滚动条属性、设置一次显示10条记录!!!
2、如果窗口上有“隐藏查询条件(Y)”按钮的一定要放在“返回”或“退出”按钮的前面!!即:按钮的倒数第二位!!!

汉字首字母提取函数公式

汉字首字母提取函数公式

汉字首字母提取函数公式
汉字首字母提取函数公式是用来将汉字转化为拼音首字母的数
学公式。

其主要思想是根据汉字的发音规律,将每个汉字的首字母提取出来,然后组成拼音首字母。

公式如下:
def get_first_letter(str):
result = ''
for s in str:
if s >= u'u4e00' and s <= u'u9fa5':
result += chr((ord(s) - 19968) // 676 + 65)
else:
result += s.upper()
return result
其中,参数str表示需要提取首字母的汉字字符串,函数首先定义一个空字符串result用于保存最终的结果。

然后,通过for循环遍历每个汉字,判断它是否在指定的Unicode范围内,如果是,则计算出它的首字母,并将其加入到结果中。

如果不是汉字,则直接将其转化为大写字母,并加入到结果中。

需要注意的是,该函数只适用于简体中文汉字,对于繁体中文或其他语言的汉字可能不适用。

此外,由于汉字的发音规律比较复杂,该函数的准确性也有限,需要根据具体情况进行调整。

- 1 -。

powerbuilder常用函数

powerbuilder常用函数

pb常用函数(一)(转)Abs()功能计算绝对值。

语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执行成功时返回n的绝对值。

如果参数n的值为NULL,Abs()函数返回NULL。

Ceiling()功能返回大于n的最小整数。

语法Ceiling ( n )参数n:数值型变量或表达式返回值返回值的数据类型与n的数据类型相同。

函数执行成功时返回大于n的最小整数。

如果参数n的值为NULL,Ceiling()函数返回NULL。

Cos()功能计算余弦,其中参数以弧度为单位。

语法Cos ( n )参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的余弦。

如果参数n的值为NULL,Cos()函数返回NULL。

Exp()功能计算e的n次方。

语法Exp ( n )参数n:指定幂值返回值Double。

函数执行成功时返回e(约等于2.71828)的n次方。

如果参数n的值为NULL,Exp()函数返回N ULL。

Fact()功能计算n的阶乘。

语法Fact ( n )参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的阶乘。

如果参数n的值为NULL,Fact()函数返回NULL。

Int()功能得到小于等于n的最大整数。

语法Int ( n )参数n:数值型变量或表达式返回值Integer。

函数执行成功时返回小于等于n的最大整数。

如果n的值太小或太大,超过了整数的表示范围,则函数返回0。

如果参数n的值为NULL,Int()函数返回N ULL。

Log()功能计算n的自然对数。

语法Log ( n )参数n:数值型变量或表达式,其值必须大于0返回值Double。

函数执行成功时返回n的自然对数。

如果n小于等于0,将导致运行错误。

如果参数n的值为NULL,Log()函数返回NULL。

LogTen()功能计算n的常用对数(以10为底)。

参数n:数值型变量或表达式,其值必须大于0返回值Double。

pb的基本函数

pb的基本函数

1、Open 两种格式:一个是带参数的还有一个是不带参数的不带参数的是不确定具体的数据类型的2、Opensheet() opensheet(指定窗口名,{指定要打开的窗口的类型},指定要放置的工作表的框架窗口名,所打开的窗口是在第几个菜单下生产默认值为倒数第二个,打开方式arrangeopen。

)打开方式分为三种:cascade、layered、original。

Cascade:向右下方偏移。

默认值如果缺少的话Layered:最大化Original:与cascade相同。

只是打开的时候与原来的一样大3、Close4、Setfocus() 将焦点设置到指定控件上Objectname.setfocus() 如果objectname是列表框的话则控件将指向列表框的第一列表项上。

5、SelectText()返回该控件所选的文本。

返回值为long Singlelineeditname.selecttext(start,length)6、GetColumn()和GetColumnname()两个都没有返回值:第一个是返回当前列的列好,第二个则是返回当前列名7、Update()8、DeleteRow()Dwcontrol.deleteRow(row) row表示要删除的行数,当该值为0时则表示删除该行1、insert row 在数据窗口控件指定行前面插入一行dwcontrol.insertrow(row) scrolltorow():使新插入的行成为当前行。

2、ScrollToRow() 使用方法:rtename .scrolltorow(row)Rtename超文本编辑框的名称。

如果row的值为0的话则就回滚到第一行,如果row的值大于超文本的行数则回滚到最后一行3、selectedColumn()返回插入点后第一个字符的位置rtename.selectedcolumn()4、setcloumn5、print() 以当前字体在打开的打印作业中打印一行或多行文本print(printjobnumber,{tabl},string{,tab2})tab1为文本开始打印的位置,以千分之一英寸为单位。

pb getmodulefilenamea 用法

pb getmodulefilenamea 用法

pb getmodulefilenamea 用法pb getmodulefilenamea 是一种用于获取指定进程的模块文件名的函数。

该函数属于 Windows 系统 API 的一部分,被广泛用于软件开发和系统维护中。

该函数的主要功能是获取指定进程中的模块文件名,即获取正在运行的进程所使用的程序模块的文件路径。

在某些情况下,获取模块文件名可能是必需的,例如在进行软件调试或分析时,需要了解正在运行的程序所使用的模块文件的位置。

pb getmodulefilenamea 函数的使用方法如下:1. 包含头文件: 首先需要在代码中包含 "windows.h" 头文件,该头文件中声明了该函数的原型以及其他相关函数和常量。

2. 创建变量: 可以在代码中创建一个适当的变量来存储模块文件名。

通常,这个变量应该是足够大以适应文件名的长度。

3. 调用函数: 使用 pb getmodulefilenamea 函数时,需要提供正在运行的进程的句柄作为参数。

如果要获取当前进程的模块文件名,可以将参数设置为 NULL。

同时,还需要将之前创建的变量的地址作为第二个参数传递给函数。

4. 返回值: 函数执行成功后,将返回获取到的模块文件名的长度(包括终止null 字符)。

如果函数执行失败,将返回 0。

此时,可以使用 GetLastError 函数获取详细的错误信息。

下面是一个示例代码,演示了如何使用 pb getmodulefilenamea 函数获取当前进程的模块文件名:```c++#include <windows.h>#include <iostream>int main() {char filename[MAX_PATH];DWORD length = GetModuleFileNameA(NULL, filename, MAX_PATH);if (length > 0) {std::cout << "Module file name: " << filename << std::endl;}else {DWORD error = GetLastError();std::cout << "Failed to get module file name. Error code: " << error << std::endl;}return 0;}```注意事项:- 在使用该函数时,需要确保已经成功加载了相应的模块。

PB函数大全

PB函数大全

PB函数大全•Abs()功能计算绝对值。

语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执行成功时返回n的绝对值。

如果参数n的值为NULL,Abs()函数返回NULL。

•Ceiling()功能返回大于n的最小整数。

语法Ceiling ( n )参数n:数值型变量或表达式返回值返回值的数据类型与n的数据类型相同。

函数执行成功时返回大于n的最小整数。

如果参数n的值为NULL,Ceiling()函数返回NULL。

•Cos()功能计算余弦,其中参数以弧度为单位。

语法Cos ( n )参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的余弦。

如果参数n 的值为NULL,Cos()函数返回NULL。

•Exp()功能计算e的n次方。

语法Exp ( n )参数n:指定幂值返回值Double。

函数执行成功时返回e(约等于2.71828)的n次方。

如果参数n的值为NULL,Exp()函数返回NULL。

•Fact()功能计算n的阶乘。

语法Fact ( n )参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的阶乘。

如果参数n 的值为NULL,Fact()函数返回NULL。

•Int()功能得到小于等于n的最大整数。

语法Int ( n )参数n:数值型变量或表达式返回值Integer。

函数执行成功时返回小于等于n的最大整数。

如果n的值太小或太大,超过了整数的表示范围,则函数返回0。

如果参数n的值为NULL,Int()函数返回NULL。

•Log()功能计算n的自然对数。

语法Log ( n )参数n:数值型变量或表达式,其值必须大于0返回值Double。

函数执行成功时返回n的自然对数。

如果n小于等于0,将导致运行错误。

如果参数n的值为NULL,Log()函数返回NULL。

•LogTen()功能计算n的常用对数(以10为底)。

语法LogTen ( n )参数n:数值型变量或表达式,其值必须大于0返回值Double。

PB编程规范

PB编程规范

PB编程规范一、编程对象的分类以PowerBuilder作为前台开发工具,进行软件开发的过程中,所涉及的编程对象如下所示.1.源代码2.可执行代码3.资源文件(如pbr,bmp,ico文件)4.配置文件(如ini文件)5.其他二、编程对象的组织使用PowerBuilder开发工具产生的对象,可以按照设计(正在编写和调试)和运行(调试,编译结束,可以接受测试和运行)中的状态进行编程对象的组织规划,重点是目录结构的划分,具体目录的相对关系如下所示.1.源代码 SrcCode 可按子系统再划分子目录2.可执行代码 Program 可按子系统再划分子目录3.图片文件 Images 包含应用图标ICO文件,BMP/JPG/GIF文件4.配置文件 Ini5.其他 Other三、团队开发1.服从团队开发纪律和进度安排.2.未经项目负责人或项目经理的许可,不允许擅自进行可能影响其他人员工作的任何工作,如添加Library,添加数据库表等;如有必要,必须提出书面申请,说明原因以及要改动的操作的详细说明,由项目管理人员统一进行操作和协调.3.代码必须符合标准规范,项目负责人或者项目经理有权责成开发人员修改其不符合开发规范的代码.4.代码集中存放到文件服务器的某一目录,客户机统一映射为固定盘符,确保程序在任何时候都是完整的可用版本而不是零散的代码集,不允许拷贝到本地硬盘进行开发.5.当编写某些公用部件和代码时,必须使用Check out功能确保代码独占使用而不能让其他人同时也修改,当修改完成的时候必须及时使用Check in功能确保代码消除独占状态以使其他人能及时使用修改后的代码.6.各人设置自己在团队中的User ID:Library->Source->Connect->选择[PB Native]->设置User ID,填写自己姓名的拼音缩写或者英文名.7.版本说明8.软件版本号标准为A . B,其中A和B为0到99之间的数字.9.当A大于1并且B为奇数时,表示当前版本为处于开发,测试阶段的版本,定义为"开发版";当B为偶数时,表示当前版本为稳定的,可实际运行的版本,定义为"稳定版".10.当软件开始开发时,确定版本号为0.1;随着软件开发的进度,版本号随着每一次主要功能的完善而变化,最高达到0.99.11.软件初步开发完成后,经过软件开发小组内部测试,初步能够完成软件需求提出的业务<>规范<>和技术要求,软件基本能正常运行,此时,确定该软件版本号为1.0 Beta X ,这意味着软件可以投入实际应用测试,其中X代表测试的次数.12.当软件的1.0 Beta X 版本推出并经过用户实际应用或者试运行测试后,此时,确定该软件版本号为 1.0RC.这意味着软件可以投入实际应用运行.13.当软件的1.0 RC版本投入实际应用运行达到某一时限后,则认为该版本已经稳定,可以完全正常地使用了,这时,确定软件的版本号为 1.0,这意味着软件开发完成,可以投入实际应用和推广.14.当软件进行升级时,如果功能变化不大,则次版本号变化;如果软件功能发生重大变化时,主版本号变化.软件的最终版本号由项目负责人或者项目经理进行确定.四、对象命名1.命名约定部件名称可以达到40个字符,组成方式为A_B. A部分表示前缀,表示部件的类型. 紧跟着一条下划线"_","." 部分描述此部件的名称.可以根据情况具体决定B的构成.推荐将B部分分解成两部分: 功能代码_功能描述. 在重要变量后面写注解表示此变量的用途. 比如,常用的几种对象命名是窗口的命名:w_功能代码_功能描述. 数据窗口控件的命名:dw_功能代码_功能描述. 数据窗口对象的命名:d_功能代码_功能描述. 菜单命名:m_功能代码_功能描述. 用户对象:uo_功能代码_功能描述.2.具体命名规则1)函数的命名规则函数名='函数适用范围代码' +'f'+'_'+'函数功能描述',其中函数的适用范围代码和意义如下: G全局函数; W窗口函数; M菜单函数; U用户对象函数.例:检查SQL语句执行结果的全局用户函数命名如下:gf_checksql().2)应用的命名规则应用的命名应使用与该应用的意义相关联的英文字母,例如,app_si表示社会保险应用系统.3)PBL库PBL库组织的好坏很重要,它会影响应用开发和维护的容易程度以及应用的性能.Library的组织应遵循以下原则:Library的大小.PowerBuilder对Library的大小没有限制,但最好使之小于1MB,Library太大,PowerBuilder要花更多的时间去打开和存储对象,这会影响开发的效率.Library的数量.尽量用最少的Library数量.应在Library的数量和每个Library中对象数量之间找到平衡点,如果Library数量太多而每个Library中对象数量太少,搜索路径会太长,影响运行效率.Library的优化.要在Library画笔中经常对Library进行优化.随着时间的推移,Library会被分段,会使Library的存储变得不连续,影响运行效率.Library的分类组织.PBL库可按子系统或功能组织,一般应用都包含公共PBL库.每个PBL库文件命名应该与该文件作用相关联,例如报表PBL库文件命名为report.pbl.每个PBL库文件应该包含详细注释,列出该PBL文件包含哪些对象,对应哪个子系统,与其他PBL(调用)关系等信息. 为了有效地进行团队开发,实现对PB源码的管理,要求基于对各方因素(如应用代码的执行效率和所占存储空间)和维护上的全面考虑,对PB源码实行分类的原则.PowerBuilder的Library 的分类原则有两种方式:a)制定对象分类法根据所制定的不同类的对象进行分类.例:将所有的窗口放在一个Library中.b)功能模块分类法根据系统的功能模块的不同,将属于不同类的制定对象放在一个Library中.这是一种更为有效的方式.4)初始化配置文件初始化配置文件的命名必须与应用的名称一致,扩展名为.ini,例如:si.ini.用户的可变环境信息都应该保存在该文件中,关键信息加密保存,并且提供管理工具,而不是手工修改该文件.5)资源文件资源文件的命名必须与应用的名称一致,扩展名为.pbr,例如:si.pbr.6)窗口窗口的命名必须以w(Window的首字符)开头,加下划线(_),其后紧接与窗口意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在注释(Comments) 框内写出该窗口的作用(中文或英文),如下所示.窗口命名实例:w_about 关于本系统的版权信息w_system_error 系统出错提示w_main 系统主界面w_report_sheet 报表输出7)数据窗口普通数据窗口的命名必须以dW(DataWindow缩写)开头,代码表下拉式子数据窗口必须以dddw(DropDownDataWindow缩写)开头,加下划线(_),其后紧接与数据窗口意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在Comments框内写出该数据窗口的作用(中文或英文),如下所示.数据窗口命名实例:d_system_error 显示系统错误,被w_System_Error窗口调用d_categories 对产品分类,被w_Report_Sheet窗口调用d_detail_parts Parts of Products Described in Detaild_detail_function Products Function Described in Detail dddw_sex 性别代码表8)菜单菜单的命名必须以m(Menu缩写)开头,加下划线(_),其后紧接与菜单意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在Comments框内写出该菜单的作用(中文或英文),如下所示.菜单命名实例:1 m_main Front End Main Menu2 m_report Report Subsystem Menu3 m_main_pop 主界面的弹出菜单9)函数函数的命名必须符合f_subsystemname_detailname或lf_detailname格式,其中gf表示是全局函数,subsystemname是子系统的英文缩写,detailname是与函数意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),对于全局函数应该在Comments框内简短写出该函数的作用(中文或英文),如下所示.函数命名实例:gf_help_Index 帮助子系统索引全局函数lf_get_user_info 获取用户信息局部函数gf_query_sortbyname 查询子系统名排序全局函数同时,在编写时应严格按后面介绍的格式在脚本(Script)前写出注释.10)用户对象用户对象的命名必须以uo(UserObject缩写)开头,加下划线(_),其后紧接与用户对象意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在Comments框内写出该用户对象的作用(中文或英文),如下所示.用户对象命名实例:uo_external_function Cross platform user object ancestor uo_report_structure User Object as a structure For report 11)控件控件的命名必须以控件名称缩写开头,加下划线(_),其后紧接与控件作用相关联的英文字母(总长不得超过PowerBuilder的限制),如表下所示.控件命名实例:CommandButton cb cb_okPictureButton pb pb_thank_infoCheckBox cbx cbx_age_showRadioButton rb rb_typical_setupStaticText st st_user_idPicture p p_user_photoGroupBox gb gb_detail_infoLine ln ln_h_separatorOval oval oval_used_flagRectangle r r_photo_frameRoundRectangle rr rr_companyflagSingleLineEdit sle sle_user_nameMultiLineEdit mle mle_book_commentsRichTextEdit rte rte_student_answerEditMask em em_telephone_noHScrollBar hsb hsb_time_setVscrollBar vsb vsb_money_setDropDownListBox ddlb ddlb_your_favouriteListBox lb lb_department_namePictureListBox plb plb_user_identificationListView lv lv_all_userTreeView tv tv_customersTabPage tpg tpg_ordinary_superTab tab tab_superDataWindow dw dw_user_info_detailGraph gr gr_month_reportOLE ole ole_word_docDropDownPictureListBox ddplb ddplb_photo_preview五、变量命名变量取名应遵守命名规范,对使用频繁的或关键变量,为了便于阅读和修改,在定义时应加上注释标明其含义.例如: String ls_name // 参保人员姓名变量命名规则为: 变量类型 + 数据类型 + '_' + 含义代码例如: 字符串型实例变量: is_变量名; 日期型全局变量: GD_变量名; 一般变量,用小写字母; 全局变量,将整个变量名大写; 变量:都用小写字母声明.1.变量类型约定数据类型前缀:Any a_Blob bb_Boolean b_Character ch_Date d_DateTime dt_Decimal c_Double db_Integer I_Long L_String s_Time t_UnsignedInteger ui_UnsignedLong ul_DataWindow dw_DataWindowChild dwc_MailSession ms_Menu m_Structure str_Transacttion trans_Window w_UserObject uo_2.变量范围命名约定变量范围命名约定:Global g _ 全局变量将在整个应用中有效.它们可能从其他对象面板Shared s _ 共享变量在一个对象及其实例中有效Instance i _ 实例变量仅在一个对象的实例中有效.相应对象的不同实Local l _ 局部变量仅在一段子程序或在script开始和结束时生效Value v _ 例:vdw_datawindowReference r _ 例:rl_long1) a. 全局变量的命名必须符合gT_subsystemname_detailname格式,其中g表示是全局变量(Globe),T是数据类型(DataType)的简写:i表示整型(int),l表示长整型(long),c表示字符型(char),s表示字符串型(string).subsystename是子系统的英文简写.detailname是有具体意义的英文字母.例如:gs_query_user_info,即为查询子系统定义了一个字符串型全局变量.2) b. 局部变量的命名必须符合lT_detailname格式,其中l表示是局部变量(Local),T是数据类型(DataType)的简写:i表示整数型(int),l表示长整型(long),c表示字符型(char),s表示字符串型(string).例如:li_user_salary,即定义了一个整数型局部变量.3) c. 实例变量的命名必须符合iT_detailname格式,其中i表示是实例变量(Instance),T是数据类型(DataType)的简写:i表示整数型(int),l表示长整型(long),c表示字符型(char),s表示字符串型(string).Detailname是有具体意义的英文字母.例如:is_product_name,即定义了一个字符串型实例变量.六、程序规范1.书写格式1)用分层缩进的写法显示嵌套结构的层次.2)在注释段与程序段,以及不同逻辑的程序段之间插入空行.3)每行只写一条语句,当需要滚动显示时应该分行书写.2.流控制流控制首先应遵守PowerBuilder语法规范,且用分层缩进的写法突出显示嵌套的层次结构,例如:For i = 1 To 100For j = 1 To 50For k = 1 To 200Matrix[i,j,k]=1NextNextNext3.注释及格式要求注释总是加在程序中需要概括性说明或不易令人理解或容易令人理解错的地方.注释语言应简练,易懂而又准确,所采用的语种首选是中文,如有输入困难或特殊需求也可采用英文.注释原则:1)函数或过程的注释在函数头部必须说明函数的功能和参数(值参,变参);在函数的主体部分,如算法复杂时,应以注释的方式对其算法结构做出说明;函数申请过全局资源且有可能导致资源紧张应加以注明(如内存和文件柄等);函数有副作用一定以十分醒目的方式(如加!号等)注明.2)语句的注释应对不易理解的分支条件表达式加注释;不易理解的循环,应说明出口条件(有GOTO的程序还应说明入口条件);过长的函数实现,应将其语句按实现的功能分段加以概括性说明.3)常量和变量的注释在常量名声明后应对该名做适当的注释,注释说明的要点是: 被保存值的含义(必须) ;合法取值的范围(可选);全局量需要对以上逐点做充分的说明.4)制定对象的注释每个开发人员针对自己所制定的窗口,菜单,数据窗口,数据管道和用户对象等添加注释,要点是:标注对象的用途;标注对象的制定人员;标注时间或者修改时间.4.具体格式要求如下:1)在窗口Open事件前应说明/* ======================================================= */ // 窗口中英文名称:// 窗口作用:// 作者:// 日期:/* ======================================================= */2)在事件脚本(Script)之前应说明/* ======================================================= */// 脚本作用:// 输入参数及数据类型:// 返回参数及数据类型:// 全局函数及其用途:// 全局变量及其用途:// 作者:// 日期:// 修改人的姓名:// 修改日期:// 修改原因:/* ===================================================== */ 若有多人修改,每个人均加上自己的注释,而不能改他人的姓名,日期,原因,对要修改的脚本,只能注释不能删除,并且在修改的地方加上修改人名,日期和"Beginning Modification... ","Ending Modification"字样.5.脚本中的注释1)单行脚本程序注释:// 注释文本脚本的程序段注释:/* ================================== *///// 注释文本///* ================================== */变量的注释如下:数据类型变量名 //注释6.在函数,存储过程等脚本(Script)之前应说明/* ======================================================= *// 函数名称:// 参数解释:// 功能描述:// 调用举例:// 最初作者:// 编写日期:// 返回值:// 变量情况:// 修改人:// 修改日期:// 修改原因:/* ======================================================== */七、Powerbuilder脚本编程规范1.Powerbuilder编程注意事项1)不要在子应用中声明全局变量!如必须声明全局变量,则应事先向项目负责人申请.2)供别的文件或函数调用的函数,绝不应使用全局变量交换数据.3)所有SQL语句均需判断返回结果(包括SELECT,COMMIT语句).例: If sqlca.sqlcode = -1 Then错误处理程序跳出Else正常End If4) d. 缺省SQLCA的连接语句connect,在应用Open事件中完成,其disconnect在主应用的Close事件中完成,其余任何pbl中均不能有disconnect语句.5) e. 由于要连接多个数据库,需要用Create创建对象,比如:SQLSYB,则用connect usingSQLSYB,处理完毕后用disconnect usingSQLSYB,并且用 destroy SQLSYB释放资源.2.编码标准1)在代码块前后留一个空行.例子如下:If ThenEnd IfFor = To StepNext2)把单行注释与当前script程序的缩进位置对齐://This is a comment For condition1If Then//This is a comment For condition2If Then//This is a comment For action1End IfEnd If3)缩进应以Tab键实现,不得采用空格.4)变量采用小写格式.注意:变量全部用小写;一个变量一行,每个变量必须注释;通常情况下,变量的后半部分尽量用数据库字段名;变量声明全部在脚本之前声明完毕;所有变量声明时按代码功能段 + 变量类型进行排序.例如:Long ll_quantityString ls_name对象名采用小写,属性,关键字,保留字和内置函数均用首字母大写格式:w_cont_de.Visible = Truem_mdi.m_file.m_print.Enabled = False数据窗口控制的函数加上修饰,而不以数据窗口对象作为参数:dw_main.SetTransObject(sqlca)dw_main.SetRowFocusIndicator(Hand!)dw_main.Retrieve()5)当连接起来的字符串超过了两行的长度时,使用 + 符作为下行的第一个字符,每次均采用缩进格式.字符串的随后部分应该再次缩进.例如:ls_msg = "连接数据库失败!错误信息为:~r~n" &+ Sqlca.SqlErrText &+ "请与系统管理员联系"6)PowerBuilder保留字(关键字)首字母大写其余小写,这样看起来层次清晰,如:This,Parent,ParentWindow,True,False,Return,Halt与Close.7)PowerBuilder内部函数及属性每个字首字母大写其余小写,这样看起来层次清晰,如:sle_user.Text,dw_1.SetTransObject(Sqlca),Sqlca.SqlErrText.8)SQL语句按如下格式书写:SELECT name,sex,dept_idINTO :ls_name,:ls_sex,:ls_dept_idFROM employeeWHERE emp_id = :ls_emp_id ;9)程序中应避免出现goto跳转语句.3. 脚本中一些常用功能模块的编程约定1)光标操作过程的编程约定如下:Declare Cursorname Cursor forSelect语句Open Cursorname;fetch Cursorname intoDo While Sqlca.Sqlcode = 0fetch Cursorname intoLoopClose Cursorname光标命名规则:"Cur" + "_" + 名称.2)(2)调用数据库存储过程的编程约定如下:declare Procedurename procedure For StoredProcedureName:Value1,:Value2......;execute Procedurename;fetch Procedurename into ;close Procedurename;commit;存储过程命名规则:"Pro" + "_" + 名称.有些系统存储过程(例如:sp_droplogin)不能当做一个事务提交,为了执行它,就必须先置事物对象的AutoCommit属性为True,当存储过程执行完毕后再将事务对象的AutoCommit属性置为False.3)在每一个SQL语句之后必须判断SQL语句执行成功与否,成功则继续,不成功则做相应处理并给出一条提示信息.If Sqlca.SqlCode 0 ThenRollback ;MessageBox("错误信息","操作失败!")ElseCommit;MessageBox("提示信息","操作成功!")End If4)所有操作符(包括等号)前后应留一空格,使程序看起来更清晰.例如: ls_msg = ls_title + ls_error5)仅当绝对需要时才在循环结构体中使用函数调用,也就是说,仅当函数的返回值依赖于循环迭代的值时才使用函数调用.使用如下方法:Long ll_num_selectedll_num_selected = lb_devctg.TotalSelected()For i = 1 To num_selectedNext不使用下述方法:For i = 1 To lb_1.TotalSelected()Next4. PB中的任何一个窗口都要有注释说明一般在窗口的Open事件中对窗口的功能进行全面的介绍,以便维护人员可以很清楚地知道窗口的功能和维护要点.其格式可参见前面的说明.5. 表的操作在程序中涉及多个表的操作时,需严格按照各项目组"表操作顺序一览表"规定的顺序对表进行操作,以防发生锁表现象.八、控件编程规范1.公共部分1)应尽量为所有控件使用有意义的名称,重要控件不允许使用 pb_1之类无明确意义的名称.2)大号字体:各窗口控件字体为Arial,字号为12号,字色为黑色.小号字体:各窗口控件字体为宋体,字号为9号,字色为黑色.3)显示控件和输入控件底色分开,显示控件为灰色(窗口颜色),输入控件为白色.4)输入区和显示区分别放置.5)按钮排列紧凑,在窗口右侧纵向排列时靠上放置;在窗口下方排列时靠右放置,因为左撇子操作者毕竟是少数.6)各字符类控件对齐方式为左对齐;数字类控件为右对齐,且必须按所需格式设置Format属性;日期控件必须保证能完整显示所需日期格式,应用yyyy-mm-dd风格.及有前导0的形式(避免2000年问题),可采用左对齐或中对齐.7)CommandButton控件的推荐高度为104.2.控件细则1)静态文本框静态文本框命名规则:st + '_' + 名称(若为label可不改名).外观规定如下:背景色:buttonface;前景色:黑色;边框:无;高度:72.建议在其后加上全角冒号(:).2)单行编辑框单行编辑框命名规则:sle + '_' + 名称.(1)外观背景色:白色;前景色:黑色;边框:3D Lowered;高度:72.(2)程序说明a. 响应事件建议自定义 Keydown 事件,尽量不要用 Modify 事件.b. 当获得焦点时控件背景变为深蓝色,字体颜色变为黄色,失去焦点时还原缺省颜色.3)命令按钮命令按钮命名规则:cb + '_' + 名称(1)外观高度:对于小号字体(宋体9号)为92;对于大号字体(Arial 12号)为108.宽度:对于小号字体(宋体9号)为325;对于大号字体(Arial 12号)为402.(2)说明命令按钮控件不要使用 cb_1 之类无明确意义的名称(尤其在窗口中这类控件比较多时,可能令人分不清各个控件的作用).4)图像按钮尽量不用图形按钮,而用命令按钮.图像按钮命名规则: pb + '_' + 名称.外观规定如下:尺寸:用图像原始尺寸;图像:按钮的有效与无效采用不同的bmp图像以示区别.5)5复选框复选框命名规则:cbx + '_' + 名称外观规定如下:背景色:buttonface;前景色:黑色;边框:3D Lowered;高度:92;位置:标签在右.6)单选按钮单选按钮命名规则:rb + '_' + 名称.(1)外观背景色:buttonface;前景色:黑色;边框:3D Lowered;高度:92;位置:标签在右.(2)程序说明单选按钮最好与组框配合使用.7)组框组框命名规则:gb + '_' + 名称.外观规定如下:背景色:buttonface;前景色:黑色;边框:3D Lowered.8)屏蔽编辑框屏蔽编辑框命名规则:em + '_' + 名称.(1)外观背景色:白色;前景色:黑色;边框:3D Lowered.(2)程序说明a. 响应事件建议用自定义 Keydown 事件,尽量不要用 Modify 事件.b. 当获得焦点时控件背景变为深蓝色,字体颜色变为黄色,失去焦点时还原缺省颜色.9)下拉列表框下拉列表框命名规则:ddlb + '_' + 名称.外观规定如下:背景色:白色;前景色:黑色;边框:3D Lowered.10)应用应用命名规则:app + '_' + 应用名.为应用选择一个图标,以便在运行时标识应用.在 Open 事件中声明 SQLCA 全局变量和打开应用主窗口.在 Closequery 事件中编写退出应用之前的处理程序.在 SystemError 事件中编写系统出错的处理程序.11)窗口窗口命名规则: w + '_' + 窗口名. 主窗口采用 main 窗口类型,子窗口一般采用 Popup 窗口类型,无控制菜单,无最大化最小化按钮,不可改变大小.若为一般性提示窗口,用 response 窗口类型.窗口以buttonface 颜色为背景颜色. 重要的菜单选项设置Toolbar 功能. 窗口上下左右四周应至少留出两个网格,而不得将对象填满整个窗口!12)菜单菜单命名规则: m + '_' + 菜单名. 菜单项 MenuItem 的名称以该菜单项在整个菜单中的物理位置分层次命名.例:若 MenuItem 位于整个菜单的第三列第二行,则命名为 m_32.或文件菜单下的"关闭"菜单项,则命名为 m_file_close.13)数据窗口对象数据窗口对象命名规则:d + '_' + 功能含义. 打印用数据窗口背景色为白色,题目为16号字,内容为11号字,显示比例为75%. 显示用数据窗口背景色原则上为 buttonface,可视窗口制作是否美观的实际情况使用白色数据窗口各列显示框高度为 72. Tabular和Grid风格数据窗口,无表头时列名文本边框为3D Raised.Detail区为3D Lowered,背景色原则上为白色.Grid风格数据窗口一般不出现线条.14)数据窗口控件数据窗口控件命名规则:dw + '_'+ 功能含义. 数据窗口边框原则上为 3D Lowered,也可酌情使用 none 外加 group.15)用户对象命名用户对象命名规则:uo + '_'+ 功能含义. 公共对象对应以上各控件<>规范<>制作.九、用户反馈在系统中对用户的操作及时地提供反馈信息是十分重要的,这些反馈信息也许只是像警告铃或将鼠标显示成沙漏等一样不起眼的反应,但是却能使用户树立信心,使他感到仍在控制软件而没有死机.1.使用反馈的场合在客户/服务器环境下用户最不能忍受的是系统反应速度慢,而在实际的应用中却会经常遇到计算机需要比较长的时间执行一个或一批操作.在这种情况下,应加入反馈,让用户了解应用正在做什么.比如: 在需等待时间较短(0~10秒)的情况下应将鼠标显示成为沙漏,为此可调用函数SetPointer(HourGlass!)来实现这一功能; 在处理时间需10~18秒时,由微帮助来显示处理进度; 当处理时间需18秒以上时,要显示这个处理窗口或显示进度条; 当一个长时间的处理完成后应发出一个提示警告声如Beep(1),这样用户就不必总看着屏幕.2.提供反馈的几种技术手段1)微帮助微帮助是MDI(多文档界面)框下面的状态条中的文字.窗口底部的微帮助一般有两个作用:一是在用户选择菜单项或其他窗口控件时,显示更多的文字信息来解释或提示用户所要进行的操作是什么;另一个用途是系统在处理过程中显示正在进行的工作状态,以使用户了解系统的处理进度,从而免去对死机的担心.2)工具条的帮助当鼠标停留在某一个工具条上时,会出现一个弹出式信息框,在PowerBuilder 4.0以上的版本中,缺省显示的是工具条文字.也可以用菜单画笔在工具条文字之后加一个逗号,加入一段更长的文字来定义一个不同的工具条说明.例如,键入"退出,关闭应用",将看到在带文字的工具条图标上显示的文字是"退出",而弹出的信息框显示的是"关闭应用".3)声音提示在用户可能进行破坏性操作时,用声音及时提出警告是必要的,但是不能滥用,因为当用户无法正确操作软件或做了不希望做的事情时,听到警告声反而会更加烦恼,因此要慎重使用这种反馈方法.此外,在一个长处理结束时使用声音反馈 ( 如警告声或小段悦音)也是必要的.十、提高程序的健壮性1.安全的应用软件在应用软件的开发中,重要的一个因素是要给用户提供一个安全的工作环境,在软件中不应藏有任何"地雷",在用户将要进行破坏性的且难以恢复的操作时,系统应当给予应有的提示.用户只有充分相信软件是安全的,才会乐于使用它,才会放心地去使用它,才能更高效地去探索这一软件所提供的新功能.2.什么是安全的应用最重要的,但也是最不容易实现的是排除可能会使应用非正常终止的错误.在任何情况下,最终用户都不应看到应用出现保护性错误而退出系统,这种错误最容易使用户对软件失去信心.因为这意味着用户要中断思路,并费时费力地重新登录,而且已进行的操作也会因没有存盘而全部丢失.当然造成系统终止的原因很多,可能是网络,硬件,系统软件或是 PowerBuilder本身的问题,但是开发者应当尽量周全地考虑到各种可能发生的问题,使出错的可能降至最小.特别是使用PowerBuilder开发的软件的确经常会出现保护性错误,但是开发人员却不能因此怨天尤人,而是要多做测试,选择最为保险的方法实现相同的功能.此外,在使用PowerBuilder编程时,还有一种常见的导致非正常终止的情况是由于程序员自己的原因造成的,这就是变量联接滞后问题,即在编译时定义一个有效的对象类,但是在运行时却没有创建它的实例或这个实例已注销(destroy);这时如有一段代码引用到这一对象,系统却无法在内存中找到它的实例,由此导致应用终止.所以,在引用变量时,应当首先检查它是否存在实例,例如,在一个窗口中引用了另外一个窗口的对象,就应首先检测它在执行代码之前是否已经创建了一个实例.在下面的例子中,win_A这一窗口对象可能在代码执行时并没有创建,因此就应当在执行前用IsValid函数来检查其是否有效:If IsValid(win_A) ThenClose(win_A)End If3.使用数据窗口中应注意的问题PowerBuilder的代码将引用很多数据窗口中的列,指代这一列的方法可以是列名也可以是列号.列号是指这一个数据窗口在执行 SELECT语句中排。

pb中取汉字串首字符的一个函数

pb中取汉字串首字符的一个函数

pb中取汉字串首字符的一个函数$PBExportHeader$uf_getfirstletter.srf$PBExportComments$ 返回给定汉字串的首字母串global type uf_getfirstletter from function_objectend typeforward prototypesglobal function string uf_getfirstletter (string as_inputstring)end prototypesglobal function string uf_getfirstletter (string as_inputstring);//Function name : uf_GetFirstLetter//Used to : 返回给定汉字串的首字母串,即声母串//Input Arguments: as_InputString - string , 给定的汉字串//Return Value : ls_ReturnString - String , 给定的汉字串的声母串,一律为小写//Notice : 1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的// 系统此函数无效!// 2. 若汉字串含有非汉字字符,如图形符号或ASCII码,则这些非汉字字符// 将保持不变.//Sample : ls_rtn = uf_GetFirstLetter("中华人民共和国")// ls_rtn will be : zhrmghg//Scripts:char lc_FirstLetter[23] //存放国标一级汉字不同读音的起始区位码对应读音string ls_ch //临时单元string ls_SecondSecTable //存放所有国标二级汉字读音string ls_ReturnStr //返回串integer li_SecPosValue[23] //存放国标一级汉字不同读音的起始区位码integer i , jinteger li_SectorCode //汉字区码integer li_PositionCode //汉字位码integer li_SecPosCode //汉字区位码integer li_offset //二级字库偏移量//Set initial valueli_SecPosValue[]={1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722, 3730,3858,4027,4086,4390,4558,4684,4925,5249 }lc_FirstLetter[] = {"A", "B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","W","X","Y","Z"}ls_SecondSecTable="CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGK LJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFY XJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSG QZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJ ZZKQHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDK SSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJ RQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSC TYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXH WYWSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLY ZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNG MMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQ YBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMY DJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMH ZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPD YZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[ PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZP MGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFH B[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFY WYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDX HPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMS XLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWB QCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZL LJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQ LZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJD FCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZ QZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYW DQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQ MNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMK DMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBY ZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQK SECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDL QCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJSCM BJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJN MDDDLNGKAQHQHJGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZS WLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFY QXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDGDZDBLZYYCXNN CSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZ JCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNP QCJPFCZLCLZXZDMXMPHJSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNL SFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQFHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHG KBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ"//Get it !ls_ReturnStr = ""For i=1 to Len(as_InputString) //依次处理as_InputString中每个字符ls_ch=Mid(as_InputString , i , 1)If Asc(ls_ch)<128 then // 非汉字ls_returnStr = ls_returnStr+ls_ch // 不变Else // 是汉字ls_ch = Mid(as_InputString , i , 2) // 取出此汉字li_SectorCode = Asc(Left(ls_ch, 1)) - 160 //区码li_PositionCode = Asc(Right(ls_ch, 1)) - 160 //位码li_SecPosCode = li_SectorCode*100 + li_PositionCode // 区位码If li_SecPosCode>1600 and li_SecPosCode<5590 then // 第一个字符For j=23 to 1 Step -1 // 找声母If li_SecPosCode>=li_SecPosValue[j] thenls_returnStr = ls_returnStr + lc_FirstLetter[j]ExitEnd ifNextElse // 第一个字符li_offset = (li_SectorCode - 56 ) *94 + li_PositionCode - 1 // 计算偏移量If li_offset>=0 and li_offset<=3007 then //二区汉字ls_returnStr = ls_returnStr + Mid(ls_SecondSecTable, li_offset , 1) //取出此字声母End ifEnd ifi = i+1 // 指向下一个汉字End ifNext // 处理完毕//Return resultReturn lower( ls_returnStr ) //返回as_InputString 的声母串end function。

PB文件操作函数

PB文件操作函数

PB文件操作函数下面是一些常用的PB文件操作函数:1. pb_read_file(const string& filename, Message* message)该函数用于从文件中读取Protobuf消息。

参数filename是要读取的文件名,参数message是Protobuf消息的实例。

函数会将文件中的数据解析为Protobuf消息并存储到message中。

2. pb_write_file(const string& filename, const Message& message)该函数用于将Protobuf消息写入文件。

参数filename是要写入的文件名,参数message是要写入的Protobuf消息。

函数会将消息序列化为二进制数据并写入文件。

3. pb_parse_text(const string& text, Message* message)该函数用于从文本中解析Protobuf消息。

参数text是包含Protobuf消息的文本,参数message是Protobuf消息的实例。

函数会将文本解析为Protobuf消息并存储到message中。

4. pb_serialize_text(const Message& message, string* text);该函数用于将Protobuf消息序列化为文本。

参数message是要序列化的Protobuf消息,参数text是存储序列化文本的字符串指针。

函数会将消息序列化为文本格式的字符串并存储到text中。

5. pb_encode_varint(uint64 value, uint8* buffer);该函数用于将一个无符号整数编码为Varint格式。

参数value是要编码的整数,参数buffer是存储编码结果的缓冲区。

6. pb_decode_varint(const uint8* buffer, uint64* value);该函数用于从Varint格式的数据中解码无符号整数。

PB函数大全

PB函数大全

PB函数大全(1)Abs()功能计算绝对值。

语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执行成功时返回n的绝对值。

如果参数n的值为NULL,Abs()函数返回NULL。

Ceiling()功能返回大于n的最小整数。

语法Ceiling ( n )参数n:数值型变量或表达式返回值返回值的数据类型与n的数据类型相同。

函数执行成功时返回大于n的最小整数。

如果参数n的值为NULL,Ceiling()函数返回NULL。

Cos()功能计算余弦,其中参数以弧度为单位。

语法Cos ( n )参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的余弦。

如果参数n的值为NULL,Cos()函数返回NULL。

Exp()功能计算e的n次方。

语法Exp ( n )参数n:指定幂值返回值Double。

函数执行成功时返回e(约等于2.71828)的n次方。

如果参数n的值为NULL,Exp()函数返回NULL。

Fact()功能计算n的阶乘。

语法Fact ( n )参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的阶乘。

如果参数n的值为NULL,Fact()函数返回NULL。

Int()功能得到小于等于n的最大整数。

语法Int ( n )参数n:数值型变量或表达式返回值Integer。

函数执行成功时返回小于等于n的最大整数。

如果n的值太小或太大,超过了整数的表示范围,则函数返回0。

如果参数n的值为NULL,Int()函数返回NULL。

Log()功能计算n的自然对数。

语法Log ( n )参数n:数值型变量或表达式,其值必须大于0返回值Double。

函数执行成功时返回n的自然对数。

如果n小于等于0,将导致运行错误。

如果参数n的值为NULL,Log()函数返回NULL。

LogTen()功能计算n的常用对数(以10为底)。

语法LogTen ( n )参数n:数值型变量或表达式,其值必须大于0返回值Double。

PB中实现将汉字转换为拼音首字母的方法

PB中实现将汉字转换为拼音首字母的方法

PB中实现将汉字转换为拼音首字母的方法华逢兆【摘要】在许多应用系统中,按拼音首字母进行数据检索比较方便快捷,本文主要探讨在PowerBuilder中,将汉字转换为拼音首字母的方法。

【期刊名称】《科技风》【年(卷),期】2015(000)011【总页数】2页(P211-212)【关键词】PowerBuilder;GB2312- 80;一级汉字;二级汉字【作者】华逢兆【作者单位】安顺职业技术学院信息工程系,贵州安顺 561000【正文语种】中文许多应用系统中都涉及到汉字检索问题,比如我院学生收费管理系统中一般按姓名进行检索,但直接输入姓名汉字,输入速度慢,不方便。

如果能按姓名拼音缩写(拼音首字母)进行检索,可以提高工作效率,使用更方便。

这需要在录入学生姓名时,能将输入的姓名自动转换为拼音首字母。

一、实现原理汉字在计算机中的处理,以GB 2312-80(《信息交换用汉字编码字符集·基本集》)标准为基础。

GB2312-80 标准共收录6763 个汉字,其中一级汉字3755 个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682 个字符。

GB2312 中对所收汉字进行了“分区”处理,每区含有94 个汉字/符号。

这种表示方式也称为区位码。

01-09 区为特殊符号。

16-55区为一级汉字,按拼音排序。

56-87 区为二级汉字,按部首笔画排序。

10-15 区及88-94 区保留。

一级汉字由于按拼音排序,它的转换比较简单,可以通过确定汉字处于哪一个区间,转换为相应的拼音首字母。

二级汉字是按字母笔画排序,它的转换可通过在程序中查表来实现,但首先要做好二级汉字拼音首字母表。

二、实现方法三、结束语本文的程序在PB 9.0 下调试通过,应用于我院财务收费系统中,能转换GB2312-80 中的一二级汉字。

[参考文献][1]李勇等编著.PowerBuilder8.0彻底研究.北京:中国铁道出版社.[2]GB2312-80字符编码代表表.。

pb mid 函数

pb mid 函数

pb mid 函数PB Mid 函数:PB Mid 函数是一个非常有用的函数,它的作用是提取字符串中指定位置的一部分字符。

PB Mid 函数的语法如下:Mid(string, start[, length])其中,string 表示要提取字符的原字符串,start 表示指定提取的起始位置,length 表示指定提取的长度。

如果省略 length 参数,则会返回从起始位置开始到字符串末尾的所有字符。

如果 start 参数小于 1,则会返回字符串的第一个字符,并且如果 start 参数大于字符串的长度,则会返回一个空字符串。

PB Mid 函数的使用很简单,我们只需要将要提取的字符串作为参数传递给函数,然后指定起始位置和长度即可。

例如,如果我们想要从字符串"Hello, World!" 中提取"World" 这个单词,可以使用以下代码:String s = "Hello, World!";String result = Mid(s, 8, 5);PrintLine(result);上面的代码会输出 "World"。

除了将 PB Mid 函数用于字符串上之外,我们还可以将其用于其他类型的数据上。

例如,我们可以将一个数字转换为字符串,并通过 PB Mid 函数提取其中的一部分字符。

以下是一个示例代码:Int n = 12345;String s = String(n); // 将数字转换为字符串String result = Mid(s, 2, 3); // 提取第 2 位到第 4 位的字符PrintLine(result);上面的代码会输出 "234"。

总的来说,PB Mid 函数是一个非常常用的字符串处理函数,它可以轻松地提取字符串中的一部分字符。

我们只需要将要提取的字符串作为参数传递给函数,然后指定起始位置和长度即可。

PB函数大全

PB函数大全

PB函数大全一、数组函数1、LowerBound()功能:得到指定数组第n维的下界。

语法:LowerBound ( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的下界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的下界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,LowerBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dimLowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 102、UpperBound()功能:得到指定数组第n维的上界。

语法:UpperBound( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的上界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的上界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,UpperBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dimLowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 10二、Blob(大二进制对象)函数Blob函数得到Blob数据类型的信息、完成数据类型转换以及操作Blob类型数据。

pb_encode函数用法

pb_encode函数用法

pb_encode函数用法`pb_encode` 函数通常用于 Protocol Buffers (Protobuf) 编码。

Protocol Buffers 是 Google 开发的一种数据序列化协议,类似于 XML、JSON 和CSV,但更小、更快、更简单。

在使用 `pb_encode` 函数之前,你需要确保已经定义了相应的 Protocol Buffers 数据结构。

然后,你可以使用这个函数将数据结构编码为字节串。

以下是一个简单的例子,展示了如何使用 `pb_encode`:1. 首先,定义你的 Protocol Buffers 数据结构。

例如,创建一个名为 `` 的文件:```protobufsyntax = "proto3";message Person {string name = 1;int32 age = 2;}```2. 使用 Protocol Buffers 编译器将 `.proto` 文件转换为你的目标语言的源代码。

例如,如果你使用的是 Python,可以运行:```shprotoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/```3. 在你的代码中,导入生成的源代码并使用 `pb_encode` 函数:```pythonimport example_pb2 导入生成的源代码文件,通常命名为 example_创建一个 Person 对象person = example_()= "Alice"= 30使用 pb_encode 将对象编码为字节串data = ()```在这个例子中,`pb_encode` 方法将 `Person` 对象编码为一个字节串,你可以将这个字节串发送到网络上,或者将其保存到文件中。

解码这个字节串时,你可以使用相应的 `pb_decode` 方法来还原原始的 `Person` 对象。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//得到首拼音码函数//把这段代码加入到函数地f_get_py(string as_InputString)char lc_FirstLetter[23]string ls_chstring ls_SecondSecTablestring ls_ReturnStrinteger li_SecPosValue[23]integer i , jinteger li_SectorCodeinteger li_PositionCodeinteger li_SecPosCodeinteger li_offset//Set initial valueli_SecPosValue[]={1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3 730,3858,4027,4086,4390,4558,4684,4925,5249 }lc_FirstLetter[] = { "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "J ", "K ", "L ", "M ", "N ", "O ", "P ", "Q ", "R ", "S ", "T ", "W ", "X ", "Y ", "Z "}ls_SecondSecTable="CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZL SGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXD TTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCS CJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHYLYGXFPTYJYY ZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBN PTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQY RBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYG HQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWYWSBHTRXXGLHQ HFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNY TDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZN MLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCD HJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZ WYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHS Y[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBS QKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGB WHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZPMGFCSGLSXYMJSHXPJ XWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ [YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJ PCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[ YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWB MYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZ NZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTS XGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKD GJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWG JJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYH YWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGD HCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSB RSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPD KLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBB TMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMAB CHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQ ZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKH EZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLM CRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYYDYJZZHQPDSZGLSTJB CKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQ NJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHT XHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJS GZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQ LZFKCGNNNSZFDEQFHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBK MRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ "//Get it !ls_ReturnStr = ""For i=1 to Len(as_InputString)//as_InputString中每个字符ls_ch=Mid(as_InputString , i , 1)If Asc(ls_ch) <128 thenls_returnStr = ls_returnStr+ls_chElsels_ch = Mid(as_InputString , i , 2)li_SectorCode = Asc(Left(ls_ch, 1)) - 160li_PositionCode = Asc(Right(ls_ch, 1)) - 160li_SecPosCode = li_SectorCode*100 + li_PositionCode // 区位码If li_SecPosCode> 1600 and li_SecPosCode <5590 then // 第一个字符For j=23 to 1 Step -1 // 找声母If li_SecPosCode>=li_SecPosValue[j] thenls_returnStr = ls_returnStr + lc_FirstLetter[j]ExitEnd ifNextElseli_offset = (li_SectorCode - 56 ) *94 + li_PositionCode - 1If li_offset>=0 and li_offset <=3007thenls_returnStr = ls_returnStr + Mid(ls_SecondSecTable, li_offset , 1)End ifEnd ifi = i+1End ifNext//Return resultReturn lower( ls_returnStr )//as_InputString。

相关文档
最新文档