PB中对INI文件读写的补充函数

合集下载

PB-操纵两数据库

PB-操纵两数据库

PowerBuilder如何同时操纵两大数据库系统当今,网络技术迅猛发展,必然要求应用技术不断提高。

由于在网络上常常很有可能安装有不同种类的多个数据库管理系统,而有些应用往往需要同时对这些不同种类的数据库系统进行操作,所以,一个应用同时连接到多个数据库成为必然。

下面以Sybase 和Oracle 为例讲述PowerBuilder同时操纵两大数据库系统的方法。

1.软件配置1)安装网络软件,分别调通PowerBuilder所在客户机与Sybase和Oracle数据库服务器的网络连接。

所使用的网络协议和网络软件,两数据库必须同时支持。

例如,协议用TCP/IP,客户机网络软件用FTP TCP/IP。

2)客户机上应安装了对Sybase和Oracle的接口程序。

3)客户机上安装了两数据库的连接产品。

例如,Sybase的Net-Library,Oracle的SQL* net。

如果两数据库服务器新使用的网络协议不一样,如Sybase用TCP/IP,Oracle用SPX/IPX,此时客户端必须使用同时支持这两种协议的网络软件,并能同时连通这两种服务器。

2.实现方法PowerBuilder是通过事务对象与数据库通信的。

在一般情况下用的是缺省事务对象SQL (SQL Communication Area),用户也可以定义自已的事务对象。

一个事务对象用于对一种数据库通信。

因此,要实现PowerBuilder同时对两个数据库连通,必须采取如下方法:1)在PowerBuilder中给每种数据库都定义一个事务对象;2)分别给每个事务对象中的用于连接到数据库的属性(包括数据库管理系统名,数据库服务器名,用户名,口令等)赋值。

3)分别将这些定义好的事务对象设置到应用的数据窗口上,语句如下:Settransobject(数据窗口,事务对象名)这样,PowerBuilder应用就可以同时连接到两个数据库,并操纵两个数据库中的数据。

3.范例说明1)创建一个窗口,并在该窗口上定义两个数据窗口控件dw_1和dw_2。

PowerBuilder数据库配置方法

PowerBuilder数据库配置方法

PowerBuilder数据库配置⽅法PowerBuilder数据库配置⽅法⾸先进⼊到PowerBuilder主页⾯后:1.在pb主菜单的Tool菜单中选择"DataBase Profile"进⼊到⼀个界⾯2.在Installed Database InterFaces中找到Oracle所在位置,确保其选中,选择按钮"New"创建⼀个数据库名[如:Orcl]3.在弹出的窗⼝中选择Tab页⾯为Connection:4.在Profile Name:中输⼊你要创建的数据库名,这⾥就假设为Orcl5.在Connect Information中:6.SerVer:这⾥输⼊你在Net8 Easy Configers中配置的数据库服务器名7.Login ID:输⼊你连接数据库的⽤户ID8.Password:输⼊你连接数据库的⽤户⼝令9.接着选择System Tab页⾯:在PowerBuilder Catalog Table Owener:system[这个是可以更改的]按下:"Apply"或者"OK"后即可.返回到Database Profiles界⾯:10.选择你刚才创建的数据库,进⾏连接"Connect"连接.*****当然,你可以直接选择你创建的数据库,然后选择Edit进⼊到⼀个界⾯"Database Proile Setup",选择Preview页⾯,将Database Connectiong Syntax:中的代码Copy到你的应⽤程序的Open事件中即可.// Profile OrclSQLCA.DBMS = "O84 Oracle8/8i (8.x.4+)"SQLCA.LogPass = "Password"SQLCA.ServerName = "Sername"SQLCA.LogId = "UserID"SQLCA.AutoCommit = FalseSQLCA.DBParm = "PBCatalogOwner='Orcl'"SetPointer(HourGlass!)connect using sqlca;file://数据库连接成功打开主窗⼝Open(w_main)If sqlca.sqlcode<>0 thenMessagebox("不能连接到数据库",Sqlca.sqlerrtext)haltreturnend if以上这⼏⾏代码就是具体的连接代码,只要你进⾏修改成你⾃⼰的数据库名和⽤户名⽤户⼝令即可.如果向动态的进⾏数据库连接,你可以创建⼀个INi⽂件,将连接数据库的代码写到INi ⽂件中,这样即可动态的进⾏数据库连接了.具体的INi⽂件代码内容为:[DataBase]DBMS=ODBCDatabase=UserID=DatabasePassword=ServerName=LogId=LogPassword=DbParm=ConnectString='DSN=dagang;UID=kantmis;PWD=kantmis'Prompt=0对于这样的问题,如果你想在窗⼝打开的时候看到窗⼝的数据,直接在窗体的Open事件中写如下代码即可:dw_1.Settransobject(sqlca)dw_1.Retrieve()如果要按照你的条件进⾏显⽰数据,你直接到DataWindow的SQL中,定义Where条件即可.另外,你也可以定义数据检索的RetrieveVal Arguments即可查询出符合条件的记录.。

