当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

PB 常用函数与封装函数列表(十二、通用功能函数封装)

admin7个月前 (10-18)PowerBuilder2980 修订时间:2024-10-18 17:04:46

十二、通用功能函数封装

12.1 根据SQL创建DataStore

定义函数

/*
>====================================================================
> function:gf_createDataStore
>--------------------------------------------------------------------
> 描述: 根据SQL创建DataStore
>--------------------------------------------------------------------
> 参数:
> String 类型  sql语句
>--------------------------------------------------------------------
> 返回: 
>  DataStore类型 (函数执行成功返回DataStore)
>  Integer 类型  (函数执行成功数据的总行数)
>  String 类型  (函数执行失败时返回错误信息)
>====================================================================
*/
String ls_DwSyntax     //创建数据存储的语法
String ls_Errors       //错误信息
String ls_FunName      //函数名称
ls_FunName = '~r~nCreateDataStore()-' 
//创建数据存储语法
ls_DwSyntax = SQLCA.SyntaxFromSQL(as_SqlSelect, 'Style(Type=Grid)',ls_Errors)
If Len(ls_Errors) > 0 Then
as_ErrInfo = ls_FunName + '不能返回数据窗语法,错误信息:'   + ls_Errors
Return -1
End If
ads_DataStore.Create(ls_DwSyntax,ls_Errors)
If Len(ls_Errors) > 0 Then
as_ErrInfo = ls_FunName + '不能创建数据存储对象,错误信息:' + ls_Errors
Return -1
End If
//检索数据
ads_DataStore.SetTransObject(SQLCA)
ai_RowCount = ads_DataStore.Retrieve()
If ai_RowCount < 0 Then
as_ErrInfo = ls_FunName + '数据存储检索错误!'
Return -1
End If
as_ErrInfo = ''
Return 1

调用函数

int li_count
string ls_sql
string ls_err
DataStore lds_Info
ls_sql = "select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where empno = '7369' "
lds_Info = Create DataStore
If gf_createDataStore(lds_RecipeInfo,ls_sql,li_count,ls_err) = -1 Then
goto Err
End If
return
Err:
messagebox('提示信息',ls_err)

12.2 获取exe名称

引用动态库,定义外部函数

FUNCTION ulong GetModuleFileName(ulong hModule,ref string lpFileName,ulong nSize) LIBRARY "kernel32.dll" ALIAS FOR "GetModuleFileNameA"

定义函数

/*
>====================================================================
> function:gf_file_getexe
>--------------------------------------------------------------------
> 描述: 获取exe名称
>--------------------------------------------------------------------
> 参数:
> showexesuffix:integer类型 (0、不显示exe后缀,1、显示exe后缀)
>--------------------------------------------------------------------
> 返回: string类型 (函数执行成功返回exe的名称)
>====================================================================
*/
string str_temp,separator
string str_list[]
integer i = 1,ll_pos,ll_max
string ls_fileName
GetModuleFileName(handle(this),ls_fileName,100)
separator = ''
ll_pos = pos(ls_fileName,separator,1)
do
if ll_pos = 0 then
str_list[i] = ls_fileName
else
str_list[i] = left(ls_fileName,ll_pos - 1)
i ++
ls_fileName = mid(ls_fileName,ll_pos + len(separator))
ll_pos = pos(ls_fileName,separator,1)
if ll_pos = 0 then str_list[i] = ls_fileName
end if
loop while ll_pos <> 0
ll_max = upperbound(str_list)
if showexesuffix = 1 then
return mid(str_list[ll_max],1,pos(str_list[ll_max],'.') - 1)
else
return str_list[ll_max]
end if
调用函数
string ls_exe
ls_exe = gf_get_exe(0) //不显示exe后缀
ls_exe = gf_get_exe(1) //显示exe后缀

12.3 文件写入

定义函数

