执行了ADO相关的语句之后浮点数精度变化?

m_halfman 2007-01-10 03:03:08
给一个double型变量赋值为一个常量,比如说8.07,这时用FormatFloat查看,他是有误差的,类似于8.07000000000000028这样。
但是,在执行了ADO相关的语句之后,比如说CreateOleObject('ADODB.connection')之后,就没有这个误差了。再给另一个变量同样赋值8.07,用FormatFloat查看,就是8.07,没有后面的尾数。
因为我们现在有另一个没有用到ADO的程序,这样就造成两边的结果不一致。怎样避免这个问题?最好是两边都是有误差的情况,因为另一个程序不能改。
...全文
193 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_halfman 2007-01-12
  • 打赏
  • 举报
回复
ADODataSet是有这个属性,但是我现在即使仅仅用了ADOConnection,也会出现我说的问题。而ADOConnection是没有这个属性的。
m_halfman 2007-01-11
  • 打赏
  • 举报
回复
我不是要把这两个数直接比较,而是要进行一些运算,把结果输出。因为运算中有幂运算,一点误差也会被放得很大。现在两个程序输出的结果确实是不一样的。
dctony 2007-01-11
  • 打赏
  • 举报
回复
ADODataSet/ADOQuery有个属性EnabledBCD
EnabledBCD=True时,数据集中的浮点数字段是TBCDField,数据类型是Currency
EnabledBCD=False时,数据集中的浮点数字段是TFloatField,数据类型是Double
查看ObjectPascal语法手册,可以看到Currency的精度比Double要高。
所以你可以把浮点数变量设为Currency类型试试,但是Currency对小数点后的位数有限制。
另外你还可以试一下Extended类型。
dctony 2007-01-10
  • 打赏
  • 举报