问:如何能够在PB运行中得到任意表的结构

问:如何能够在PB运行中得到任意表的结构

减肥药哪种好:www.hogoo8.com1、问:如何能够在PB运行中得到任意表的结构?如域名,属性等。

谢谢!答:直接访问DBMS的系统表或系统视图。

以ORACLE为例.SYS.ALL_TAB_COLUMNS等视图中包含你要的信息。

2、PB + Sybase SQL Anywhere C/S配置问:本人用PB的SQL Anywhere 5,在局域网选一台pc用Network server安装,选另一pc用Network client安装。

在服务器上创建数据库及一表后,在客户端配置ODBC 时,在database file 选Network方式,系统不认!在服务器端启动数据库后,在客户端点击DB Profile-ODBC- 选Database server-connect 后,系统显示:SQLSTATE=08001[sybase][ODBC]unable to connect to database server:unable to start database engine.请问高手,我该如何解决?非常感谢!答:请教高手?Sorry,其实我只是PB菜鸟。

记得大概半个多月前我在这儿发过一个贴子,里面谈及我的C/S配置,可适没人回应。

我的做法如下:(1)环境:NT4.0+sql anywhere5.5+PB6.5(2)服务器以server方式安装sql anywhere,用dbsrv50启动数据库服务(3)客户机以client方式安装sql anywhere,新建odbc数据源(名称与下面ini 文件内的配置一致,数据库为服务器上的数据库,选择network方式)(4)客户机安装PB开发之应用软件,包括:exe文件,pbd动态链接库,dll支持库,一个ini用户配置文件(内有[database]配置)(5)在客户机桌面上建立程序之快捷方式,点击图标,数十秒后程序成功启动。

其实我也不清楚这是否算是一个合理的C/S应用,Kokuc在电脑报上发表的文章相信你也看过,相当有用,可作参考。

PB8到PB11.5功能改进

PB8到PB11.5功能改进