/*
>==================================================================
> Function: gf_file_write
>--------------------------------------------------------------------
> 描述: 文件写入
>--------------------------------------------------------------------
> 参数:
> string fileway (打开文件的方式)
> string filepath (要写入的文件路径和文件名称)
> string filecontent (要写入的内容)
>--------------------------------------------------------------------
> 返回: integer (0:成功,-1:失败。)
====================================================================
*/
long ll_file,ll_FLength,ll_i,ll_count
string ls_content
choose case fileway
case 'w'
//流模式、写入、所有用户均可读写该文件、覆盖
ll_file = fileopen(filepath,streamMode!,Write!,Shared!,Replace!)
case 'w+'
//流模式、写入、所有用户均可读写该文件、追加
ll_file = fileopen(filepath,streamMode!,Write!,Shared!,append!)
case 'wl'
//行模式、写入、所有用户均可读写该文件、覆盖
ll_file = fileopen(filepath,LineMode!,Write!,Shared!,Replace!)
case 'wl+'
//行模式、写入、所有用户均可读写该文件、追加
ll_file = fileopen(filepath,LineMode!,Write!,Shared!,append!)
case else
messagebox('提示','gf_file_write:传入的参数错误!')
return - 1
end choose
IF ll_file > 0 THEN
    ll_FLength = len(filecontent)
if ll_FLength > 32765 then
if mod(ll_FLength,32765) = 0 then
ll_count = ll_FLength / 32765
else
ll_count = ll_FLength / 32765 + 1
end if
else
ll_count = 1
end if
for ll_i = 1 to ll_count
ls_content = left(filecontent,32765)
FileWrite(ll_file,ls_content)
filecontent = right(filecontent,len(filecontent) - 32765)
next
FileClose(ll_file)
else
messagebox('提示','gf_file_write:文件打开失败!')
return - 1
end if
return 0

调用函数

gf_file_write('w',getcurrentdirectory() + '1.txt','流模式覆盖')
gf_file_write('w+',getcurrentdirectory() + '1.txt','流模式追加')
gf_file_write('wl',getcurrentdirectory() + '1.txt','行模式覆盖')
gf_file_write('wl+',getcurrentdirectory() + '1.txt','行模式追加')

12.4 文件读取

函数定义

/*
>====================================================================
> Function: gf_file_read
>--------------------------------------------------------------------
> 描述: 文件读取
>--------------------------------------------------------------------
> 参数:
> string fileway (打开文件的方式)
> string filepath (要读取的文件路径和文件名称)
> ref string filecontent[] (要返回的内容)
>--------------------------------------------------------------------
> 返回: integer (0:成功,-1:失败。)
>====================================================================
*/
long ll_file,ll_FLength,ll_i,ll_j,ll_count
string ls_content
choose case fileway
case 'r'
//流模式、读取、所有用户均可读写该文件
ll_file = fileopen(filepath,streamMode!,Read!,Shared!)
IF ll_file > 0 THEN
ll_FLength = len(filepath)
if ll_FLength > 32765 then
            if mod(ll_FLength,32765) = 0 then
ll_count = ll_FLength / 32765
else
ll_count = ll_FLength / 32765 + 1
end if
else
ll_count = 1
end if
for ll_i = 1 to ll_count
FileRead(ll_file,ls_content)
filecontent[1] += ls_content
next
else
messagebox('提示','gf_file_read:文件打开失败!')
return - 1
end if
    case 'rl'
//行模式、读取、所有用户均可读写该文件
ll_file = fileopen(filepath,LineMode!,Read!,Shared!)
IF ll_file > 0 THEN
ll_j = 1
ll_i = FileRead(ll_file,filecontent[ll_j])
do until string(ll_i) = '-100'
ll_j = ll_j + 1
ll_i = FileRead(ll_file,filecontent[ll_j])
loop
FileClose(ll_file)
else
messagebox('提示','gf_file_read:文件打开失败!')
return - 1
end if
case else
messagebox('提示','gf_file_read:传入的参数错误')
return - 1
end choose
return 0

调用函数

(1)、以流模式读取文件

string ls_data[]
gf_file_read('r',getcurrentdirectory() + '1.txt',ls_data[] )
messagebox('流模式返回值',ls_data[1])

(2)、以行模式读取文件