回复
那只是假象,浮点数肯定有尾差,两个浮点数比较应该是相减后与一个极小的数比较
function CompareFloat(xFirst, xLast: Double): Integer;
begin
if Abs(xFirst - xLast) < 0.00000001 then
Result := 0
else if xFirst > xLast then
Result := 1
else
Result := -1;
end;
第一天 我认为ASP.NET比ASP难很多,希望大家做好准备。难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个但是常用的语言多了一个C#,也是微软推荐的语言,为.NET平台定制的语言。这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,让大家对ASP.NET有一个全面的认识。虽然说学习ASP.NET不需要任何ASP基础,但是我觉得如果大家ASP不会,还是先看一下【十天学会ASP教程】,大家所需要了解的不是ASP的程序怎么写,而是怎么构建服务器,怎么使用HTML表单,同时对SQL语句有一个基础和理解,因为在本文里我不会将将一些基础的东西。 废话不多说,开始我们第一天的学习: 学习目的:调试出安装环境 我要申明一点,操作系统就用2000,如果说要学习一个网络语言还不肯多装一个操作系统的话,那我看也不要学习了。 先到网上下载一个MDAC(要是2.7以上的版本才行),然后安装,安装以后或许会重新启动一次。 然后再下载一个.NET FRAMEWORK SDK,安装以后会在控制面板里面的管理工具里面多两个东西,这个不用理睬他,我们要使用的还是原来的INTERNET服务管理器。打开它按照ASP教程里面的调试方法建立一个目录,建立一个EXAMPLE1.ASPX,然后用记事本打开这个文件在里面输入 <script language="c#" runat="server"> void Page_Load() { Response.Write("Hello World!"); } sub page_load() response.write("Hello World!") end sub 分割开,大家可以比较一下。2、我写教程的时候用的都是记事本来编写APS.NET大家也可以安装VS.NET来编写不过起步还是用记事本比较好,因为可以看的更加透彻一点。今天就说到这里,明天说一下C#的基本语法。 十天学会ASP.net(2) 作者:佚名 阅读人次:11611 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第二天 学习目的:掌握C#的基本知识 一、定义变量: string strExample; 字符串("aaa") char chrExample; 字符('a') bool blnExample; Bool型(true/false) DataTime datExample; 日期型("09/19/2002") int intExample; 整数(32位有符号整数) double dblExample; 浮点数(64位双精度浮点数) 二、各种运算: = 赋值运算 + 加法运算 - 减法运算 * 乘法运算 / 除法运算 % 取模运算 && 逻辑And || 逻辑Or ! 逻辑Not 三、各种结构: if(条件) { } else { } switch(条件) { case option1: break; case option2: break; } for(int i=1;i<=10;i++)//特别注意这里面是分号 { } while(条件) { } do { }while(条件); 四、注意事项: 1、用习惯VB的人很容易漏了语句末尾的分号; 2、用习惯VB的人很随便使用变量但是不申明,这在C#默认情况下是不允许的; 3、在向函数传递参数的时候要用圆括号:Response.Write "aa";是不允许的。 我说的这点几乎称不上是在说一种语言,一种语言的学习不仅仅需要学习语法,还需要学习语言特色,希望大家有空还是买一本C#的书来好好研究一下C#作为一种新的语言的特性吧。 十天学会ASP.net(2) 作者:佚名 阅读人次:11611 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第二天 学习目的:掌握C#的基本知识 一、定义变量: string strExample; 字符串("aaa") char chrExample; 字符('a') bool blnExample; Bool型(true/false) DataTime datExample; 日期型("09/19/2002") int intExample; 整数(32位有符号整数) double dblExample; 浮点数(64位双精度浮点数) 二、各种运算: = 赋值运算 + 加法运算 - 减法运算 * 乘法运算 / 除法运算 % 取模运算 && 逻辑And || 逻辑Or ! 逻辑Not 三、各种结构: if(条件) { } else { } switch(条件) { case option1: break; case option2: break; } for(int i=1;i<=10;i++)//特别注意这里面是分号 { } while(条件) { } do { }while(条件); 四、注意事项: 1、用习惯VB的人很容易漏了语句末尾的分号; 2、用习惯VB的人很随便使用变量但是不申明,这在C#默认情况下是不允许的; 3、在向函数传递参数的时候要用圆括号:Response.Write "aa";是不允许的。 我说的这点几乎称不上是在说一种语言,一种语言的学习不仅仅需要学习语法,还需要学习语言特色,希望大家有空还是买一本C#的书来好好研究一下C#作为一种新的语言的特性吧。 十天学会ASP.net(4) 作者:佚名 阅读人次:8772 文章来源:未知 发布时间:2005-6-24 网友评论(7)条 第四天 学习目的:掌握WEB控件的使用(二) 首先我要说明,我这十天教程也只是一个让大家对ASP.NET有一个认识而已,我也跳过了很多东西。网上有很多人在责骂我写的教程,认为十天什么都学不会,看了我的教程还是什么都不会,我想他们或许是过高估计了我的教程。外面有很多书,关于ASP和ASP.NET的,我就是看外面的书学会的。我所要做的就是希望大家能看了我的教程以后觉得ASP和ASP.NET不是学不会的东西然后有信心去学会它。我想学习还是靠自己的,外面每一本书也有自己写的不周到的地方,关键还需要自己的实践加上探索。 首先来说一下表单的验证控件,以前我们做表单验证,如果是客户端的JAVASCRIPT,不能做到美观统一,而且还可以通过直接在浏览器起教表单来屏蔽;如果我们做服务器端验证,又会发现让检验结果在前台反映也是很麻烦的事情。现在好了,ASP.NET提供的很多检验控件让我们不需要考虑是客户端检验还是服务器端检验,让我们不需要考虑是怎么输出检验结果。 看一下检验表单控件是不是填写了的检验控件先: controltovalidate就是你想检验的控件的ID;默认情况下不显示错误消息,地方也会被保留,如果使用了display="dynamic" 那么不显示错误消息的地方不会被空出; forecolor="#ff0000" font-name="宋体" font-size="9pt" 就是设定错误消息字体的颜色,字体,大小的;text="请填写" 就是当没有填写内容时候显示的错误消息;别忘记最后的runat="server"。现在这个检验控件是放在了textbox的后面,那么错误消息也在textbox后面显示,也可以放在其他地方。 再看一下比较表单控件的数据与另外一个数据的检验控件: 这里是第一个需要用户填写的密码框 我们经常会再设立一个密码框让用户再填写一次: controltocompare="password1" 就是需要比较的控件;operator="equal" 就是设定比较操作是:是否相等(还有NotEqual:不相等,LessThan:少于,GreaterThan:大于,当不符合这个比较操作的时候显示错误消息)。 以前说到BUTTON控件CausesValidation=true/false来设置按钮提交的表单是不是被检验也就是这里的几个检验控件,如果CausesValidation=true的话按下按钮就会首先检测是不是都通过了检验控件的检验。 下面再说两点: 一、每一个可以显示的控件都有是不是显示的属性,比如username.Visible=false;就是隐藏了前面的username控件;还有就是如果要对控件应用CSS的话就这么写:cssclass="",而不是以前HTML中的class=""。 二、所有WEB控件都要包含在
中,否则就会出错。 今天就到此结束,请继续往后面看,下次开始就要说ADO.NET了。 十天学会ASP.net(5) 作者:佚名 阅读人次:8013 文章来源:未知 发布时间:2005-6-24 网友评论(6)条 第五天 学习目的:学会连接两种数据库 对于ASP来说,我们常用的数据库无非是ACCESS和SQL SERVER,对于ASP.NET也是,不过ASP.NET对于SQL SERVER有专门的连接组件而不推荐用OLE DB。 首先看一下ACCESS的连接数据库并打开; string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath("*.mdb"); //*就是数据库的名字 OleDbConnection objConnection=new OleDbConnection(strConnection); objConnection.Open(); ________________________________________ dim objConnection as OleDbConnection objConnection=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("*.mdb")) objConnection.Open() 下面再看一下SQL SERVER的连接数据库并打开; string strConnection="server=数据库连接;uid=用户名;pwd=密码;database=数据库名字"; SqlConnediob objConnection=new SqlCOnnection(strConnection); objConnection.Open(); ________________________________________ dim objConnection as SqlConnectiom objConnection=new SqlConnection("server=数据库连接;uid=用户名;pwd=密码;database=数据库名字") objConnection.Open() 实际上,在大多数地方SQL SERVER和ACCESS的区别除了连接语句,其他定义语句也就是SQL××和OLEDB××的区别 另外,如果是ACCESS数据库的话在ASPX文件的开头需要包括下列语句: <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> 如果是SQL SERVER则需要包括以下语句: <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.SqlClient"%> 今天就说到这里,明天开始讲数据库的读取。 十天学会ASP.net(6) 作者:佚名 阅读人次:7634 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第六天 学习目的:学会读取数据库 有的网友说,不会C#,在ASP.NET里面还是选择VB.NET,这个我不反对,但是我觉得既然是学习新的东西,就不要在意有多少是新的。实际上C#就一般的操作来说,只是区分大小写和多了一个分号这两点与VB.NET不同其他都差不多啊。在ASP里面我们读取数据就直接用RECORDSET,然后在HTML代码里面穿插<%= %>就可以显示了,但是ASP.NET讲究的是代码分离,如果还是这样显示数据就不能代码分离了。所以我们有两种方法:如果是读取一条记录的数据或者不多的数据,我们用DATAREADER采集数据,然后赋值给LABEL控件的Text属性即可;如果是读取大量数据我们就采用DATAGRID。 今天我们就来说一下DATAREADER: string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath(strDb); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand = new OleDbCommand("这里是SQL语句" , objConnection); objConnection.Open(); OleDbDataReader objDataReader=objCommand.ExecuteReader(); if(objDataReader.Read()) { oicq.Text=Convert.ToString(objDataReader["useroicq"]); homesite.Text=Convert.ToString(objDataReader["usersite"]); face.SelectedItem.Text=Convert.ToString(objDataReader["userface"]); } 大家可以看到我们首先是连接数据库然后打开,对于select的命令,我们申明一个OleDbCommand来执行之,然后再申明一个OleDbDataReader,来读取数据,用的是ExecuteReader(),objDataReader.Read()就开始读取了,在输出的时候我们要注意Text属性接受的只能是字符串,所以我们要把读出的数据都转化为字符串才行。 转换变量类型函数: 转换为字符串:Convert.ToString() 转换为数字:Convert.ToInt64(),Convert.ToInt32(),Convert.ToInt16() 是按照数字位数由长到短 转换为日期:Convert.ToDateTime() ________________________________________ dim objConnection as OleDbConnection dim objCommand as OleDbCommand dim objDataReader as OleDbDataReader objConnection=new OleDbConnection(Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath(strDb)) objCommand=new OleDbCommand("这里是SQL语句" , objConnection) objConnection.Open() objDataReader=objCommand.ExecuteReader() if objDataReader.Read() oicq.Text=Convert.ToString(objDataReader["useroicq"]) homesite.Text=Convert.ToString(objDataReader["usersite"]) face.SelectedItem.Text=Convert.ToString(objDataReader["userface"]) end if 其实大家比较一下C#和VB的语法,会发觉用C#似乎更加简单,教程里面我侧重C#,对于VB的代码我就不解释了。 下面说一下如果代码是读取SQL数据库,我们这样来转变 1、把代码开始的 <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> 修改为 <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.SqlClient"%> 2、把代码里面所有申明的对象OleDb××变为Sql××就这么简单 你甚至可以用替换所有来解决,所以今后我讲不再列出Sql Server的代码了。 今天就说到这里,明天开始说数据的添加、删除、修改。 十天学会ASP.net(7) 作者:佚名 阅读人次:6818 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第七天 学习目的:学会添加删除修改记录 以前我们在ASP中不管是添加还是删除记录或者用SQL语句加上EXECUTE()或者就是直接用RECORDSET的NEW、DELETE、UPDATE等方法来添加删除修改记录。在ASP.NET里面我们采用SQL语句加上COMMAND对象来执行SQL语句的方法来添加删除修改记录。这比上次说的读取记录还简单。实际上只有一点区别,把ExecuteReader()修改为ExecuteNonQuery()即可,因为我们不需要返回值啊。 string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath(strDb); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand = new OleDbCommand("这里是SQL语句" , objConnection); objConnection.Open(); OleDbDataReader objDataReader=objCommand.ExecuteNonQuery(); ________________________________________ dim objConnection as OleDbConnection dim objCommand as OleDbCommand objConnection=new OleDbConnection(Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath(strDb)) objCommand=new OleDbCommand("这里是SQL语句" , objConnection) objConnection.Open() objDataReader=objCommand.ExecuteNoQuery() 下面再举例子说明一下SQL语句(ACCESS): 添加记录: insert int o 表名 (字段1,字段2) values (字符串1,字符串2) where 条件 删除记录: delete from 表名 where 条件 修改记录: update 表名 set 字段1=××,字段2=×× where 条件 需要特别注意,如果是Sql Server删除记录是delete 表名,不需要再加from了。 今天就说到这里了,明天说ASP.NET里面最著名的DATAGRID。 十天学会ASP.net(8) 作者:佚名 阅读人次:6674 文章来源:未知 发布时间:2005-6-24 网友评论(7)条 第八天 学习目的:初步掌握DATAGRID的使用 以前在ASP中,我们显示大批量数据经常使用循环读取记录集的方式,在表格中插入代码来显示,循环的是,如果是分页还需要自己制作,如果排序更加复杂,在ASP.NET中就好了,一切工作都可以让DATAGRID来做。 首先看一下DATAGRID的样式方面的属性 BackImageUrl="" 背景图片 CellSpacing="" 单元格间距 CellPadding="" 单元格填充 cssClass="" 使用的CSS样式 DATAGRID可以自动用表中的字段名放在显示的记录的头部来表示各个单元格所代表的意义,用ShowHeader="true/false"来控制是不是显示,在大多数情况下我们是不需要这个功能的,因为我们数据库中的字段名大多是英文的,而我们想在页面输出的大多是中文名字。 下面看一下显示数据库内所有记录,就几行代码: <script runat="server" language="c#"> void Page_Load() { string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath("guestbook.mdb"); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand1 = new OleDbCommand("select * from guestbook",objConnection); objConnection.Open(); dgrdMain.DataSource=objCommand1.ExecuteReader();//dgrdMain就是下面的DATAGRID的ID dgrdMain.DataBind(); objConnection.Close(); } 至于VB的版本,这次大家自己来试试吧:) 假设数据库是三个字段:id,aa,bb 显示的样子就如下: id aa bb 1 werwe rewrwe 2 werwe rewrwe 我们一定觉得这种显示不满意,我们有两种显示的方式(需要包括在中间): 一、默认的列,我们可以选择不输出所有的字段还可以安排顺序: 比如说我们想按照bb,aa来输出这个表,我们这么写 注意使用了autogeneratecolumns="false"以后DATAGRID就不会自动输出所有字段了。 二、以模板列,我们可以定制每一个单元格的样式: 中间是一个表格,想怎么样就怎么样 或许你们要说怎么在表格中输出代码那,可以使用<%# DataBinder.Eval(Container.DataItem,"字段名").ToString()%> 下面看一个例子,我们所要做的就是把aa,bb两个字段放在一个单元格内显示,就好像下面一样: 1 werwe rewrwe 2 werwe rewrwe 我们这样写代码: 首先使用默认的显示方式显示ID 再使用模板来显示后面一列(由AA,BB并列组成)
<%# Container.DataItem("aa")%>
<%# Container.DataItem("bb")%>
今天就说到这里,明天我们来看一下DATAGRID的分页显示等功能 十天学会ASP.net(9) 作者:佚名 阅读人次:5514 文章来源:未知 发布时间:2005-6-24 网友评论(7)条 第九天 学习目的:学会用DATAGRID分页显示 虽然说DATAGRID的分页显示效率不怎么高,但是不管怎么说,它是最方便的分页显示,对于做一个留言簿还是相当简单实用的。对于启用分页功能还有一个重要要求,只能在DATADRID控件的数据源实现了ICOLLECTION接口的情况下才能启用分页功能,而DATAREADER没有这个接口,所以必须使用DATATABLE来代替。 <script runat="server" language="c#"> void Page_Load() { string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath("guestbook.mdb"); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbDataAdapter objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection); DataSet objDataSet=new DataSet(); objDataAdapter.Fill(objDataSet); dgrdMain.DataSource=objDataSet; dgrdMain.DataBind(); } void dgrdMain_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e) { dgrdMain.CurrentPageIndex = e.NewPageIndex; DataBind(); } ________________________________________ <script runat="server" language="vb"> subPage_Load dim objConnection as OleDbConnection dim objDataAdapter as OleDbDataAdapter dim objDataSet as DataSet objConnection=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("guestbook.mdb")) objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection) objDataSet=new DataSet objDataAdapter.Fill(objDataSet) dgrdMain.DataSource=objDataSet dgrdMain.DataBind() end sub sub dgrdMain_PageIndexChanged(sender as object,e as datagridpagechangedeventargs) dgrdMain.CurrentPageIndex = e.NewPageIndex DataBind end sub 这样就是最简单的分页,我们可以用参数pagestyle-mode="nextprev/numericpages"来设定是显示上一页、下一页方式还是直接选择页面的数字方式来实现页面跳转。如果是前者我们可以用pagestyle-nextpagetext来设定包含下一页链接的文本,用pagestyle-prevpagetext来设定包含上一页链接的文本;如果是后者我们可以用PagerStyle-PageButtonCount来设定在使用省略号之前显示的页面编号数量(默认是10) 今天就说到这里,明天说一下SESSION和COOKIE。 十天学会ASP.net(10) 作者:佚名 阅读人次:5305 文章来源:未知 发布时间:2005-6-24 网友评论(8)条 第十天 学习目的:学会SESSION和COOKIE的使用 在各个网页间的变量传递和一些记录用户的登陆信息要用到SESSION和COOKIE。在ASP.NET中使用COOKIE比ASP中稍微麻烦一点,因为我们要申明变量。 首先看一下SESSION的使用,基本和ASP差不多 写入一个SESSION: Session["username"])="aa"; ________________________________________ Session("username")="aa" 读取一个SESSINN: string username= Session["username"]; ________________________________________ dim username=Session("username") 再来看一下COOKIE的写入: DateTime dt=DateTime.Now; //需要<%@Import Namespace="System"%>,得到当前时间 HttpCookie mycookie=new HttpCookie("logname");//申明新的COOKIE变量 mycookie.Value="aa";//赋值 mycookie.Expires=Convert.ToDateTime(dt+TimeSpan.FromDays(1));//设定过期时间为1天 Response.Cookies.Add(mycookie1);//写入COOKIE ________________________________________ dim dt as DateTime dt=DataTime.Now dim mycookie as HttpCookie mycookie=new HttpCookie("logname") mycookie.Value="aa" mycookie.Expires=Convert.ToDateTime(dt+TimeSpan.FromDays(1)) Response.Cookies.Add(mycookie1) 看一下COOKIE的读取: HttpCookie mycookie=Request.Cookies["username"]; string username=mycookie.Value; ________________________________________ dim mycookie as HttpCookie mycookie=Request.Cookies["username"] dim string=mycookie.Value 到此《十天学会ASP.NET》结束了
第1章 文本 1 引言 1 1.1 每次处理一个字符 6 1.2 字符和字符值之间的转换 7 1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的translate方法的使用 18 1.10 过滤字符串中不属于指定集合的字符 20 1.11 检查一个字符串是文本还是二进制 23 1.12 控制大小写 25 1.13 访问子字符串 26 1.14 改变多行文本字符串的缩进 29 1.15 扩展和压缩制表符 31 1.16 替换字符串中的子串 33 1.17 替换字符串中的子串-Python 2.4 34 1.18 一次完成多个替换 36 1.19 检查字符串中的结束标记 39 1.20 使用Unicode来处理国际化文本 40 1.21 在Unicode和普通字符串之间转换 43 1.22 在标准输出中打印Unicode字符 45 1.23 对Unicode数据编码并用于XML和HTML 46 1.24 让某些字符串大小写不敏感 49 1.25 将HTML文档转化为文本显示到UNIX终端上 52 第2章 文件 55 引言 55 2.1 读取文件 59 2.2 写入文件 62 2.3 搜索和替换文件中的文本 64 2.4 从文件中读取指定的行 65 2.5 计算文件的行数 66 2.6 处理文件中的每个词 68 2.7 随机输入/输出 70 2.8 更新随机存取文件 71 2.9 从zip文件中读取数据 73 2.10 处理字符串中的zip文件 74 2.11 将文件树归档到一个压缩的tar文件 76 2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 2.18 从指定的搜索路径寻找文件 86 2.19 根据指定的搜索路径和模式寻找文件 87 2.20 在Python的搜索路径中寻找文件 88 2.21 动态地改变Python搜索路径 89 2.22 计算目录间的相对路径 91 2.23 跨平台地读取无缓存的字符 93 2.24 在Mac OS X平台上统计PDF文档的页数 94 2.25 在Windows平台上修改文件属性 95 2.26 从OpenOffice.org文档中提取文本 96 2.27 从微软Word文档中抽取文本 97 2.28 使用跨平台的文件锁 98 2.29 带版本号的文件名 100 2.30 计算CRC-64循环冗余码校验 102 第3章 时间和财务计算 105 引言 105 3.1 计算昨天和明天的日期 111 3.2 寻找上一个星期五 112 3.3 计算日期之间的时段 114 3.4 计算歌曲的总播放时间 115 3.5 计算日期之间的工作日 116 3.6 自动查询节日 118 3.7 日期的模糊查询 121 3.8 检查夏令时是否正在实行 123 3.9 时区转换 124 3.10 反复执行某个命令 125 3.11 定时执行命令 127 3.12 十进制数学计算 129 3.13 将十进制数用于货币处理 130 3.14 用Python实现的简单加法器 133 3.15 检查信用卡校验和 136 3.16 查看汇率 137 第4章 Python技巧 139 引言 139 4.1 对象拷贝 140 4.2 通过列表推导构建列表 144 4.3 若列表中某元素存在则返回之 146 4.4 循环访问序列中的元素和索引 147 4.5 在无须共享引用的条件下创建列表的列表 148 4.6 展开一个嵌套的序列 149 4.7 在行列表中完成对列的删除和排序 152 4.8 二维阵列变换 154 4.9 从字典中取值 155 4.10 给字典增加一个条目 157 4.11 在无须过多援引的情况下创建字典 158 4.12 将列表元素交替地作为键和值来创建字典 159 4.13 获取字典的一个子集 161 4.14 反转字典 163 4.15 字典的一键多值 164 4.16 用字典分派方法和函数 166 4.17 字典的并集与交集 167 4.18 搜集命名的子项 169 4.19 用一条语句完成赋值和测试 171 4.20 在Python中使用printf 174 4.21 以指定的概率获取元素 174 4.22 在表达式中处理异常 176 4.23 确保名字已经在给定模块中被定义 178 第5章 搜索和排序 180 引言 180 5.1 对字典排序 185 5.2 不区分大小写对字符串列表排序 185 5.3 根据对象的属性将对象列表排序 187 5.4 根据对应值将键或索引排序 189 5.5 根据内嵌的数字将字符串排序 192 5.6 以随机顺序处理列表的元素 193 5.7 在增加元素时保持序列的顺序 195 5.8 获取序列中最小的几个元素 197 5.9 在排序完毕的序列中寻找元素 199 5.10 选取序列中最小的第n个元素 200 5.11 三行代码的快速排序 203 5.12 检查序列的成员 206 5.13 寻找子序列 208 5.14 给字典类型增加排名功能 210 5.15 根据姓的首字母将人名排序和分组 214 第6章 面向对象编程 217 引言 217 6.1 温标的转换 223 6.2 定义常量 225 6.3 限制属性的设置 227 6.4 链式字典查询 229 6.5 继承的替代方案-自动托管 231 6.6 在代理中托管特殊方法 234 6.7 有命名子项的元组 237 6.8 避免属性读写的冗余代码 239 6.9 快速复制对象 240 6.10 保留对被绑定方法的引用且支持垃圾回收 243 6.11 缓存环的实现 245 6.12 检查一个实例的状态变化 249 6.13 检查一个对象是否包含某种必要的属性 252 6.14 实现状态设计模式 255 6.15 实现单例模式 257 6.16 用Borg惯用法来避免“单例”模式 259 6.17 Null对象设计模式的实现 263 6.18 用_ _init_ _参数自动初始化实例变量 266 6.19 调用超类的_ _init_ _方法 267 6.20 精确和安全地使用协作的超类调用 270 第7章 持久化和数据库 273 引言 273 7.1 使用marshal模块序列化数据 275 7.2 使用pickle和cPickle模块序列化数据 277 7.3 在Pickling的时候压缩 280 7.4 对类和实例使用cPickle模块 281 7.5 Pickling被绑定方法 284 7.6 Pickling代码对象 286 7.7 通过shelve修改对象 288 7.8 使用Berkeley DB数据库 291 7.9 访问MySQL数据库 294 7.10 在MySQL数据库中储存BLOB 295 7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API模块的单参数传递风格 306 7.17 通过ADO使用Microsoft Jet 308 7.18 从Jython Servlet访问JDBC数据库 310 7.19 通过Jython和ODBC获得Excel数据 313 第8章 调试和测试 315 引言 315 8.1 阻止某些条件和循环的执行 316 8.2 在Linux上测量内存使用 317 8.3 调试垃圾回收进程 318 8.4 捕获和记录异常 320 8.5 在调试模式中跟踪表达式和注释 322 8.6 从traceback中获得更多信息 324 8.7 当未捕获异常发生时自动启用调试器 327 8.8 简单的使用单元测试 328 8.9 自动运行单元测试 330 8.10 在Python 2.4中使用doctest和unittest 331 8.11 在单元测试中检查区间 334 第9章 进程、线程和同步 336 引言 336 9.1 同步对象中的所有方法 339 9.2 终止线程 342 9.3 将Queue.Queue用作优先级队列 344 9.4 使用线程池 346 9.5 以多组参数并行执行函数 349 9.6 用简单的消息传递协调线程 351 9.7 储存线程信息 353 9.8 无线程的多任务协作 357 9.9 在Windows中探测另一个脚本实例的运行 359 9.10 使用MsgWaitForMultipleObjects处理Windows消息 360 9.11 用popen驱动外部进程 363 9.12 获取UNIX Shell命令的输出流和错误流 364 9.13 在UNIX中fork一个守护进程 367 第10章 系统管理 370 引言 370 10.1 生成随机密码 371 10.2 生成易记的伪随机密码 372 10.3 以POP服务器的方式验证用户 375 10.4 统计Apache中每个IP的点击率 376 10.5 统计Apache的客户缓存的命中率 378 10.6 在脚本中调用编辑器 379 10.7 备份文件 381 10.8 选择性地复制邮箱文件 383 10.9 通过邮箱创建一个邮件地址的白名单 384 10.10 阻塞重复邮件 386 10.11 检查你的Windows声音系统 388 10.12 在Windows中注册和反注册DLL 388 10.13 检查并修改Windows自动运行任务 390 10.14 在Windows中创建共享 391 10.15 连接一个正在运行的Internet Explorer实例 392 10.16 读取Microsoft Outlook Contacts 393 10.17 在Mac OS X中收集详细的系统信息 396 第11章 用户界面 400 引言 400 11.1 在文本控制台中显示进度条 402 11.2 避免在编写回调函数时使用lambda 404 11.3 在tkSimpleDialog函数中使用默认值和区间 405 11.4 给Tkinter列表框增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在Tkinter中实现一个秒表 415 11.9 用线程实现GUI和异步I/O 的结合 417 11.10 在Tkinter中使用IDLE的 Tree部件 421 11.11 在Tkinter Listbox中支持单行多值 423 11.12 在Tkinter部件之间复制Geometry方法和选项 427 11.13 在Tkinter中实现一个带标签的记事本 429 11.14 使用wxPython实现带面板的记事本 431 11.15 在Jython中实现一个ImageJ插件 433 11.16 用Swing和Jython来通过URL查看图片 434 11.17 在Mac OS中获得用户输入 434 11.18 程序化地创建Python Cocoa GUI 437 11.19 用IronPython实现淡入窗口 439 第12章 XML处理 441 引言 441 12.1 检查XML的格式完好性 443 12.2 计算文档中标签的个数 444 12.3 获得XML文档中的文本 445 12.4 自动探测XML的编码 447 12.5 将一个XML文档转化成Python对象树 449 12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 12.10 用SAX合并连续的文本事件 458 12.11 使用MSHTML来解析XML或HTML 461 第13章 网络编程 462 引言 462 13.1 通过Socket数据报传输消息 464 13.2 从Web抓取文档 466 13.3 过滤FTP站点列表 467 13.4 通过SNTP协议从服务器获取时间 468 13.5 发送HTML邮件 469 13.6 在MIME消息中绑入文件 471 13.7 拆解一个分段MIME消息 474 13.8 删除邮件消息中的附件 475 13.9 修复Python 2.4的email.FeedParser 解析的消息 477 13.10 交互式地检查POP3邮箱 479 13.11 探测不活动的计算机 482 13.12 用HTTP监视网络 487 13.13 网络端口的转发和重定向 489 13.14 通过代理建立SSL隧道 492 13.15 实现动态IP协议 495 13.16 登录到IRC并将消息记录到磁盘 498 13.17 访问LDAP服务 500 第14章 Web编程 502 引言 502 14.1 测试CGI是否在工作 503 14.2 用CGI脚本处理URL 506 14.3 用CGI上传文件 507 14.4 检查web页面的存在 509 14.5 通过HTTP检查内容类型 510 14.6 续传HTTP下载文件 512 14.7 抓取Web页面时处理Cookie 513 14.8 通过带身份验证的代理进行HTTPS导航 516 14.9 用Jython实现Servlet 517 14.10 寻找Internet Explorer的cookie 519 14.11 生成OPML文件 521 14.12 聚合RSS Feed 524 14.13 通过模板将数据放入Web页面 527 14.14 在Nevow中呈现任意对象 530 第15章 分布式编程 534 引言 534 15.1 实现一个XML-RPC方法调用 536 15.2 服务XML-RPC请求 537 15.3 在Medusa中使用XML-RPC 539 15.4 允许XML-RPC服务被远程终止 541 15.5 SimpleXMLRPCServer的一些细节 542 15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 通过HTTPS验证一个SSL客户端 557 第16章 关于程序的程序 559 引言 559 16.1 验证字符串是否代表着一个合法的数字 564 16.2 导入一个动态生成的模块 565 16.3 导入一个名字在运行时被确定的模块 567 16.4 将参数和函数联系起来 568 16.5 组合函数 571 16.6 使用内建的Tokenizer给Python源码上色 572 16.7 合并和拆解Token 575 16.8 检查字符串是否有平衡的圆括号 577 16.9 在Python中模拟枚举 580 16.10 在创建列表推导时引用它自身 583 16.11 自动化py2exe将脚本编译成Windows可执行文件的过程 585 16.12 在UNIX中将主脚本和模块绑成一个可执行文件 587 第17章 扩展和嵌入 590 引言 590 17.1 实现一个简单的扩展类型 592 17.2 用Pyrex实现一个简单的扩展类型 597 17.3 在Python中使用C++库 598 17.4 调用Windows DLL的函数 601 17.5 在多线程环境中使用SWIG生成的模块 603 17.6 用PySequence_Fast将Python序列转为 C数组 604 17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 18.2 在保留序列顺序的前提下消除其中的重复 621 18.3 生成回置采样 625 18.4 生成无回置的抽样 626 18.5 缓存函数的返回值 627 18.6 实现一个FIFO容器 629 18.7 使用FIFO策略来缓存对象 631 18.8 实现一个Bag(Multiset)收集类型 634 18.9 在Python模拟三元操作符 637 18.10 计算素数 640 18.11 将整数格式化为二进制字符串 642 18.12 以任意数为基将整数格式化为字符串 644 18.13 通过法雷分数将数字转成有理数 646 18.14 带误差传递的数学计算 648 18.15 以最大精度求和 651 18.16 模拟浮点数 653 18.17 计算二维点集的凸包和直径 656 第19章 迭代器和生成器 660 引言 660 19.1 编写一个类似range的浮点数递增的函数 663 19.2 从任意可迭代对象创建列表 665 19.3 生成Fibonacci序列 667 19.4 在多重赋值中拆解部分项 669 19.5 自动拆解出需要的数目的项 670 19.6 以步长n将一个可迭代对象切成n片 672 19.7 通过重叠窗口循环序列 674 19.8 并行地循环多个可迭代对象 678 19.9 循环多个可迭代对象的矢量积 680 19.10 逐段读取文本文件 683 19.11 读取带有延续符的行 685 19.12 将一个数据块流处理成行流 687 19.13 用生成器从数据库中抓取大记录集 688 19.14 合并有序序列 690 19.15 生成排列、组合以及选择 694 19.16 生成整数的划分 696 19.17 复制迭代器 697 19.18 迭代器的前瞻 701 19.19 简化队列消费者线程 703 19.20 在另一个线程中运行迭代器 705 19.21 用itertools.groupby来计算汇总报告 706 第20章 描述符、装饰器和元类 710 引言 710 20.1 在函数调用中获得常新的默认值 712 20.2 用嵌套函数来编写property属性 715 20.3 给属性值起别名 717 20.4 缓存属性值 719 20.5 用同一个方法访问多个属性 722 20.6 封装一个方法来给类增加功能 723 20.7 增强所有方法来给类增加功能 726 20.8 在运行时给一个类实例添加方法 728 20.9 检查接口的实现 730 20.10 在自定义元类中正确地使用_ _new_ _和_ _init_ _ 732 20.11 允许对List的可变方法的链式调用 734 20.12 通过更紧凑的语法使用协作的超类调用 736 20.13 不使用_ _init_ _来初始化实例属性 738 20.14 实例属性的自动初始化 740 20.15 重新加载时自动更新类实例 743 20.16 在编译时绑定常量 747 20.17 解决元类冲突 752

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