当前位置: 首页 > 编程日记 > 正文

sed学习系列---第3/3部分

为什么80%的码农都做不了架构师?>>>   hot3.png

---简介

    在这篇 sed 系列的总结性文章中,Daniel Robbins 带您体验 sed 的真正力量。在介绍完几个重要的 sed 脚本之后,他将通过将一个 Quicken .QIF 文件转换成可读文本格式来演示一些基本 sed 脚本的编写。该转换脚本不仅实用,而且还是展现 sed 脚本编写能力的极佳示例。

---强健的 sed

在 第二篇 sed 文章中,我提供了一些示例来演示 sed 的工作原理,但是它们当中很少有示例能实际做特别 有用的事。在这篇 sed 系列的最后文章中,我要改变那种方式,并使用 sed 来做实际的事。我将为您显示几个示例,它们不仅演示 sed 的能力,而且还做一些真正巧妙(和方便)的事。例如,在本文的后半部,将为您演示如何设计一个 sed 脚本来将 .QIF 文件从 Intuit 的 Quicken 金融程序转换成具有良好格式的文本文件。在那样做之前,我们将看一下不怎么复杂但却很有用的 sed 脚本。


---文本转换

第一个实际脚本将 UNIX 风格的文本转换成 DOS/Windows 格式。您可能知道,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个换行。有时可能需要将某些 UNIX 文本移至 Windows 系统,该脚本将为您执行必需的格式转换。

$ sed -e 's/$/\r/' myunix.txt > mydos.txt

在该脚本中,'$' 规则表达式将与行的末尾匹配,而 '\r' 告诉 sed 在其之前插入一个回车。在换行之前插入回车,立即,每一行就以 CR/LF 结束。请注意,仅当使用 GNU sed 3.02.80 或以后的版本时,才会用 CR 替换 '\r'。如果还没有安装 GNU sed 3.02.80,请在我的 第一篇 sed 文章中查看如何这样做的说明。

我已记不清有多少次在下载一些示例脚本或 C 代码之后,却发现它是 DOS/Windows 格式。虽然很多程序不在乎 DOS/Windows 格式的 CR/LF 文本文件,但是有几个程序却在乎 -- 最著名的是 bash,只要一遇到回车,它就会出问题。以下 sed 调用将把 DOS/Windows 格式的文本转换成可信赖的 UNIX 格式:

$ sed -e 's/.$//' mydos.txt > myunix.txt

该脚本的工作原理很简单:替代规则表达式与一行的最末字符匹配,而该字符恰好就是回车。我们用空字符替换它,从而将其从输出中彻底删除。如果使用该脚本并注意到已经删除了输出中每行的最末字符,那么,您就指定了已经是 UNIX 格式的文本文件。也就没必要那样做了!


---反转行

下面是另一个方便的小脚本。与大多数 Linux 发行版中包括的 "tac" 命令一样,该脚本将反转文件中行的次序。"tac" 这个名称可能会给人以误导,因为 "tac" 不反转行中字符的位置(左和右),而是反转文件中行的位置(上和下)。用 "tac" 处理以下文件:

foo 
bar
oni

....将产生以下输出:

oni
bar
foo

可以用以下 sed 脚本达到相同目的:

$ sed -e '1!G;h;$!d' forward.txt > backward.txt

如果登录到恰巧没有 "tac" 命令的 FreeBSD 系统,将发现该 sed 脚本很有用。虽然方便,但最好还是知道该脚本为什么那样做。让我们对它进行讨论。


---反转解释

首先,该脚本包含三个由分号隔开的单独 sed 命令:'1!G'、'h' 和 '$!d'。现在,需要好好理解用于第一个和第三个命令的地址。如果第一个命令是 '1G',则 'G' 命令将只应用第一行。然而,还有一个 '!' 字符 -- 该 '!' 字符 忽略该地址,即,'G' 命令将应用到除第一行之外的 所有行。'$!d' 命令与之类似。如果命令是 '$d',则将只把 'd' 命令应用到文件中的最后一行('$' 地址是指定最后一行的简单方式)。然而,有了 '!' 之后,'$!d' 将把 'd' 命令应用到除最后一行之外的 所有行。现在,我们所要理解的是这些命令本身做什么。

当对上面的文本文件执行反转脚本时,首先执行的命令是 'h'。该命令告诉 sed 将模式空间(保存正在处理的当前行的缓冲区)的内容复制到保留空间(临时缓冲区)。然后,执行 'd' 命令,该命令从模式空间中删除 "foo",以便在对这一行执行完所有命令之后不打印它。