PB8到PB11.5功能改进1PB9功能改进(生命周期至2006.12.09)1.1PB9.0功能改进1.1.1DataWindow XML supportDataStore、DataWindow导入、导出为XML1.1.2PowerBuilder Document Object ModelPBDOM编程接口1.1.3PowerBuilder Native Interface1.1.4JSP targets1.1.5Web services for JSP clients1.1.6Web services for Windows clients1.1.7EJB clients for third-party application servers1.1.8XML and CSV import and saveDataWindow、Graph object导入、导出为XML、CSV1.1.9Saving as PDF and XSL-FODataWindow数据导出为PDF、XSL-FO1.1.10The OrcaScript languagePB批处理脚本语言,通过命令行工具OrcaScr9执行1.1.11PowerBuilder Runtime PackagerPB运行时发布工具,可以将PB运行时制作为独立安装包1.1.12PowerBuilder Resource Monitor1.1.13Source control enhancements1.1.14DataWindow enhancements新属性:DataWindow.Print.ClipText 、DataWindow.Print.OverridePrintJob、DataWindow.Print.PrinterName属性增强属性:DataWindow.Print.Collate、DataWindow.Print.Copies1.1.15PowerScript enhancementsEnvironment对象新属性:PBBuildNumber新系统函数:AddToLibraryList、XMLParseFile、XMLParseString增强系统函数:GetFileOpenName、GetFileSaveName,增加参数initdir(初始路径)、aFlag(对话框标志)新数据类型及其相关函数:LongLong(64位整形)1.1.16Debugger enhancements1.1.17Database connectivity enhancements支持Oracle9i中的连接池和NCHAR、NVARCHAR2、LOB数据类型,支持Unicode数据库1.1.18Miscellaneous enhancements1.2.1User interface enhancements for XP look and feelXP风格用户界面1.2.2PBNI support for Any variables and valuesPBNI支持Any型变量1.2.3PBX_DrawVisualObject function for PBNI visual objectsPBNI可视对象新增函数PBX_DrawVisualObject1.2.4PBNI source files in public directory1.2.5SetProxyServerOptions function for SOAP Web servicesSoapConnection对象函数SetProxyServerOptions1.2.6Heap manager included in pbvm90.dlllibjsybheap.dll中的函数被移到pbvm90.dll中1.2.7Hiding the JSP Page view1.2.8New menu options in the SQL Select and Query paintersSQL Select和Query画笔中的Where和Having视图增加了两个快捷菜单项:Insert Clause 和Delete Clause1.2.9New Excel format for saving data数据窗口数据导出支持Microsoft Excel 97格式1.2.10New DBParm: PBNewSPInvocation新增DBParm参数PBNewSPInvocation1.2.11Additional changesChanged behavior of Extend Ancestor Script menu itemInherited controls and menus cannot be copiedUsing masks with "as is" charactersFormat of WMF files saved from DataWindows changedMTS/COM+ components must be redeployed1.3.1Support for Windows 2003 Server支持Windows 2003 Server作为开发环境1.3.2PBNI result set accessor functionsPBNI中增加了DataWindow和DataStore结果集访问函数CreateResultSet,、GetResultSetAccessor、ReleaseResultSetAccessor1.3.3Environment variables1.3.4TimeStamp database parameter1.3.5PWExpDialog database parameter1.3.6DefaultProcOwner database parameter1.3.7Properties for custom printer page数据窗口新增属性Print.Paper.Size、Print.CustomPage.Length、Print.Custom.Page.Width 1.3.8Context menus for PBD files1.4.1PasteLowercase PB.INI option1.4.2Exporting and importing XML with CDATA sections 1.4.3Changes in the Release database parameter1.4.4OJSyntax parameter now available for SYC1.4.5Configuring Java VM initialization2PB10功能改进(生命周期至2007.07.05)2.1PB10.0功能改进2.1.1PowerDesigner plug-inPowerBuilder中的PowerDesigner插件2.1.2XML Web DataWindow2.1.3DataWindow .NET在支持.NET Framework的开发环境中使用数据窗口和数据存储2.1.4Unicode supportPB10使用Unicode编码2.1.5New controls增加了Animation(动画)控件和MonthCalendar(月历)控件2.1.6UDDI support for Web services可以在PowerBuilder和JSP Web Service Proxy向导中使用UDDI浏览器选择一个Web service,也可以使用UDDI PBNI扩展像应用程序中添加UDDI浏览器2.1.7EAServer components as Web services可以将EAServer组件作为Web service2.1.8SOAP processing methods for Web servicesWeb services提供一些用于各种平台和框架下不同组件之间互动的方法。

PB的可执行文件所需的环境DLL

PB的可执行文件所需的环境DLL

PB的可执行文件所需的环境DLL
一个EXE文件(或者再加PBD文件)要提交给脱离了PowerBuilder环境的用户使用时,
还必须提供一些PowerBuilder应用程序执行、数据库连接等实现所必需的环境动态链接库文件。

