关于FastDBF库读写ArcGis dbf文件的小bug
该库托管于GitHub,地址:https://github.com/SocialExplorer/FastDBF
贡献者应该都是老外,所以……
1、解析文件头,字段名部分如果有中文命名字段会出错
在DbfHeader类的Read(BinaryReader reader)方法
- //char[] buffer = new char[11];
- //buffer = reader.ReadChars(11);
- //string sFieldName = new string(buffer);
- //yang:ReadChars(11)读取中文字段名时会出错,已改为ReadBytes(11)//Encoding注意UTF-8与GBK
- byte[] bytes = reader.ReadBytes();
- string sFieldName = Encoding.Default.GetString(bytes);
- int nullPoint = sFieldName.IndexOf((char));
- if (nullPoint != -)
- sFieldName = sFieldName.Substring(, nullPoint);
2、在DbfColumn类,没有设定字段类型可能存在的Float
- public enum DbfColumnType
- {
- /// <summary>
- /// Character less than 254 length
- /// ASCII text less than 254 characters long in dBASE.
- ///
- /// Character fields can be up to 32 KB long (in Clipper and FoxPro) using decimal
- /// count as high byte in field length. It's possible to use up to 64KB long fields
- /// by reading length as unsigned.
- ///
- /// </summary>
- Character = ,
- /// <summary>
- /// Number Length: less than 18
- /// ASCII text up till 18 characters long (include sign and decimal point).
- ///
- /// Valid characters:
- /// "0" - "9" and "-". Number fields can be up to 20 characters long in FoxPro and Clipper.
- /// </summary>
- /// <remarks>
- /// We are not enforcing this 18 char limit.
- /// </remarks>
- Number = ,
- /// <summary>
- /// L Logical Length: 1 Boolean/byte (8 bit)
- ///
- /// Legal values:
- /// ? Not initialised (default)
- /// Y,y Yes
- /// N,n No
- /// F,f False
- /// T,t True
- /// Logical fields are always displayed using T/F/?. Some sources claims
- /// that space (ASCII 20h) is valid for not initialised. Space may occur, but is not defined.
- /// </summary>
- Boolean = ,
- /// <summary>
- /// D Date Length: 8 Date in format YYYYMMDD. A date like 0000-00- 00 is *NOT* valid.
- /// </summary>
- Date = ,
- /// <summary>
- /// M Memo Length: 10 Pointer to ASCII text field in memo file 10 digits representing a pointer to a DBT block (default is blanks).
- /// </summary>
- Memo = ,
- /// <summary>
- /// B Binary (dBASE V) Like Memo fields, but not for text processing.
- /// </summary>
- Binary = ,
- /// <summary>
- /// I Integer Length: 4 byte little endian integer (FoxPro)
- /// </summary>
- Integer = ,
- /// <summary>
- ///yang:添加 F Float
- /// </summary>
- Float = ,
- }
- public char ColumnTypeChar
- {
- get
- {
- switch(mType)
- {
- case DbfColumnType.Number:
- return 'N';
- case DbfColumnType.Character:
- return 'C';
- case DbfColumnType.Binary:
- return 'B';
- case DbfColumnType.Boolean:
- return 'L';
- case DbfColumnType.Date:
- return 'D';
- case DbfColumnType.Integer:
- return 'I';
- case DbfColumnType.Memo:
- return 'M';
- //yang:新加Float字段类型
- case DbfColumnType.Float:
- return 'F';
- }
- throw new Exception("Unrecognized field type!");
- }
- }
- public static DbfColumnType GetDbaseType(char c)
- {
- switch(c.ToString().ToUpper())
- {
- case "C": return DbfColumnType.Character;
- case "N": return DbfColumnType.Number;
- case "B": return DbfColumnType.Binary;
- case "L": return DbfColumnType.Boolean;
- case "D": return DbfColumnType.Date;
- case "I": return DbfColumnType.Integer;
- case "M": return DbfColumnType.Memo;
- //yang:新加Float字段类型
- case "F": return DbfColumnType.Number;
- }
- throw new NotSupportedException(String.Format("{0} does not have a corresponding dbase type.", c));
- }
关于FastDBF库读写ArcGis dbf文件的小bug的更多相关文章
- ArcGis dbf读写——挂接Excel到属性表 C#
ArcMap提供了挂接Excel表格信息到属性表的功能,但是当数据量较大到以万计甚至十万计的时候这个功能就歇菜了,当然,你可以考虑分段挂接.这个挂接功能只是做了一个表关联,属性记录每个字段的信息需要通 ...
- C# 使用 NPOI 库读写 Excel 文件
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples,给出 ...
- ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法
2019年4月 拓展: ArcGis——好好的属性表,咋就乱码了呢? 2019年3月27日补充: 在ArcMap10.3+(根据官网描述应该是,作者测试使用10.5,可行)以后的版本,可以使用ArcT ...
- 《Java知识应用》Java读写DBF文件
1. 准备: Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便 ...
- Java读取Level-1行情dbf文件极致优化(2)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取Level-1行情dbf文件极致优化(1)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- C#生成DBF文件
C# 生成DBF,无需注册Microsoft.Jet.OLEDB. namespace ConsoleApplication { class Program { static void Main(st ...
- JAVA用geotools读写shape格式文件
转自:http://toplchx.iteye.com/blog/1335007 JAVA用geotools读写shape格式文件 (对应geotools版本:2.7.2) (后面添加对应geotoo ...
随机推荐
- WinForm -- 为TextBox文本框添加鼠标右键菜单
WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...
- e2e测试框架之Cypress
谈起web自动化测试,大家首先想到的是Selenium!随着近几年前端技术的发展,出现了不少前端测试框架,这些测试框架大多并不依赖于Selenium,这一点跟后端测试框架有很大不同,如Robot Fr ...
- QTableWidgetItem class
Help on class QTableWidgetItem in module PyQt5.QtWidgets: class QTableWidgetItem(sip.wrapper) | QT ...
- .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂
什么是时间戳(chuō)? 答:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 为什么时间戳要从1970年01月0 ...
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- CSS弹性盒模型(flex box)
本文介绍的是 CSS3 规范中引入的新布局模型:弹性盒模型(flex box).随着响应式用户界面的流行,Web 应用一般都要求适配不同的设备尺寸和浏览器分辨率. 浏览器支持: 弹性盒布局的容器(fl ...
- vue移动端常用组件
3d picker组件 参考链接:https://segmentfault.com/a/1190000007253581?utm_source=tag-newest安装:npm install vue ...
- 微信h5支付
分为 微信内H5调起支付 和 非微信浏览器H5支付. 1.H5支付(微信内) 参考链接:https://www.jianshu.com/p/6b9acdd10de6 2.JSAPI支付(非微信) 参考 ...
- form单选框
form中的单选框: var resultStartRadio = new Ext.form.RadioGroup({ id : 'resultStartRadio', name :"for ...
- json打不开