string ls_data[]
gf_file_read('rl',getcurrentdirectory() + '1.txt',ls_data[] )
messagebox('行模式返回值',ls_data[1])
messagebox('行模式返回值',ls_data[2])
messagebox('行模式返回值',ls_data[3])

12.5 字符串切割

定义函数

/*
>====================================================================
> function: gf_string_cut.
>--------------------------------------------------------------------
> 描述: 字符串切割
>--------------------------------------------------------------------
> 参数:
> way:string (可选参数:array:将字符串分割并返回一个数组。string:将字符串分割并返回一个
字符串)
> data:string (要进行分割的字符串数据)
> conditions:string (字符串分割的条件)
> value[] (字符串分割后的值)
>--------------------------------------------------------------------
> 返回: integer (0:成功,-1:失败。)
>====================================================================
*/
long ll_empty_pos,i = 1
string ls_value_string,ls_value_array[]
choose case way
case 'array'
ll_empty_pos = pos(data,conditions)
if ll_empty_pos > 0 then
do
ls_value_array[i] = trim(mid(data,1,ll_empty_pos - 1))
data = trim(mid(data,ll_empty_pos + 1))
ll_empty_pos = pos(data,conditions)
i++
if ll_empty_pos = 0 then
ls_value_array[i] = trim(mid(data,0))
end if
loop while ll_empty_pos > 0
value[] = ls_value_array[]
else
messagebox('提示','gf_string_cut传入的字符串未找到!')
return - 1
end if
case 'string'
ll_empty_pos = pos(data,conditions)
if ll_empty_pos > 0 then
do
ls_value_string += trim(mid(data,1,ll_empty_pos - 1))
data = trim(mid(data,ll_empty_pos + 1))
ll_empty_pos = pos(data,conditions)
if ll_empty_pos = 0 then
ls_value_string += trim(mid(data,0))
end if
loop while ll_empty_pos > 0
value[1] = ls_value_string
else
messagebox('提示','gf_string_cut传入的字符串未找到!')
return - 1
end if
case else
 messagebox('提示','gf_string_cut传入的参数错误!')
return - 1
end choose
return 0

调用函数

string ls_data,ls_value[]
ls_data = '123,456,789'
//1、切割字符串,并返回切割后的字符串
gf_string_cut('string',ls_data,',',ls_value[])
messagebox('',ls_value[1]) //123456789
//2、切割字符串,并返回数组
gf_string_cut('array',ls_data,',',ls_value[])
messagebox('',ls_value[1]) //123
messagebox('',ls_value[2]) //456
messagebox('',ls_value[3]) //789

12.6 字符串替换

 定义函数

/*
>====================================================================
> function:gf_string_replace
>--------------------------------------------------------------------
> 描述: 字符串替换
>--------------------------------------------------------------------
// 参数:
// string data 字符串数据
// string as_old 将要替换的字符
// string as_new 要替换的新值
>--------------------------------------------------------------------
> 返回: string 替换后的字符
>====================================================================
*/
long ll_oldlen, ll_newlen, ll_pos
ll_pos = Pos(data,as_old)
IF ll_pos > 0 Then
ll_oldlen = Len(as_old)
ll_newlen = Len(as_new)
DO WHILE ll_pos > 0
data = Replace(data,ll_pos,ll_oldlen,as_new)
ll_pos = Pos(data,as_old,ll_pos + ll_newlen)
LOOP
END IF
RETURN data

调用函数

string ls_data
ls_data = gf_string_replace('1234561','1','6')
messagebox('返回值',ls_data) //6234566

12.7 大文件写入(二进制数据流)

 函数定义