如果缺少这些dll文件,应用程序可能无法启动,或者无法连接到数据库服务器。

这就是说,经过编译生成的PowerBuilder应用程序需要一定的运行环境。

以下几个文件在PowerBuilder的Shared\PowerBuilder文件夹中(或者使用开始菜单中的"查找"),提交应用程序时需要将它们拷贝到EXE文件所在的路径下(对于32位Windows或NT操作系统):
PBVM70.DLL :PowerBuilder 虚拟机,必需
PBTRA60.DLL :用来数据库跟踪调用,可选
PBRTC60.DLL:对Rich Text 的支持,可选
PBMSS70.DLL:Microsoft SQL Server数据库服务器的直连接口(Native database
interfaces),使用MSS必备的DLL,如果使用别的DBMS,采用相应的其他DLL
PBDWE60.DLL:DataWindow 引擎,如果使用了DataWindow和Report,必需
NTWDBLIB.DLL:DBMS 客户端链接库,负责执行与服务器的连接,必需
DBNMPNTW.DLL:Named Pipes Network Library,网络连接方式之一
DBMSSOCN.DLL:TCP/IP Network Library,网络连接方式之二
如果不是使用专用接口,而是采用ODBC,则另需要:
PBODB70 .DLL
PBODB70 .INI。

vbsini读写

vbsini读写

vbsini读写''函数:设置ini值(ini路径,目标节点,目标键,目标值)''注:若ini文件不存在则创建;节点或键不存在则添加FunctionSetIniValue(path,sectionName,keyName,value)Dimfso,fileSetfso=CreateObject("Scripting.FileSystemObject") Setfile=fso.OpenTextFile(path,1,true)Dimline,cache,inSection,sectionExist,keyExist DoUntilfile.AtEndOfStreamline=file.ReadlineifStrComp(Trim(line),"["+sectionName+"]",1)=0Then inSection=TruesectionExist=TrueEndIfifinSectionAndLeft(LTrim(line),1)="["AndStrComp(Trim(line)," ["+sectionName+"]",1)<>0TheninSection=FalseIfNotkeyExistThencache=cache+keyName+"="+value+vbCrLfkeyExist=TrueEndIfEndIfifinSectionAndInStr(line,"=")<>0Thenss=Split(line,"=")IfStrComp(Trim(ss(0)),keyName,1)=0Thenline=ss(0)+"="+valuekeyExist=TrueEndIfEndIfcache=cache+line+vbcrlfLoopfile.CloseIfnotsectionExistThencache=cache+"["+sectionName+"]"+vbCrLf cache=cache+keyName+"="+value+vbCrLf ElseIfNotkeyExistThencache=cache+keyName+"="+value+vbCrLf EndIfSetfile=fso.OpenTextFile(path,2,True) file.Write(cache)file.CloseEndFunction''调用SetIniValue"C:\test.ini","Other","ccc","aaa"''读INI文件strIniFile="C:\test.ini"strTemp=ReadINI(strIniFile,"Other","ccc")MsgBox"ccc="&strTemp,vbInformation''read函数FunctionReadINI(FilePath,Bar,PrimaryKey) Dimfso,sReadLine,i,j,ssSetfso=CreateObject("Scripting.FileSystemObject") SetIniFile=fso.opentextfile(FilePath,1) DoUntilIniFile.atendofstreamsReadLine=IniFile.readlineIfsReadLine=""ThenIniFile.skiplineElseIfTrim(sReadLine)="["&Bar&"]"Then''找到小节名''查找该小节名下的键名DoUntilIniFile.atendofstreamsReadLine=IniFile.readline''读取小节名后的行j=InStr(sReadLine,"=")Ifj>0Then''小节名后的文本行存在IfInStr(Left(sReadLine,j),PrimaryKey)>0Then''从"="左边字符串找到键名ss=Trim(Right(sReadLine,Len(sReadLine)-InStr(sReadLine,"=")))''读取等号后的部分ExitDoEndIfEndIfLoopEndIfLoopIniFile.CloseSetfso=NothingReadINI=ssEndFunction。

