【ArcGIS Pro二次开发】(38):清理字段值(空格、空值)

news2024/11/18 17:44:06

由于一些不规范的输入,或是其它数据转换而来,要素类或者独立表的字段值经常含有空值、空格等影响数据质量的内容。

这个工具的目的就是清理、转换这些字段内容,提高数据质量。


一、要实现的功能

如上图所示,点击【清洗字段值】按钮,在弹出的工具框中,选择要素图层或独立表,再选择一种处理模式,点击执行即可。

这里的【处理模式】有4种,【字符串:清除空格;字符串:清除空值;数字:空值转0;数字:0转空值】。功能如字面意思,很好理解。

1、字符串:清除空格

将输入图层的【所有字符串型字段】中的空格清除,不管处在哪个位置。

工具执行前后对比如下:

2、字符串:清除空值

将输入图层的【所有字符串型字段】中的空值清除,结果不含任何文字。

工具执行前后对比如下:

3、数字:空值转0

将输入图层的【所有数字型字段】中的空值转换为0值。

工具执行前后对比如下:

4、数字:0转空值

将输入图层的【所有数字型字段】中的0值转换为空值。

工具执行前后对比如下:

 


二、实现流程

先读取选择的图层要素或独立表,并获取它的Table。这部分可以看以前的文章,直接贴后面的核心代码。

1、字符串:清除空格

最主要就是一个【Replace】的字符串方法,实现去除空格的功能。不过在此之前,需要先排除不可读字段以及字段值为空值的情况。

            // 定位到属性表的游标
            using (var tableCursor = table.Search(null, false))
            {
                while (tableCursor.MoveNext())
                {
                    // 获取当前记录的值
                    var row = tableCursor.Current;
                    // 历数所有字段
                    foreach (var field in fields)
                    {
                        // 排除不可编辑的字段
                        if (field.IsReadOnly == false)
                        {
                            // 如果是字符串类型,则进行下一步
                            if (field.Type == FieldType.String)
                            {
                                var currentValue = row[field.Name];
                                if (currentValue is null)
                                {
                                    continue;
                                }
                                else
                                {
                                    currentValue = currentValue.ToString().Replace(" ", "");
                                }
                                // 更新该字段的值
                                row[field.Name] = currentValue;
                                row.Store(); // 保存修改
                            }
                        }
                    }
                }
            }

2、字符串:清除空值

情况和清除空格类似:

            // 定位到属性表的游标
            using (var tableCursor = table.Search(null, false))
            {
                while (tableCursor.MoveNext())
                {
                    // 获取当前记录的值
                    var row = tableCursor.Current;
                    // 历数所有字段
                    foreach (var field in fields)
                    {
                        // 排除不可编辑的字段
                        if (field.IsReadOnly == false)
                        {
                            // 如果是字符串类型,则进行下一步
                            if (field.Type == FieldType.String)
                            {
                                var currentValue = row[field.Name];
                                if (currentValue is null)
                                {
                                    // 转为""
                                    currentValue = "";
                                }
                                // 更新该字段的值
                                row[field.Name] = currentValue;
                                row.Store(); // 保存修改
                            }
                        }
                    }
                }
            }

3、数字:空值转0

框架内容基本差不多:

            // 定位到属性表的游标
            using (var tableCursor = table.Search(null, false))
            {
                while (tableCursor.MoveNext())
                {
                    // 获取当前记录的值
                    var row = tableCursor.Current;
                    // 历数所有字段
                    foreach (var field in fields)
                    {
                        // 排除不可编辑的字段
                        if (field.IsReadOnly == false)
                        {
                            // 如果是数字类型,则进行下一步
                            if (field.Type == FieldType.Single | field.Type == FieldType.Double | field.Type == FieldType.Integer | field.Type == FieldType.SmallInteger)
                            {
                                var currentValue = row[field.Name];
                                if (currentValue is null)
                                {
                                    // 转为0
                                    currentValue = 0;
                                }
                                // 更新该字段的值
                                row[field.Name] = currentValue;
                                row.Store(); // 保存修改
                            }
                        }
                    }
                }
            }