/*
>====================================================================
> function: gf_adodb_blob_write.
>--------------------------------------------------------------------
> 描述:大文件写入(二进制数据流)
>--------------------------------------------------------------------
> 参数:
> string filepath (要写入的文件路径和文件名称)
> blob filecontent (要写入的二进制数据文件内容)
>--------------------------------------------------------------------
> 返回:integer (0:成功,-1:失败。)
>====================================================================
*/
long li_rtn,ll_file
string ls_data
OLEObject ADODB
ADODB = CREATE OLEObject
li_rtn = ADODB.ConnectToNewObject("ADODB.Stream")
if li_rtn = 0 then
    ADODB.Type = 1 //设置ADODB类型(1、二进制数据,2、文本数据)
    ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写)
    ADODB.open() //打开ADODB
    ADODB.Position = 0 //Position=0才能设置Charset
    ADODB.Write(filecontent) //Write 和 WriteText 方法向 Stream 中输入字节或文本。
    ADODB.savetofile(filepath,2) //savetofile(1、只写入1次。2、可覆盖写入多次)
    ADODB.flush() //清空缓冲区数据
    ADODB.Close() //关闭流
    destroy ADODB
else
messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!')
return - 1
end if
return 0

调用函数

gf_adodb_blob_write(getcurrentdirectory()+'a.txt',blob('123'))

12.8 大文件读取(二进制数据流)

函数定义

/*
>====================================================================
> function: gf_adodb_blob_read.
>--------------------------------------------------------------------
> 描述: 大文件读取(二进制数据流)
>--------------------------------------------------------------------
> 参数:
> string filepath (要读取的文件路径和文件名称)
>--------------------------------------------------------------------
> 返回: blob (从文件中读取到的blob数据)
>====================================================================
*/
long li_rtn
blob lb_data
OLEObject ADODB
ADODB = CREATE OLEObject
li_rtn = ADODB.ConnectToNewObject("ADODB.Stream")
if li_rtn = 0 then
    ADODB.Type = 1 //设置ADODB类型(1、二进制数据,2、文本数据)
    ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写)
    ADODB.Open() //打开ADODB
    ADODB.LoadFromFile(filepath) //加载文件
    ADODB.Position = 0 //Position=0才能设置Charset
    lb_data = ADODB.Read() //Read 和 ReadText 方法向 Stream 中读取字节或文本。
    ADODB.flush() //清空缓冲区数据
    ADODB.Close() //关闭流
    destroy ADODB
else
messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!')
end if
return lb_data

函数调用

blob lb_data
lb_data = gf_adodb_blob_read(getcurrentdirectory()+'a.txt')
messagebox('blob',string(lb_data))

12.9 大文件写入(文本流)

函数定义

/*
>====================================================================
> function: gf_adodb_string_write.
>--------------------------------------------------------------------
> 描述:大文件写入(文本流)
>--------------------------------------------------------------------
> 参数:
> string filepath (要写入的文件路径和文件名称)
> string filecontent (要写入的文本流内容)
>--------------------------------------------------------------------
> 返回:integer (0:成功,-1:失败。)
>====================================================================
*/
long li_rtn,ll_file
string ls_data
OLEObject ADODB
ADODB = CREATE OLEObject
li_rtn = ADODB.ConnectToNewObject("ADODB.Stream")
if li_rtn = 0 then
    ADODB.Type = 2 //设置ADODB类型(1、二进制数据,2、文本数据)
    ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写)
    ADODB.open() //打开ADODB
    ADODB.Position = 0 //Position=0才能设置Charset
    ADODB.WriteText(filecontent) //Write 和 WriteText 方法向 Stream 中输入字节或文本。
    ADODB.savetofile(filepath,2) //savetofile(1、只写入1次。2、可覆盖写入多次)
    ADODB.flush() //清空缓冲区数据
    ADODB.Close() //关闭流
    destroy ADODB
else
messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!')
return - 1
end if
return 0

函数调用

gf_adodb_string_write(getcurrentdirectory()+'a.txt','123')

12.10 大文件读取(文本流)

函数定义

/*
>====================================================================
> function: gf_adodb_string_read.
>--------------------------------------------------------------------
> 描述: 大文件读取(文本流)
>--------------------------------------------------------------------
> 参数:
> string filepath (要读取的文件路径和文件名称)
>--------------------------------------------------------------------
> 返回: string (从文件中读取到的blob数据)
>====================================================================
*/
long li_rtn
string ls_data
OLEObject ADODB
ADODB = CREATE OLEObject
li_rtn = ADODB.ConnectToNewObject("ADODB.Stream")
if li_rtn = 0 then
    ADODB.Type = 2 //设置ADODB类型(1、二进制数据,2、文本数据)
    ADODB.Mode = 3 //设置读写模式(1、读,2、写,3、读写)
    ADODB.Open() //打开ADODB
    ADODB.LoadFromFile(filepath) //加载文件
    ADODB.Position = 0 //Position= 0才能设置Charset
    ls_data = ADODB.ReadText() //Read 和 ReadText 方法向 Stream 中读取字节或文本。
    ADODB.flush() //清空缓冲区数据
    ADODB.Close() //关闭流
    destroy ADODB