UG011 - PB卡使用说明书-发布版

第 4 章 控制器 eio 配置............................................................................................21 4.1 eio 文件目录...............................................................................................21 4.2 eio 文件配置原则.......................................................................................21
该文档适用于在 EDPF-NT+3.3 版本的基础上进行的组态调试过程。 PB 卡相关硬件信息参见《IO 硬件用户手册》,相关控制算法参见《控制算 法参考手册》。
1.1 PB 卡特点
a) 体积小,性能高; b) 采用双卡冗余,安全可靠; c) 模块式结构维护方便; d) 可靠的直流宽范围(DC18-36V)供电; e) 全隔离高抗干扰设计确保运行可靠; f) 方便的 DP 从站联结方式, 可接六路 DP 通讯段; g) 支持 9600bps、19200bps、45.45Kbps、93.75Kbps、187.5Kbps、500Kbps
备只有单 DP 接口,但对主站控制有冗余要求的场合。
图 2-4 2.2.3 冗余 PB 卡和冗余 DP 总线
PROFIBUS-DP 冗余 DP 总线配置方案一般采用冗余 PB 卡和冗余 DP 段方案, 如图 2-5 所示。该方案适用于从站设备有冗余 DP 接口,且对主站控制有冗余要 求的场合。
北京国电智深控制技术有限公司

PB9.0 + ASA8.0 + Setup Factory7.0 应用程序发布

PB9.0 + ASA8.0 + SetupFactory7.0 应用程序发布我本是搞Java开发的,由于项目需要一个C/S的客户端插件,决定用PB开发,就这样开始边学习边开发,属于现炒现卖吧,期间遇到很多问题,一般就是网上找找资料或是在群里请教,这里要感谢那些帮助过我的人。

对于PB我是新手,本来没有什么发言权,但是在这个过程中走了许多弯路,写这篇文章旨在希望能帮助到像我当初一样迷茫的人好了,言归正传,需要解决的问题:如题。

使用PB开发C/S程序往往会选择ASA数据库,因为客户端不需要安装数据库软件,只需要配置ODBC数据源就可以了,当然数据源也是不需要用户去配置的,我们在安装的时候就设置好了。

下面我们一步一步的解决问题:一、编译应用程序为EXE文件这个相对比较简单,但是这里我还是说明一下,主要针对新手当你开发完你的应用程序时需要编译为EXE文件,步骤:File ——New ——Project ——Application Wizard ——点击OK按钮,然后就是跟着向导一步一步走:1、Next>2、选择库文件Next>3、输入名称(一般默认就可以了)Next>4、上面:选择生成EXE文件的位置;下面:选择资源文件Next>5、Prompt for Overwrite表示生成EXE文件如果存在是否提醒;Build Options 表示编译选项,Full Build 完全编译、Incremental Build 增量编译,我选择的是完全编译Next>6、是否生成机器码,默认,不生成Next>7、是否生成PDB文件,这个要勾上Next>8、公司,描述等信息Next>9、FinishFinish以后显示一个界面,这个界面就是我们刚才用向导选择的一些信息,在这里也可以修改。

到这里,并没有生成EXE文件,只是创建了一个Project而已,现在我们编译生成EXE文件,首先保证其他面板都已关闭,就是说当前只有Finish以后出现的界面,然后选择菜单项Design——Deploy Project,如果你的程序没有问题,就可以编译成功了。

PB的环境参数设置

PB的环境参数设置(深圳:独孤求败 2003-05-26)PowerBuilder是一个图形Client/Server应用程序开发工具,在Client/Server结构体系中,提供了同多种数据库连接与检索的前端能力,特别是PowerBuilder能从大多数RDBMS中存取数据,且不管数据存放在什么地方。