现在,第二行。在将 "bar" 读入模式空间之后,执行 'G' 命令,该命令将保留空间的内容 ("foo\n") 附加到模式空间 ("bar\n"),使模式空间的内容为 "bar\n\foo\n"。'h' 命令将该内容放回保留空间保护起来,然后,'d' 从模式空间删除该行,以便不打印它。

对于最后的 "oni" 行,除了不删除模式空间的内容(由于 'd' 之前的 '$!')以及将模式空间的内容(三行)打印到标准输出之外,重复同样的步骤。

现在,要用 sed 执行一些强大的数据转换。


---sed QIF 魔法

过去几个星期,我一直想买一份 Quicken来结算我的银行帐户。Quicken 是一个非常好的金融程序,当然会成功地完成这项工作。但是,经过考虑之后,我觉得自己可以轻易编写某个软件来结算我的支票簿。我想,毕竟,我是个软件开发人员!

我开发了一个很好的小型支票簿结算程序(使用 awk),它通过分析包含我的所有交易的文本文件的语法来计算余额。略微调整之后,我将其改进,以便可以象 Quicken 那样跟踪不同的贷款和借款类别。但是,我还要添加一个特性。最近,我将帐户转移到一家有联机 Web 帐户界面的银行。有一天,我注意到,这家银行的 Web 站点允许以 Quicken 的 .QIF 格式下载我的帐户信息。我马上觉得,如果可以将该信息转换成文本格式,那就太棒了。


---两种格式的故事

在查看 QIF 格式之前,先看一下我的 checkbook.txt 格式:

28 Aug 2000     food    -       -       Y     Supermarket             30.94 25 Aug 2000     watr    -       103     Y     Check 103          52.86

在我的文件中,所有字段都由一个或多个制表符分开,每个交易占据一行。日期之后的下一个字段列出支出类型(如果是收入项,则为 "-")。第三个字段列出收入类型(如果是支出项,则为 "-")。然后,是一个支票号字段(如果为空,则还是 "-"),一个交易完成字段("Y" 或 "N"),一个注释和一个美元金额字段。现在,让我们看一下 QIF 格式。当用文本查看器查看下载的 QIF 文件时,它看起来如下:

!Type:Bank D08/28/2000 T-8.15 N PCHECKCARD SUPERMARKET ^ D08/28/2000 T-8.25 N PCHECKCARD PUNJAB RESTAURANT ^ D08/28/2000 T-17.17 N PCHECKCARD SUPERMARKET

浏览过文件之后,不难猜出其格式 -- 忽略第一行,其余的格式如下:

D<数据>  
T<交易量>  
N<支票号>  
P<描述>  
^   (这是字段分隔符)


---开始处理

在处理象这样重要的 sed 项目时,不要气馁 -- sed 允许您将数据逐渐修改成最终形式。在进行当中,可以继续细化 sed 脚本,直到输出与预期的完全一样为止。无需在试第一次时就保证其完全正确。

要开始,首先创建一个名为 "qiftrans.sed" 的文件,然后开始修改数据:

1d /^^/d s/[[:cntrl:]]//g

第一个 '1d' 命令删除第一行,第二个命令从输出除去那些讨厌的 '^' 字符。最后一行除去文件中可能存在的任何控制字符。既然在处理外来文件格式,我想消除在中途遇到任何控制字符的风险。到目前为止,一切顺利。现在,要向该基本脚本中添加一些处理功能:

1d /^^/d s/[[:cntrl:]]//g /^D/ { s/^D\(.*\)/\1\tOUTY\tINNY\t/ s/^01/Jan/         s/^02/Feb/s/^03/Mar/         s/^04/Apr/s/^05/May/         s/^06/Jun/ s/^07/Jul/         s/^08/Aug/ s/^09/Sep/         s/^10/Oct/s/^11/Nov/         s/^12/Dec/ s:^\(.*\)/\(.*\)/\(.*\):\2 \1 \3:  }

首先,添加一个 '/^D/' 地址,以便 sed 只在遇到 QIF 数据字段的第一个字符 'D' 时才开始处理。当 sed 将这样一行读入其模式空间时,将按顺序执行花括号中的所有命令。

花括号中的第一个命令将把如下行:

D08/28/2000

变换成:

08/28/2000	OUTY	INNY