4、数字:0转空值

【空值转0】的方法赋值方向掉个头就行。

            // 定位到属性表的游标
            using (var tableCursor = table.Search(null, false))
            {
                while (tableCursor.MoveNext())
                {
                    // 获取当前记录的值
                    var row = tableCursor.Current;
                    // 历数所有字段
                    foreach (var field in fields)
                    {
                        // 排除不可编辑的字段
                        if (field.IsReadOnly == false)
                        {
                            // 如果是数字类型,则进行下一步
                                if (field.Type == FieldType.Single | field.Type == FieldType.Double | field.Type == FieldType.Integer | field.Type == FieldType.SmallInteger)
                                {
                                    var currentValue = row[field.Name];
                                    if (currentValue is null)
                                    {
                                        continue;
                                    }
                                    else if (currentValue.Equals(0) || currentValue.Equals(0.0))
                                    {
                                        // 转为空值
                                        currentValue = null;
                                    }
                                    // 更新该字段的值
                                    row[field.Name] = currentValue;
                                    row.Store(); // 保存修改
                                }
                        }
                    }
                }
            }

三、工程文件分享

 最后,放上工程文件的链接:

CleanFieldsicon-default.png?t=N4P3https://pan.baidu.com/s/14LKO9y_e1S0YUMdWHGmTuw?pwd=ubpa

PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue+java仓库管理系统_0r36w

部门管理员: 申购入库:发起申购,进行入库申请。 调拨申请:发起资产调拨的申请以及查看申请的详情信息。 出库管理:查看调拨的详情信息,可以进行资产的申请报废以及申请维修。 资产报废查询:查看…

薛定谔maestro 安装

【1】先删除之前不能用的文件包 【2】tar -xvf 解压包 进行解压 【3】cd 解压出来的文件下 【4】sudo ./INSTALL 【也可以不用sudo,我的电脑不知道上面问题,需要用sudo,否则在之后创建生成文件夹的时候没有权限】 【5】根据操作一步一步…

电子行业 K 公司对接 Nexperia EDI 项目案例