else
messagebox('提示', '无法连接【ADODB.Stream】!~r~n读取文件失败!')
end if
return ls_data

函数调用

string ls_data
ls_data = gf_adodb_string_read(getcurrentdirectory()+'a.txt')
messagebox('string',ls_data)

12.11 移除字符串中的字母

 函数定义

/*
>====================================================================
> Function: gf_remove_letter
>--------------------------------------------------------------------
> 描述: 移除字符串中的字母
>--------------------------------------------------------------------
> 参数:
> string ls_data 要去除字母的字符串
>--------------------------------------------------------------------
> 返回: string
>====================================================================
*/
string str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string ls_data_new
long i
if ls_data = '' or isnull(ls_data) then
ls_data_new = ''
else
for i = 1 to len(ls_data)
if pos(str,mid(ls_data,i,1)) = 0 then
ls_data_new += mid(ls_data,i,1)
end if
next
end if
return ls_data_new

函数调用

gf_remove_letter('12abc3sdfsg4')

12.12 获取上个月初到月底的时间

 函数定义

/*
>====================================================================
> Function: gf_last_month
>--------------------------------------------------------------------
> 描述: 获取上个月初到月底的时间
>--------------------------------------------------------------------
> 参数:
> ref string lrt_start
> ref string lrt_end
>--------------------------------------------------------------------
> 返回值: (none)
>====================================================================
*/
string ls_by2
string ls_by,ls_sy
ls_by2 = mid(string(date(today())),1,7) + '-01'
ls_by = string(RelativeDate(date(ls_by2), - 1))
ls_sy = string(Year(date(ls_by2))) + '-' + string(Month(date(ls_by2)) - 1) +
'-01'
lrt_start = ls_sy + ' 00:00:00'
lrt_end = ls_by + ' 23:59:59'

函数调用

string ls_start,ls_end
of_last_month(ls_start,ls_end)
messagebox('月初的(日期+时间)',ls_start)
messagebox('月底的(日期+时间)',ls_end)

12.13 时间转字符串

 函数定义

/*
>====================================================================
> Function: gf_datetime_string
>--------------------------------------------------------------------
> 描述: 时间转字符串
>--------------------------------------------------------------------
> 参数:
> string as_datetime
> string as_select
>--------------------------------------------------------------------
> 返回值: string
>====================================================================
*/
string ls_y,ls_m,ls_d,ls_h,ls_i,ls_s
long ll_y,ll_m,ll_d,ll_h,ll_i,ll_s
string ls_format,ls_return
as_datetime = trim(as_datetime)
if pos(as_datetime,'-') > 0 then
    ls_format = '-'
    ll_y = pos(as_datetime,'-')
    ll_m = pos(as_datetime,'-',ll_y + 1)
    ll_d = pos(as_datetime,' ',ll_m + 1)
    ll_h = pos(as_datetime,':')
    ll_i = pos(as_datetime,':',ll_h + 1)
elseif pos(as_datetime,'/') > 0 then
    ls_format = '/'
    ll_y = pos(as_datetime,'/')
    ll_m = pos(as_datetime,'/',ll_y + 1)
    ll_d = pos(as_datetime,' ',ll_m + 1)
    ll_h = pos(as_datetime,':')
    ll_i = pos(as_datetime,':',ll_h + 1)
elseif pos(as_datetime,'.') > 0 then
    ls_format = '.'
    ll_y = pos(as_datetime,'.')
    ll_m = pos(as_datetime,'.',ll_y + 1)
    ll_d = pos(as_datetime,' ',ll_m + 1)
    ll_h = pos(as_datetime,':')
    ll_i = pos(as_datetime,':',ll_h + 1)