另外各种应用程序又可独立于RDBMS,开发者不仅能用它来建立用户容易使用的各种应用程序,而且PowerBuilder还允许开发者对数据库进行修改,并提供4 00多个内部定义函数,建立能和其它应用程序通信的各种应用程序。

对Power-Builder的性能调整与优化,可以帮助开发人员熟悉每个参数的含义,尽快掌握其使用方法。

性能调整与优化通常使用如下两种方式来进行:一是在PowerBar图标中使用Preferences画笔来进行优化,另一种方法是使用文本编辑文件对PB.INI文件进行编辑,修改各参数的值,存盘后再进入PowerBuilder 即可改变原系统的参数值。

常用参数及其含义如下表:PowerBuilder参数选择大多数PowerBuilder优先权变量适用于整个应用环境,只有字体变量在建立应用、库管理和帮助时有效变量描述默认值CompilerWarnings 1-显示编译脚本时的警告信息,0-不显示 1Dashesinidentitiers 0-在标识符中禁止使用虚线,1-允许使用(在减号前要有空格) 1 DatabaseWarnings 1-显示数据库警告信息,0-禁止显示 1FontBold 1-粗体字,0-细体字 0FontFixed 1-固定字体,0-可改变字体 0FontHeight 字体点数的高度 8FontName 字库中的字体名,比如Arial MS Sans GerifLayer PowerBuilder 窗口的显示层次,1-平辅,0-层叠Maximized 最大化显示PowerBuilder主窗口,1-满屏显示,0-自动保持上次的大小Object(n) 最近使用的四个目标,陈列在File下拉式菜单末尾PowerPanel 1-使用PowerBuilder模式,0-使用PowerBar模式 1Prompt onExit 1-在退出PowerPanel时显示确认框,0-不显示 0Shareini 共享.INI文件名,它通常用于网络和共享用户环境中StripComments 向DBMS发送语句时忽略注释语句,0-保留注释语句ToolbarFontHeight ToolBar(工具栏)文本的高度 6ToolbarFontName 想使用的字库中的字体名,比如Times Roman Small FontsUserHelpFile 编译后的帮助文件名(.HLP),在开发环境中用户按相关铵钮时,它能显示相应的帮助文本 .HLPUserHelpPrefix 开发环境中用户自定义的搜索关键字(K脚注)前缀标识符,其最末一个字符必须为下划线 Uf_Window 显示PowerBuilder窗口的大小和位置,对最近建立的窗口将自动定位应用画笔参数选择应用优先权变量改变相关应用的特定信息,通常使用应用画笔来进行设定,它也可用性能调整选项来进行设定变量描述Default Application name(AppName) 开始PowerBuilder会话时默认的应用名Application Library(AppLib) 默认应用所使用的库名Default Library(DefLib) 存储应用时的默认库名,除非你在存储时改变库名,在每一次存储应用时PowerBuilder都将提示你选择库名Library search path 在运行应用程序时,库的搜索路径,每一PowerBuilder应用名都含有一个库搜索路径数据库画笔参数选择改变数据库优先权变量等同于使用默认的数据库和特定的数据库画笔对变量的改变,它们的值依赖于所使用的数据库管理系统变量描述默认值AutoCommit FALSE-自动提交事务处理,TRUE-关闭自动提交事务处理 FALSEAutoQuote FALSE-在连接时打开标准可恢复事务进程,TRUE-关闭 FALSEColumns 当展开一个表或视图时所显示的列数,如果这个数值超过垂直滚动屏幕显示的数目使用卷屏来进行显示Database 当前连接的数据库名DatabasePassword 当前连接的数据库使用的口令DBMS 当前使用的数据库接口类型DbParm 从属的数据库名ForeignKeyLineColor 红绿蓝值表示使用外键符号和表之间连线的颜色 blue IndexKeyLineColor 红绿蓝(RGB)值表示使用索引键符号和表之间连线的颜色 red PrimaryKeyLineColor 红绿蓝(RGB)值表示使用主关键值索引符号和表之间连线的颜色 green Prompt 1-进行连接时提示相关数据库信息,0-关闭提示信息 0Lock 对数据库加锁LogId 数据库注册名LogPassword 数据库口令NoCatalog 目录存取,No-用户使用PowerBuilder第一次连接数据库时建立系统表;Yes-允许使用DDL和DML(CREATE、INSERT、DELETE)语句,如果系统表不存在,PowerBuilder不建立系统表。