当然,现在的格式还不完美,但没关系。我们将在进行过程中逐渐细化模式空间的内容。后面 12 行的最后效果是将数据变换成三个字母的格式,最后一行从数据中除去三个斜杠。最后得到这一行:

Aug 28 2000	OUTY	INNY

OUTY 和 INNY 字段是占位符,以后将被替换。现在还不能确定它们,因为如果美元金额为负,将把 OUTY 和 INNY 设置成 "misc" 和 "-",但是,如果美元金额为正,将分别把它们更改成 "-" 和 "inco"。既然还没有读入美元金额,所以,需要暂时使用占位符。


---细化

现在进一步细化:

1d  /^^/d s/[[:cntrl:]]//g  /^D/ {s/^D\(.*\)/\1\tOUTY\tINNY\t/ s/^01/Jan/          s/^02/Feb/s/^03/Mar/          s/^04/Apr/s/^05/May/          s/^06/Jun/s/^07/Jul/          s/^08/Aug/s/^09/Sep/          s/^10/Oct/s/^11/Nov/          s/^12/Dec/s:^\(.*\)/\(.*\)/\(.*\):\2 \1 \3:N          N          N          s/\nT\(.*\)\nN\(.*\)\nP\(.*\)/NUM\2NUM\t\tY\t\t\3\tAMT\1AMT/s/NUMNUM/-/          s/NUM\([0-9]*\)NUM/\1/s/\([0-9]\),/\1/  }

后七行有些复杂,所以将详细讨论它们。首先,连续使用三个 'N' 命令。'N' 命令告诉 sed 将 下一行读入输入中,然后将其附加到当前模式空间。这三个 'N' 命令导致将下三行附加到当前模式空间缓冲区,现在这一行看起来如下:

28 Aug 2000	OUTY	INNY	\nT-8.15\nN\nPCHECKCARD SUPERMARKET

sed 的模式空间变得很难看 -- 需要除去额外的新行,并执行某些附加的格式化。要这样做,将使用替代命令。要匹配的模式为:

'\nT.*\nN.*\nP.*'

