CHCSVParser
是一个 CSV 文件的 Objective-C 解析器。
为了使用 CHCSVParser
,您需要在项目中包含以下两个文件:
CHCSVParser.h
CHCSVParser.m
CHCSVParser
需要 ARC。
CHCSVParser
与 NSXMLParser
类似,它在解析数据时同步调用代理回调方法,以便您知道它已找到字段、已读取完一行或遇到了语法错误。
CHCSVParser
可以通过以下三种方式之一创建:
NSString
的内容NSInputStream
CHCSVParser
可以配置为解析其他“字符分隔”文件格式,如“TSV”(制表符分隔)。您可以在初始化期间指定解析器的分隔符。分隔符只能是一个字符长度,不能是换行符或 "
。此外,根据您在解析器上设置的选项,您可能无法使用 #
、\
或 =
作为分隔符。
默认情况下,CHCSVParser
将不会净化字段输出;换句话说,字段将以与 CSV 文件中找到的完全相同的方式返回。但是,如果您希望字段被清理(周围的引号被去除,字符未转义等),您可以设置 sanitizesFields
属性为 YES
来实现这一点。
CHCSVParser
有其他属性可以改变解析行为
recognizesBackslashesAsEscapes
允许您解析使用反斜杠转义的特殊字符(分隔符、换行符等)的定义文件。当此选项启用时,您不能使用反斜杠作为分隔符。此选项默认禁用。
recognizesComments
将跳过解析以数字符号(#
)开头的字段。这些字段被视为注释报告给解析器代理,并且注释由一个未转义的换行符终止。此选项默认禁用。
代码recognizesLeadingEqualSign
允许字段的开头有=
符号。一些程序使用开头的等号来表示字段内容应该被显式解释,例如不应该删除不重要的数字。此选项默认禁用。
CHCSVWriter
有几个方法来构建CSV文件
-writeField:
接受一个对象,将其-description
(在经过适当的转义后)写入CSV文件。如果需要,它还将写入字段分隔符(,
)。您可以传递空字符串(@""
)或nil
来写入空字段。
-finishLine
用于终止当前的CSV行。如果不调用-finishLine
,则所有CSV字段都将位于同一行上。
-writeLineOfFields:
接受一个对象的数组,将每个对象发送到-writeField:
,然后调用-finishLine
.
-writeComment:
接受一个字符串,将其以CSV样式注释的形式写入文件。
如果您希望将CSV直接写入到NSString
,您应该创建一个用于写入内存的NSOutputStream
,并使用该流作为CHCSVWriter
的输出流。有关如何执行此操作的示例,请参见-[NSArray(CHCSVAdditions) CSVString]
方法。
与CHCSVParser
一样,CHCSVWriter
可以在初始化期间使用非逗号分隔符进行自定义。
在NSArray
和NSString
上有一些类别方法来简化分界符文件的常见读写。
此外,方便API允许进行除CHCSVParser
提供的以外的一些解析选项。当您指定CHCSVParserOptionUsesFirstLineAsKeys
选项时,解析将返回一个包含CHCSVOrderedDictionary
实例的数组,而不是字符串数组。
CHCSVOrderedDictionary
是NSDictionary
的子类,它维护其键值对的特定顺序,并允许您通过索引查找键和值。
CHCSVParser
依赖于知道内容的编码。如果您能提供该编码,则应几乎与任何类型的文件编码一起工作。如果不知道文件的编码,《code>CHCSVParser可以进行一个简单的猜测。CHCSVParser
将尝试从以下选项中猜测文件编码
NSMacOSRomanStringEncoding
; 默认/回退编码)NSUTF8StringEncoding
)NSUTF16BigEndianStringEncoding
)NSUTF16LittleEndianStringEncoding
)NSUTF32BigEndianStringEncoding
)NSUTF32LittleEndianStringEncoding
)kCFStringEncodingISO_2022_KR
)CHCSVParser
注意到低内存环境,例如iPhone或iPad。它可以安全地解析非常大的CSV文件,因为它只需一次将文件的一部分加载到内存中。
CHCSVParser
由Dave DeLong编写,并已接受来自其他几个贡献者的补丁。
CHCSVParser
使用Rainer Brockerhoff提供的代码来发现文件编码。
《CHCSVParser》采用MIT许可协议,内容如下:
版权所有(c)2014 Dave DeLong
任何人免费获得本软件及其相关文档副本(简称“软件”),无论出于何种目的,均可无限制地使用、复制、修改、合并、发布、分发、许可或销售软件副本,以及允许第三方使用软件,本协议仅限于以下条件:
上述版权声明和本许可声明应包含于软件的副本中。
软件按“原样”提供,不提供任何形式的保修,无论是明示还是暗示的,包括但不限于适用性、特定目的和版权的侵权担保。在任何事件中,无论是在合同行为、侵权行为或任何其他行为中,作者或版权所有者都不会因其软件的使用、销售或分销而承担任何索赔、损害或其他责任。