PB编程常用API函数

PB编程常用API函数1. 如何使PB窗口总在最上层通过SetWindowPos函数吧窗口的显示层次修改为HWND_TOPMOST,就可以使指定窗口永远不会被其他窗口覆盖,该函数声明为:Function Long SetWindowPos(Long hwnd, Long ord, Long x, Long y, Long dx, Long dy, Long uflag) Library ―user32.dll‖参数1为要顶层显示的窗口句柄,参数2指定显示的层次,参数7为附加选项,其余参数指定窗口位置和大小,均可忽略。

在窗口的Open或Activate事件中加入如下函数调用:SetWindowPos(Handle(This),-1,0,0,0,0,3)参数2取-1表示在最顶层显示窗口,取1表示在最底层显示;最后一个参数若取1,表示窗口大小保持不变,取2表示保持位置不变,因此,取3(=1+2)表示大小和位置均保持不变,取0表示将窗口的大小和位置改变为指定值。

2. 在PB中如何获得光盘盘符通过GetDriveType函数可以获取驱动器(如:软驱、硬盘、光驱、网络映射驱动器等)的信息,该函数声明为:Function Unit GetDriveTypeA(String drive) Library ―kernel32.dll‖参数为一个盘符(如―C:‖),返回值:1表示未知,2表示软驱,3表示本地硬盘,4表示网络驱动器,5表示光驱。

因此如下代码可以获得光盘的盘符:For I=Asc(‗D‘) to Asc(‗Z‘)//列举所有可能的CDROM的驱动器If GetDriveTypeA(Char(i)+‖:‖) = 5 Then//若找到CDROMMessagebox(―CDROM‖,Char(i)+‖:‖)//显示光盘盘符Exit //退出循环End ifNext3. 在PB中如何获取目录信息(1)获取当前目录。

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

PB中对INI文件读写的补充函数我们在使用PB的INI函数读写INI文件时,有时也可能需要动态地删除某个节或者某个项,此函数即完成此功能。

$PBExportHeader$pfc_delprofilestring.srf$PBExportComments$Delete SECTION or KEY in INI fileglobal type pfc_delprofilestring from function_objectend typeforward prototypesglobal function integer pfc_delprofilestring (string as_file, string as_section, string as_key)end prototypesglobal function integer pfc_delprofilestring (string as_file, string as_section, string as_key);// Function: of_Delete// Arguments:// as_file The .ini file.// as_section The section name that the entry to be deleted is in.// as_key The key name of the entry that should be deleted from// the specified section.// (此参数为空值时删除整个节).// Returns: Integer// 1 success// 0 section does not exist, or key name does not exist// within specified section.// -1 file error// -2 if .INI file does not exist or has not been specified.//变量声明boolean lb_skiplineboolean lb_sectionfoundboolean lb_entryremovedinteger li_fileinteger li_rc = 1integer li_keylengthlong ll_lengthlong ll_firstlong ll_lastlong ll_posstring ls_linestring ls_sectionstring ls_tempstring ls_newfile// 判断指定的INI文件是否存在if not FileExists (as_file) thenreturn -2end if// 打开指定的INI文件ll_length = FileLength (as_file)li_file = FileOpen (as_file)if li_file = -1 then return li_file////////////////////////////////////////////////////////////////////////////// // 逐行读取INI文件并删除指定的节或者指定节中指定的项目// 原理:判断节和条目是否需要删除,如果需要删除,则跳过此行,// 否则,将此行保存到新文件字串变量中。