项目背景 Nexperia 是一家全球领先的半导体制造商,专注于提供高性能、高可靠性和创新性的半导体解决方案。公司成立于2017年,是前飞思卡尔半导体业务的一部分,并在全球范围内拥有多个设计、研发和生产基地。 Nexperia 使用 EDI(…

【VMware】虚拟机安装centos7

目录 一、创建虚拟机 1、自定义 2、选择需要安装的操作系统 3、选择虚拟机安装位置 4、选择处理器配置(可先默认) 5、设置虚拟内存(一般4096) 6、选择网络连接方式 7、选择I/O控制器 8、选择磁盘类型 9、选择磁盘 10、指定磁盘容…

真刑!几行代码端了整个教务系统。。

今天给大家伙分享一个网络安全的案例,程序员和网安同学都可以看看, 前言:本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担 漏洞成因 事…

佩戴舒适的蓝牙耳机哪款比较好用?佩戴舒适度最好的蓝牙耳机推荐

​关于蓝牙耳机佩戴舒适度及音质表现的问题,经常有很多小伙伴在问,或许大家更习惯用价格去界定一个蓝牙耳机的定位。本篇文章主要给大家介绍哪款蓝牙耳机比较好用,很值得入手的蓝牙耳机,一起来看看吧。 一、南卡OE蓝牙耳机&#…

知识小结——HTTP协议相关

目录 TCP/IP URI / URL HTTPS 总结时间: TCP/IP协议簇 对TCP的理解 对UDP的理解 HTTP(超文本传输协议)是什么? HTTPS(安全超文本传输协议)是什么? HTTPS的特点: HTTPS协议…

【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序

linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序 一、背景描述二、vi命令编辑三、启动程序四、拓展--启动脚本 一、背景描述 需求:发现线上的 iotp-irsb-server-v1.0.0.2.jar 包中配置文件的日志级别配置错误,需要在线修改jar包中文件的…

99.实战网页构建定价部分-第二节

上节课我们完成的定价页面是这样的 上节课我们完成的定价页面是这样的 ● 首先我们先给卡片加上背景颜色 .princing-plan {background-color: #fdf2e9;border-radius: 11px;padding: 4.8rem; }● 之后我们调整下框子的大小和位置 ● 接着我们给基础价格再调价一项&#x…

低代码开发平台介绍

低代码开发平台近两年发展迅猛,并迅速渗透到各个细分领域。本文简要介绍低代码开发的概念以及特性,并结合低代码开发的应用场景介绍两个低代码开发平台。 1、低代码开发概念 1.1 低代码开发介绍 低代码开发(Low-code Development&#xff0…

SQL调优:让Java内存分担计算

作者: 剽悍一小兔 CSDN前端优质创作者,打破编程小说次元壁第一人《JavaScript百炼成仙》作者,专注Java硬核干货分享,分享创造快乐,技术成就梦想! 我们在工作中,经常会因为一条慢sql调半天。这一节&#xff…

无线蓝牙耳机什么牌子好?八大真无线蓝牙耳机排名

蓝牙耳机作为当前热门的数码产品,无论何时都能用上,蓝牙耳机的快速发展逐渐的取代有线耳机,摆脱线条的束缚,更方便携带。当然,随着蓝牙耳机的设计各种各样,导致很多的小伙伴在选购耳机的时候,不…

简易协程工具【Wait! - Easy Coroutines】

Wait! - Easy Coroutines | Utilities Tools | Unity Asset StoreUse the Wait! - Easy Coroutines from Iterant Games on your next project. Find this utility tool & more on the Unity Asset Store.https://prf.hn/l/b3AQw5a 1、概述 Wait - Easy Coroutines&#…

chatgpt赋能python:建立Python文件的完整指南

建立Python文件的完整指南 如果您正在寻找一个易于学习和使用的编程语言,Python就是一个不错的选择。Python的第一印象常常让人感到吃惊,因为它的代码与许多编程语言相比要短得多,然而它的功能非常强大且使用范围广泛。在本文中,…

【位图布隆过滤器海量数据面试题】

文章目录 1 位图2 布隆过滤器 1 位图 首先我们来看看一个腾讯的面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 分析: 40亿个不重复整形数据,大概有160亿字节…

Linux---vim的使用

专栏:Linux 个人主页:HaiFan. 本章为大家带来Linux工具—vim Linux工具 关于rzszyumvim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集简单vim配置配置文件的位置常用配置选项 关于rzsz 这个工具用于windows机器和Linux机器通过Xshell传输…

字符串--字符指针、字符串的访问和输入/输出(字符串空格问题,输入带双引号的字符串)

一、字符指针 字符指针(Character Pointers)是指向字符型数据的指针变量。 每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。因此,只要将字符串的首地址赋值给字符指针,即可让字符指针指向一个字符…

安卓主板/开发板定制开发生产,MTK/高通/紫光展锐安卓开发板

智物通讯是一家致力于行业安卓主板定制开发的公司,提供包括MTK四核/八核方案、MTK、高通、紫光展锐系列行业主板方案定制等多样化的服务。 用户可以根据实际需求选择各种不同的模块类型,包括4G模块和5G模块。其中4G模块方案有MT6761、MT6762、MT6765、M…

爬虫 python 正则匹配 保存网页图片

目录 1. 简介1.1 爬虫1.2 爬虫语言1.3 python库1.4 我的步骤 2. 导入包2.1 代码2.2 requests库 3. 写入文件函数4. 获取图片5. 主函数5.1 代码5.2 说明一下webbrowser 6. 所有代码7. 其他(可以忽略)8. 总结 在这里我只提供的是一种方法,有很多…

webpack生产模式配置

一、生产模式和开发模式介绍 生成模式(production mode)是指在开发完成后将代码部署到生产环境中运行的模式,通常需要进行代码压缩、优化、合并,以减少文件大小和请求次数,提高页面加载速度和运行效率。 开发模式&am…