这将与后面依次跟有 'T'、零或多个字符、新行、'N'、任何数量的字符、新行、'P'、以及任何数量字符的新行匹配。呀!这个规则表达式将与刚刚附加到模式空间的三行的全 部内容匹配。但我们要重新格式化该区域,而不是整个替换它。美元金额、支票号(如果有的话)和描述需要出现在替换字符串中。要这样做,我们用带有反斜杠的 圆括号括起那些“感兴趣部分”,以便可以在替换字符串中引用它们(使用 '\1'、'\2\ 和 '\3' 来告诉 sed 将它们插入到何处)。以下是最后的命令:

s/\nT\(.*\)\nN\(.*\)\nP\(.*\)/NUM\2NUM\t\tY\t\t\3\tAMT\1AMT/

该命令将我们的行变换成:

28 Aug 2000  OUTY  INNY  NUMNUM    Y	   CHECKCARD SUPERMARKET	 AMT-8.15AMT

虽然该行正变得好一些,但是,有几件事一看就有点...啊...有趣。首先是那个愚蠢的 "NUMNUM" 字符串 -- 其目的何在?如果查看 sed 脚本的后两行,就会发现其目的,后两行将把 "NUMNUM" 替换成 "-",而把 "NUM"<number>"NUM" 替换成 <number>。如您所见,用愚蠢的标记括起支票号允许我们在该字段为空时方便地插入一个 "-"。


---结束尝试

最后一行除去数字后的逗号。它把如 "3,231.00" 这样的美元金额转换成我使用的格式 "3231.00"。现在,让我们看一下最终脚本:

最终的“QIF 到文本”脚本

1d /^^/d s/[[:cntrl:]]//g /^D/ { 	s/^D\(.*\)/\1\tOUTY\tINNY\t/ s/^01/Jan/ 	s/^02/Feb/ 	s/^03/Mar/ 	s/^04/Apr/ 	s/^05/May/ s/^06/Jun/ 	s/^07/Jul/ 	s/^08/Aug/ 	s/^09/Sep/ 	s/^10/Oct/ s/^11/Nov/ 	s/^12/Dec/ 	s:^\(.*\)/\(.*\)/\(.*\):\2 \1 \3: N 	N 	N 	s/\nT\(.*\)\nN\(.*\)\nP\(.*\)/NUM\2NUM\t\tY\t\t\3\tAMT\1AMT/ s/NUMNUM/-/ 	s/NUM\([0-9]*\)NUM/\1/ 	s/\([0-9]\),/\1/ /AMT-[0-9]*.[0-9]*AMT/b fixnegs s/AMT\(.*\)AMT/\1/ 	s/OUTY/-/ 	s/INNY/inco/ b done :fixnegs 	s/AMT-\(.*\)AMT/\1/ 	s/OUTY/misc/ s/INNY/-/ :done }

附加的十一行使用替代和一些分支功能来美化输出。首先看一下这行:

/AMT-[0-9]*.[0-9]*AMT/b fixnegs

该行包含一个格式为 "/regexp/b label" 的分支命令。如果模式空间与规则表达式匹配,sed 将分支到 fixnegs 标号。您应该可以轻易找到该标号,它在代码中为 ":fixnegs"。如果规则表达式不匹配,则以常规方式继续处理下一个命令。

既然您理解该命令本身的工作原理,让我们看一下分支。如果看一下分支规则表达式,将看到它与后面依次跟有 '-'、任意数量的数字、一个 '.'、任意数量的数字和 'AMT' 的字符串 'AMT' 匹配。就象我确信您已猜到一样,该规则表达式专门处理负的美元金额。在这之前,用 'ATM' 括起美元金额,以便以后可以轻易找到它。因为规则表达式只与以 '-' 开始的美元金额匹配,所以,该分支只在恰巧处理借款时才发生。如果正处理贷款,应该将 OUTY 设置成 'misc',将 INNY 设置成 '-',并且应该除去贷款数量前面的负号。如果跟踪代码的流程,将看到实际情况正是这样。如果不执行分支,则用 '-' 替换 OUTY,用 'inco' 替换 INNY。完成了!现在输出行是完美的:

28 Aug 2000	misc	-	-       Y     CHECKCARD SUPERMARKET  -8.15


---别犯糊涂

如您所见,只要循序渐进地解决问题,使用 sed 转换数据就没有那么难。不要试图使用一个 sed 命令或一下子解决所有问题。相反,要朝着目标逐步进行,并不断改进 sed 脚本,直到其输出正如您希望那样为止。sed 有许多功能,希望您已非常熟悉其内部工作原理并继续努力以进一步掌握它!

转载于:https://my.oschina.net/nord/blog/101383

相关文章:

11位科幻作家参与,首次AI人机共创写作实验启动

人工智能会怎样影响人类文学创作&#xff1f;人类智慧与机器智慧如何相互激发创作灵感&#xff1f; 10月27日&#xff0c;由传茂文化和创新工场联手打造的华语科幻AI人机共创写作实验项目《共生纪》启动&#xff0c;人类作家与AI算法将围绕环保、人机关系、性别、文化多样性等…

笔记之远程桌面服务(RDS)

Windows默认只能有2个用户同时通过RDP进行连接&#xff0c;非常不方便&#xff0c;于是借此机会学习了下Win2012R2的远程桌面配置。以下我把学习过程记录一下&#xff1a; 1. 最开始我觉得只需要安装“Remote Desktop Session Host”&#xff0c;事实证明这样没错&#xff0c;可…

用Asp.net 传送大文件

Chris Hynes我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题&#xff0c;因为ASP.NET会block直到把整个文件载入内存后&#xff0c;再加以处理。实际上&#xff0c;如果文件很大的话&#xff0c;我们经常会见到Internet Explorer…

[转]Java Os Properties

2019独角兽企业重金招聘Python工程师标准>>> // File: io/properties/SysPropList.java // Description: Shows system properties. This must be an application. // An applet cant get this information. // Author: Fred Swartz // Date: 2 Feb…

思谋科技A轮融资超1亿美元 ,成为最年轻“准独角兽”AI企业

新一代视觉AI前沿技术公司——思谋科技今天宣布&#xff0c;已完成A轮融资。据知情人士透露&#xff0c;思谋科技此次融资金额超1亿美元&#xff0c;成为业内最年轻的“准独角兽”AI企业&#xff0c;本新投资方包括松禾资本、红杉资本中国基金、基石资本、闻天下投资等。今年6月…

C语言 · 征税程序

算法提高 征税程序 时间限制&#xff1a;1.0s 内存限制&#xff1a;512.0MB问题描述税务局希望你帮他们编写一个征税程序&#xff0c;该程序的功能是&#xff1a;首先输入某公司的年销售额sale和税率rate&#xff0c;然后程序将计算出相应的税额tax&#xff0c;并把它显示在…

在ASP.NET中随意创建图形信息

如果没有一个外部组件的支持&#xff0c;在ASP中是不能动态创建图形的&#xff0c;不管它是一个图表&#xff0c;一个横幅或仅仅是一个图形计数器。可喜的是&#xff0c;这一点在ASP.NET中改变了。现在&#xff0c;我们只需要使用内置功能&#xff0c;就能够很容易动态创建图形…

做动态图表没有数据?用Python就能获取

来源 | 法纳斯特&#xff08;ID:walker398&#xff09;刷爆全网的动态条形图&#xff0c;原来 5 行 Python 代码就能实现&#xff01;这是小F在国庆之前写的一篇文章&#xff0c;既然有了Python这个制作动态条形图工具&#xff0c;缺的那便是数据了。先看一下B站2019年「数据可…

CCTouchDispatcher sharedDispatcher 方法过期

//[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:selfpriority:0swallowsTouches:YES];转载于:https://www.cnblogs.com/sell/archive/2013/01/14/2…

哪些听起来像段子一样的故事?

杭州海底世界&#xff0c;一个小走廊两边都是各种爬行动物展览。有两只蜥蜴当时是这个样子人还年轻&#xff0c;还比较猥琐&#xff0c;看到一个趴在另一个身上就觉得在做什么羞羞的事。于是就拍下来&#xff0c;发到群里&#xff0c;然后说了句交配中。然后一天就光拍照&#…

立足高校矢志创新,鲲鹏计算生态长沙在行动

在今年&#xff0c;虽然全球经济发展受到疫情和国际形势变化影响增速减缓&#xff0c;但我国在AI、云计算、大数据、5G等前沿技术方面的发展却依然没有停下脚步。发展前沿技术&#xff0c;计算产业是基础。因此&#xff0c;培养计算产业人才成为当前全社会共同面对的一大关键。…

用好ASP.NET 2.0的URL映射

简介&#xff1a;   URL映射是ASP.NET 2.0中提供的新特性。URL映射技术帮助我们将一个特定URL映射为另一个URL。为了帮助理解&#xff0c;我们假设你在站点有一个叫Homepage.aspx的页面来访问主页&#xff0c;所有的用户也都用这个页面来访问你的主页。但由于某些原因&#x…

N皇后问题的位运算求解——目前最快的方法

核心代码如下&#xff1a; 1 void test(int row, int ld, int rd) 2 { 3 int pos, p; 4 if ( row ! upperlim ) 5 { 6 pos upperlim & (~(row | ld | rd )); 7 while ( pos ) 8 { 9 p pos & (~pos 1); 1…

cocos2d-x JS 获取当前系统时间(解决屏幕双击点击事件)

记录一下&#xff0c;好开心&#xff0c;感觉今天自己又学到东西了&#xff0c;对于屏幕双击事件本来还毫无头绪的&#xff0c;今天得以解决总算没白费加班&#xff0c;其实原理很简单&#xff1b;就是在点击事件里做一个判断&#xff0c;这个判断就是需要获取当前系统的时间的…

怎么样给下拉框加载背景色

选择自 PPLUNCLE 的 Blog 部分代码:------aspx页面&#xff1a; <tr> <td><select id“job“ name“job“ runat“server“></td></tr>说明&#xff1a;下拉框必须写成上面的形式&#xff0c;用<asp:dropdownlist....>不能实现------cs页…

Windows 7 部署(一):安装和部署简述

术语表&#xff1a; 英文缩写英文全称中文全称备注 MDT Microsoft Deployment Toolkit 微软部署工具包 免费&#xff0c;需要域环境及DHCP服务器(Port 66 and 67)&#xff0c;需要首先安装WAIK。使用MDT部署Windows 7时&#xff0c;也需要WDS&#xff0c;WDS主要负责推送WinP…

希捷发布CORTX对象存储软件与开源社区,普惠超大规模数据存储

数据存储和管理解决方案提供商希捷科技今日&#xff08;10月29日&#xff09;举行了“Let’s Rethink Data”希捷科技Datasphere线上峰会。在本次峰会&#xff0c;希捷科技携手行业专家与生态合作伙伴洞见数据产业趋势&#xff0c;并发布了对象存储软件CORTXTM以及CORTXTM开源社…

最优化:拉格朗日乘子法

作者&#xff1a;桂。 时间&#xff1a;2017-03-27 20:26:17 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6628785.html 声明&#xff1a;欢迎被转载&#xff0c;不过记得注明出处哦~ 【读书笔记06】 前言 看到西蒙.赫金的《自适应滤波器原理》第四版第四章&#xf…

在Asp.Net中从sqlserver检索(retrieve)图片

介绍&#xff1a;这篇文章是我写的"如何把图片存入sqlServer中"的后续。我建议你在读这篇文章之前先看看那篇。和存储图片相比&#xff0c;读取图片就要简单多了。输出一副图片我们要做的就是使用Response对象的BinaryWrite方法。同时设置图片的格式。在这篇文章中&a…

华为鲲鹏产业生态加速算力升级,企业数字化转型在山西吹响号角

2020年&#xff0c;新基建风口已至&#xff0c;建设数字基础设施&#xff0c;打造数字产业生态是其关键与核心&#xff0c;而算力底座将成为其重要的运行支撑。数字化浪潮大背景下&#xff0c;鲲鹏计算产业生态&#xff0c;充满巨大的想象与发展空间。从企业数字化转型角度来看…

隐藏TabBar

在项目中经常遇到隐藏tabBar,实力很多种方法&#xff0c;可以解决不同情况下问题1&#xff1a;//隐藏tabBar WebViewController *webVc [[WebViewController alloc] init]; webVc.hidesBottomBarWhenPushed YES; [self.navigationController pushViewController:web…

Linux下安装JDK和Eclipse

安装Eclipse时前需要确保系统中已经具备Java运行环境&#xff0c;本文以干净系统初次安装Eclipse为例&#xff0c;同时安装JDK和Eclipse. 1.下载JDK压缩包&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html  假设保存位置为&#xff1a;/hom…

如何在ASP.Net 中把图片存入数据库

介绍 可能有很多的时候&#xff0c;我们急需把图片存入到数据库当中。在一些应用程序中&#xff0c;我们可能有一些敏感的资料&#xff0c;由于存储在文件系统&#xff08;file system&#xff09;中的东西&#xff0c;将很容易被某些用户盗取&#xff0c;所以这些数据不能存…

人类偏好的“可塑性”,从博弈说起

作者 | 斯图尔特罗素来源 | 《AI新生》出品 | AI科技大本营经济学家通过为人类受试者提供选择来套取他们的偏好。该技术广泛应用于产品设计、营销和交互式电子商务系统中。例如&#xff0c;汽车设计师向受测试者提供具有不同油漆颜色、座位安排、后备厢大小、电池容量、杯架等选…

基于python的一个运维自动化的项目(进度更新)【已开源】

文章已经转到 http://xiaorui.cc 个人博客里&#xff0c;欢迎浏览 !!!交流Python & Golang 可以加群 278517979 .

关于Android方法数量限制的问题

限制Android方法数量的原因是&#xff1a; Android应用以DEX文件的形式存储字节码文件&#xff0c;在Dalvik字节码规范里&#xff0c;方法引用索引method referenceindex只有16位,即65536个。 Op & Format Mnemonic / Syntax Arguments 6e..72 35c invoke-kind {vC, vD…

asp.net中显示DataGrid控件列序号的几种方法

在aps.net中多数据绑定的控件很多&#xff0c;论功能来说&#xff0c;应该属DataGrid最为齐全&#xff0c;但它没有提供现成的显示记录序号的功能&#xff0c;不过我们可以通过它所带的一些参数来间接得到序号&#xff0c;下面来看看怎样得到和显示序号值计算方式如下&#xff…

一口气看完45个寄存器,CPU核心技术大揭秘

作者 | 轩辕之风O来源 | 编程技术宇宙头图 | CSDN下载自视觉中国自1946年冯诺伊曼领导下诞生的世界上第一台通用电子计算机ENIAC至今&#xff0c;计算机技术已经发展了七十多载。从当初专用于数学计算的庞然大物&#xff0c;到后来大型机服务器时代&#xff0c;从个人微机技术蓬…

用友公司Java面试题(含答案)

为什么80%的码农都做不了架构师&#xff1f;>>> 用友公司Java面试题&#xff08;含答案&#xff09; 1.Hashtable和HashMap有什么区别&#xff1f; a.Hashtable是继承自陈旧的Dictionary类的&#xff0c;HashMap继承自AbstractMap类同时是Java 1.2引进的Map接口…

使用memcache做web缓存

为什么80%的码农都做不了架构师&#xff1f;>>> 下载: memcached server [密码: vTI8, 安装启动和调用, 内部有说明] 下载: python-memcached 1.57 现在准备用web.py写个网站, 缓存这块一直没想好用哪个, 今天终于想好了, 直接用memcache # coding: utf-8import me…