PB 常用函数与封装函数列表(十二、通用功能函数封装)
十二、通用功能函数封装
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]) //78912.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) //623456612.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')