end if
ls_y = mid(as_datetime,1,ll_y - 1)
ls_m = mid(as_datetime,ll_y + 1,ll_m - 1 - ll_y)
ls_d = mid(as_datetime,ll_m + 1,ll_d - 1 - ll_m)
ls_h = mid(as_datetime,ll_d + 1,ll_h - 1 - ll_d)
ls_i = mid(as_datetime,ll_h + 1,ll_i - 1 - ll_h)
ls_s = mid(as_datetime,ll_i + 1)
choose case lower(as_select)
case 'y' //年
ls_return = ls_y
case 'm' //月
ls_return = ls_m
case 'd' //日
ls_return = ls_d
case 'h' //时
ls_return = ls_h
case 'i' //分
ls_return = ls_i
case 's' //秒
ls_return = ls_s
case 'y-m' //年-月
ls_return = ls_y + ls_format + ls_m
case 'y-m-d' //年-月-日
ls_return = ls_y + ls_format + ls_m + ls_format + ls_d
case 'y-m-d h' //年-月-日 时
ls_return = ls_y + ls_format + ls_m + ls_format + ls_d + ' ' + ls_h
case 'y-m-d h:i' //年-月-日 时:分
ls_return = ls_y + ls_format + ls_m + ls_format + ls_d + ' ' + ls_h +':' + ls_i
case 'y-m-d h:i:s' //年-月-日 时:分:秒
ls_return = ls_y + ls_format + ls_m + ls_format + ls_d + ' ' + ls_h +':' + ls_i + ':' + ls_s
case 'lastday' //获取当月最后一天
        Integer li_year,li_month
        li_year = Integer(ls_y)
        li_month = Integer(ls_m)
        if li_month = 12 then
        li_month = 1
        li_year ++
else
li_month = li_month + 1
end if
ls_return = string(RelativeDate(Date(String(li_year) + '-' +
String(li_month) + '-01'), - 1))
end choose
return ls_return

函数调用

string ls_datetime
ls_datetime = '2021-01-01 11:12:13'
gf_datetime_string(ls_datetime,'Y') //获取年
gf_datetime_string(ls_datetime,'M') //获取月
gf_datetime_string(ls_datetime,'D') //获取日
gf_datetime_string(ls_datetime,'H') //获取时
gf_datetime_string(ls_datetime,'I') //获取分
gf_datetime_string(ls_datetime,'S') //获取秒
gf_datetime_string(ls_datetime,'Y-M') //获取年+月
gf_datetime_string(ls_datetime,'Y-M-D') //获取年+月+日
gf_datetime_string(ls_datetime,'H-I') //获取时+分
gf_datetime_string(ls_datetime,'H-I-S') //获取时+分+秒
gf_datetime_string(ls_datetime,'Y-M-D H') //获取年+月+日 时
gf_datetime_string(ls_datetime,'Y-M-D H:I') //获取年+月+日 时+分
gf_datetime_string(ls_datetime,'Y-M-D H:I:S') //获取年+月+日 时+分+秒

12.14 xml解析

 函数定义

/*
>====================================================================
> Function: gf_xml_get
>--------------------------------------------------------------------
> 描述: xml解析
>--------------------------------------------------------------------
> 参数:
> string data
> string label
>--------------------------------------------------------------------
> 返回值: string
>====================================================================
*/
long ll_start
string ls_data,ls_data2,ls_data3
ls_data = trim(data)
ll_start = pos(ls_data,'<' + label + '>')
if ll_start = 0 then
return ''
else
    ls_data2 = mid(ls_data,ll_start + len('<' + label + '>'))
    ls_data3 = mid(ls_data2,1,pos(ls_data2,'<') - len('<'))
return ls_data3
end if

函数调用

string ls_xml
ls_xml = '<?xml version="1.0" encoding="UTF-8"?>' + &
'<code>' + &
'<a>1</a>' + &
'<b>2</b>' + &
'<c>3</c>' + &
'<d>4</d>' + &
'</code>'
gf_xml_get(ls_xml,'a')