然后再写入新的// 字串替换原来INI文件中的数据。

////////////////////////////////////////////////////////////////////////////// li_keylength = Len (as_key)do while li_rc >= 0// 读取一行数据li_rc = FileRead (li_file, ls_line)if li_rc = -1 thenreturn -1end ifif as_key="" then// 未指定删除条目,删除整个节if li_rc >= 1 then//判断当前行是否为节ll_first = Pos (ls_line, "[")ll_last = Pos (ls_line, "]")if ll_first >0 and ll_last >0 then// 当前行为节,取节名ls_temp = Trim (ls_line)if Left (ls_temp, 1) = "[" thenll_pos = Pos (ls_temp, "]")ls_section = Mid (ls_temp, 2, ll_pos - 2)//判断当前节是否为需要删除的节if Lower (ls_section) = Lower (as_section) then// 此节全部删除,从当前行开始lb_sectionfound = truelb_skipline = trueelse// 当前行为节但不是指定的节名,指定的节已经删除lb_skipline = falseend ifend ifend ifend if// 添加行结束符ls_line = ls_line + "~013~010"// 创建新文件if li_rc >= 0 and not lb_skipline thenls_newfile=ls_newfile + ls_lineend ifelseif not lb_entryremoved then //指定的条目尚未删除if li_rc > 0 then //非回车或者换行符(即非空行)// 查找指定的节ll_first = Pos (ls_line, "[")ll_last = Pos (ls_line, "]")// 判断行是否为节if ll_first > 0 and ll_last > 0 then// 此行为节,取节名ls_temp = trim(ls_line)if Left (ls_temp, 1) = "[" thenll_pos = Pos (ls_temp, "]")ls_section = Mid (ls_temp, 2, ll_pos - 2)// 判断此节是否为要删除的节if Lower (ls_section) = Lower (as_section) then// 为需要删除的节lb_sectionfound = trueelse// 不是需要删除的节lb_sectionfound = falseend ifend ifelse// 当前行不为节if lb_sectionfound then// 已经查找到指定节,查找指定的条目ls_temp = Trim (ls_line)// 判断是否为需要删除的条目if Lower (Left (ls_temp, li_keylength)) = Lower (as_key) then// 此条目为需要删除的条目ls_temp = Trim (Mid (ls_temp, li_keylength + 1))if Char (ls_temp) = "=" then // 条目后第一个字符必定为“=”号// 删除条目lb_entryremoved = true//条目已经删除lb_skipline = trueend ifend ifend ifend ifend ifelse// 指定的条目已经删除,Skiplb_skipline = falseend if// 添加行结束符ls_line = ls_line + "~013~010"if li_rc >= 0 and not lb_skipline then//创建新文件(准备数据)ls_newfile=ls_newfile+ ls_lineend ifend ifloop// Close the input fileFileClose (li_file)// 没有找到指定的节或者指定的条目返回0if (not lb_sectionfound) thenreturn 0end ifif (not lb_entryremoved) and (as_key<>"") thenreturn 0end if//使用新的数据替换INI文件integer li_FileNo, li_writes, li_cntlong ll_StrLen, ll_currentposstring ls_Textli_FileNo = FileOpen(as_file, StreamMode!, Write!, LockReadWrite!, Replace!) If li_FileNo < 0 Then Return -1ll_StrLen = Len(ls_newfile)// 一次最多只能写入32765个字符If ll_StrLen > 32765 ThenIf Mod(ll_StrLen, 32765) = 0 Thenli_Writes = ll_StrLen / 32765Elseli_Writes = (ll_StrLen / 32765) + 1End ifElseli_Writes = 1End ifll_CurrentPos = 1For li_Cnt = 1 To li_Writesls_Text = Mid(ls_newfile, ll_CurrentPos, 32765)ll_CurrentPos += 32765If FileWrite(li_FileNo, ls_Text) = -1 ThenReturn -1End ifNextFileClose(li_FileNo)Return 1end function。

相关文档
最新文档