在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。可以对所有记录或选中记录执行简单计算和高级计算。
计算可以通过Python或VBScript执行。建议使用Python,字段计算器的使用,其实主要就是Python基础语法的简单应用。
注意,在代码框里输入的符号都必须是在英文状态下输入。

在任一要素类或者表上右击【打开属性表】,再找到要计算的字段上右击【字段计算器】,即可打开字段计算器。

打开窗口如上图。
1)选择脚本语言。默认是VB,需要手动改成Python。
2)要素或表的字段名,可以双击,会自己在(5)或者(6)的代码里自动生成字段名的代码。
3)python的一些简单函数和方法,同样可以双击自动生成。
4)如果勾选【显示代码块】,则会出现代码框(6)。默认是不勾选的,如果计算脚本比较复杂,需要多行,就勾选,在代码框(5)中定义方法,再在代码框(6)中进行引用。
5)主代码框。
6)引用方法的时候用到的代码框,默认是不开启的。

简单的加减乘除运算,例如。
!数值01! * !数值02!

!字符串01! + !字符串02!

如,如字符串的前3位:
!字符串01![:3]

类似的情况还有,取字符串的后3位:
!字符串01![-3:]
取字符串的2到4位。
!字符串01![1:4]
取关键字及前面或后面的文字,如,取“市”及前面的字。
注意,要查找的如果是中文,需要在前面加u,这是python2.*版本的问题。如果是ArcgisPro就不用加。
!字符串01! [:!字符串01!.find(u'市')+1]

如果要考虑“市”和“县”2个关键字,情况就稍微复杂一些。可以勾选【显示代码块】,写一个方法再引用。
def ss(a):
list_str = [u'市', u'县']
index = -1
for s in list_str:
if a.find(s) != -1:
index = a.find(s)
return a [:index+1]

全部转大写:
!字符串01!.upper()
全部转小写:
!字符串01!.lower()
首字母大写,其余字母小写:
!字符串01!.capitalize()
将字符串中每个单词的首字母大写,其余字母小写,非字母后的第一个字母将转换为大写字母:
!字符串01!.capitalize()

如:要把“县”替换成“市”,注意这里不是在新字段里生成结果,而是修改原字段,要小心。
!字符串01!.replace(u'县', u'市')
引申一下,如果要去取字符串中的空格,则可以如下计算:
!字符串01!.replace(' ', '')
如:要把【福州市】计算成【福_州_市】,字符也可以是空格。
'_'.join( !字符串01! )

如果要把一个小数类型的字段,保留2个小数,可以如下:
round(!Shape_Area!,2)

注意,要计算的字段必须是float或是double类型。要素也不能没有定义坐标系。
!shape.geodesicarea!
这里有用到正则表达式。如,提取汉字:
import re
def ss(a):
va = re.findall(u'[\u4e00-\u9fa5]+',a)
if len(va) == 0:
result = ''
else:
result = ''
for i in range(0, len(va)):
result += va[i]
return result

如果是提取英文,则上面第3行代码替换成:
va = re.findall(r'[a-zA-Z]', a)
如果是提取数字:
va = re.findall(r'\d', a)
特殊符号:
va = re.findall(r'\W', a)
例如:通过建筑结构和层数来简单判断建筑质量。
def ss(a,b):
if a == u'混' and b>2:
return '质量较好'
elif a == u'混' and b<=2:
return '质量一般'
else:
return '质量较差'

# 东
!shape.extent.XMax!
# 西
!shape.extent.XMin!
# 北
!shape.extent.YMax!
# 南
!shape.extent.YMin!
# 部件数
!shape.PartCount!
# 是否是多部件
!shape.isMultipart!
例如:在OID前补0,补到8位。注意要计算的字段必须是字符串类型。
(8-len(str(!数值01!))) * '0' + str( !数值01! )

这个例子算是一个综合运用,代码较长。
def ss(a):
index1 = a.find(u'°')
index2 = a.find(u'′')
index3 = a.find(u'″')
degree = float(a[0:index1])
minutes = float(a[index1 + 1:index2])
seconds = float(a[index2 + 1:index3])
result = degree + minutes / 60 + seconds / 3600
return result

我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q