12.15 获取指定路径下的所有文件和文件夹

函数定义

/*
>====================================================================
>Function: gf_dir
>--------------------------------------------------------------------
> >
描述: 获取指定路径下的所有文件和文件夹
>--------------------------------------------------------------------
> 
>参数:
> string as_dir
> listbox lb_filelist
> 
>ref st_dir astr_itemlist[]
>--------------------------------------------------------------------
> >
返回值: integer
>====================================================================
>*/
Long ll_i
Long ll_Count
Long ll_DirCount
    
If Not DirectoryExists ( as_Dir ) Then
Return -2 // 目录不存在
End If
If Right(as_Dir, 1) <> '' Then
as_Dir += ''
End If
// 处理目录
ll_DirCount = 0
lb_FileList.DirList( as_Dir + '*.*', 32784)
ll_Count = lb_FileList.TotalItems()
For ll_i = 1 To ll_Count
If lb_FileList.Text(ll_i) = '[..]' Then
Continue
End If
ll_DirCount ++
    astr_ItemList[ll_DirCount].Item_Name = lb_FileList.Text(ll_i)
    astr_ItemList[ll_DirCount].Item_Name = as_Dir +
    Mid(astr_ItemList[ll_DirCount].Item_Name, 2,
    Len(astr_ItemList[ll_DirCount].Item_Name) - 2) // 去除外部的[]
    astr_ItemList[ll_DirCount].Item_Type = 2
Next
// 处理文件
lb_FileList.DirList( as_Dir + '*.*', 0)
ll_Count = lb_FileList.TotalItems()
For ll_i = 1 To ll_Count
ll_DirCount ++
astr_ItemList[ll_DirCount].Item_Name = as_Dir + lb_FileList.Text(ll_i)
astr_ItemList[ll_DirCount].Item_Type = 1
Next
Return ll_DirCount

函数调用

st_dir astr_itemlist[]
gf_dir('D:',lb_1,astr_itemlist)

12.16 将数值转换为大写金额

函数定义

/*
>====================================================================
> Declare: gf_capital_amount
>--------------------------------------------------------------------
> 描述: 将数值转换为大写金额
>--------------------------------------------------------------------
> 参数:
> ac_money 要转换的金额
>--------------------------------------------------------------------
> 返回: 大写金额
>====================================================================
*/
string ls_numstr[10] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}
string ls_monstr[20] =
{"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟","亿",
"拾","佰","仟"}
integer i
integer li_len
string ls_temp
string ls_char
string ls_intstr
string ls_decstr
string ls_rtnintstr
string ls_rtndecstr
ls_temp = string(abs(ac_money),"0.00")
ls_intstr = left (ls_temp,len(ls_temp) - 3)
ls_decstr = right(ls_temp,2)
li_len = len(ls_intstr)
for i = 1 to li_len
ls_char = mid(ls_intstr,li_len - i + 1,1)
if ls_char = "0" then
        choose case i
            case 1,9,17
                ls_rtnintstr = ls_monstr[i] + ls_rtnintstr
            case 5,13
                if li_len > i + 3 then
                    if mid(ls_intstr,li_len - i - 2,3) <> "000" then
                        ls_rtnintstr = ls_monstr[i] + ls_rtnintstr
                    end if
                else
                    ls_rtnintstr = ls_monstr[i] + ls_rtnintstr
                end if
            case else
                if mid(ls_intstr,li_len - i + 2,1) <> "0" then
                    ls_rtnintstr = "零" + ls_rtnintstr
                end if
        end choose
else
        ls_rtnintstr = ls_numstr[integer(ls_char) + 1] + ls_monstr[i] +
        ls_rtnintstr
end if
next
if long(ls_intstr) = 0 then
    if long(ls_decstr) > 0 then
        ls_rtnintstr = ""
    else
        ls_rtnintstr = "零元"
    end if
end if
if ls_decstr = "00" then
ls_rtndecstr = "整"
elseif mid(ls_decstr,1,1) = "0" then
ls_rtndecstr = ls_numstr[integer(mid(ls_decstr,2,1)) + 1] + "分"
if long(ls_intstr) > 0 then ls_rtndecstr = "零" + ls_rtndecstr
elseif mid(ls_decstr,2,1) = "0" then
ls_rtndecstr = ls_numstr[integer(mid(ls_decstr,1,1)) + 1] + "角"
else
    ls_rtndecstr = ls_numstr[integer(mid(ls_decstr,1,1)) + 1] + "角" + &
    ls_numstr[integer(mid(ls_decstr,2,1)) + 1] + "分"
end if
if ac_money >= 0 then
return ls_rtnintstr + ls_rtndecstr
else
return "负" + ls_rtnintstr + ls_rtndecstr
end if

函数调用

gf_capital_amount(11.22)

12.17 将按钮循环添加到按钮数组里

函数定义

/*
>====================================================================
> Function: gf_button_array
>--------------------------------------------------------------------
> 描述: 将按钮循环添加到按钮数组里
>--------------------------------------------------------------------
> 参数:
> commandbutton controls[]
> ref commandbutton lbt_btn[]
>====================================================================
*/
long i
for i = 1 to UpperBound(controls[])
if left(classname(controls[i]),3) = "cb_" then
lbt_btn[upperbound(lbt_btn) + 1] = controls[i]
end if
next

函数调用

commandbutton a[]
a[1] = cb_1
a[2] = cb_2
gf_button_array(a)

12.18 动态添加数据窗口字段下的ddlb下拉框

函数定义

/*
>====================================================================
> Function: gf_dw_ddlb
>--------------------------------------------------------------------
> 描述:动态添加数据窗口字段下的ddlb下拉框
>--------------------------------------------------------------------
> 参数:
> datawindow as_dw 要添加下拉框的数据窗口
> string as_dw_column 要添加下拉框的列
> transaction as_affairs 要查询的SQL事务
> string as_table 要查询的表
> string as_table 要查询的where条件
> string as_table_display 要在下拉框显示的列
> string as_table_data 要在下拉框中指定的数据
>--------------------------------------------------------------------
> 返回值: integer
>====================================================================
*/
string dw_sql,dw_style
string dw_syntax,dw_syntax_error,dw_create_error
boolean lb_flag = false
string ls_data,ls_display
string ls_value
datastore dw_new
dw_new = create datastore
as_dw.Modify(as_dw_column + ".ddlb.case='any'")
as_dw.modify(as_dw_column + ".ddlb.vscrollbar='yes'")
if as_table_condition = '' or isnull(as_table_condition) then
dw_sql = "select distinct " + as_table_display + ',' + as_table_data + "
from " + as_table
else
dw_sql = "select distinct " + as_table_display + ',' + as_table_data + "
from " + as_table + ' where ' + as_table_condition
end if
dw_style = "style(type=grid)"
dw_syntax = sqlca.syntaxfromsql(dw_sql, dw_style, dw_syntax_error)
if len(dw_syntax_error) > 0 then
messagebox("提示", "构造sql数据源错误: " + dw_syntax_error)
return - 1
end if
dw_new.create(dw_syntax,dw_create_error)
if len(dw_create_error) > 0 then
messagebox("提示", "创建数据窗口错误: " + dw_create_error)
return - 1
end if
dw_new.settransobject(sqlca)
dw_new.retrieve()
long i,ll_rowcount
ll_rowcount = dw_new.rowcount()
if ll_rowcount > 0 then
    for i = 1 to ll_rowcount
    ls_display = string(dw_new.GetItemString(i,as_table_display))
    ls_data = string(dw_new.GetItemString(i,as_table_data))
   if not lb_flag then
    ls_value = as_dw_column + ".values='"
    lb_flag = true
    else
    ls_value += "/"
    end if
    ls_value += Trim(ls_display) + "~t" + Trim(ls_data)
    next
ls_value += "'"
    if as_dw.Modify(ls_value) <> "" then
        return - 1
    end if
else
return - 1
end if
return 0

函数调用

gf_dw_ddlb(dw_1,'name',sqlca,'user','name','id')
 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=434

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。