CHCSVParser, 用于 Objective C的合适的CSV解析器
- 源代码名称: CHCSVParser
- 源代码网址: http://www.github.com/davedelong/CHCSVParser
- CHCSVParser源代码文档
- CHCSVParser源代码下载
#CHCSVParser
CHCSVParser
是用于CSV文件的objective-c 解析器。
##Supported 平台
- Mac OS X 10.7 +
- iOS 6 +
##Usage
为了使用 CHCSVParser
,你需要在项目中包含以下两个文件:
CHCSVParser.h
CHCSVParser.m
CHCSVParser
需要 arc 。
类似,###Parsing 与非常相似,因为它同步解析数据并调用委托回调方法让你知道已经找到了字段,或者已经完成了读回操作,或者遇到了一个语法错误。
可以通过以下三种方式之一创建 CHCSVParser
:
- 带有文件的URL
- 使用
NSString
的内容 - 用
NSInputStream
可以将 CHCSVParser
配置为解析其他"字符已经分离"文件格式,如"tsv"( tab ) 。 你可以在初始化过程中指定解析器的分隔符。 分隔符只能是一个字符长度,不能是任何换行符或者 "
。 另外,根据对解析器设置的选项,你可能不使用 #
。或者 =
作为分隔符
默认情况下,CHCSVParser
不会净化字段的输出;换句话说,单个字段将按照在CSV文件中找到的原样返回。 但是,如果希望清除字段( 。周围双引号,字符未转义等),则可以通过将 sanitizesFields
属性设置为 YES
来指定该字段。
CHCSVParser
还有其他属性来改变解析行为:
-
recognizesBackslashesAsEscapes
允许你解析带分隔符的文件,其中使用反斜杠转义特殊字符( 分隔符,换行符等) 。 启用这里选项时,你不能将反斜杠用作分隔符。 默认情况下禁用这里选项。 -
recognizesComments
将跳过使用 octothorpe (#
)的解析字段。 这些字段作为注释向解析器委托报告,并且注释以未转义的换行符结束。 默认情况下禁用这里选项。 -
recognizesLeadingEqualSign
允许引用字段以=
开头。 某些程序使用前导等号表明应明确解释字段的内容,不应删除不重要的数字。 默认情况下禁用这里选项。
###Writing CHCSVWriter
有几种构造CSV文件的方法:
-writeField:
接受对象并将它的-description
( 经过正确的转义) 写入CSV文件。 如果必要,它还将写入字段分隔符( ,
) 。 你可以传递空字符串( @""
) 或者 nil
来写入空字段。
-finishLine
用于终止当前的CSV行。 如果不调用 -finishLine
,那么所有的CSV字段都将在一行中。
-writeLineOfFields:
接受对象的array,将每个对象发送到 -writeField:
,然后调用 -finishLine
。
-writeComment:
接受一个字符串并将它的作为csv样式注释写入到文件中。
如果希望直接将CSV写入 NSString
,应该创建一个 NSOutputStream
来写入内存,并将它的用作 CHCSVWriter
的输出流。 有关如何执行这里操作的示例,请参见 -[NSArray(CHCSVAdditions) CSVString]
鏂规碜。
CHCSVParser
一样,CHCSVWriter
可以在初始化期间使用除 ,
之外的分隔符进行定制。
###Convenience 方法
在 NSArray
和 NSString
上有两种分类方法来简化分隔文件的常见读写。
另外,便利api允许额外的解析选项,除了 CHCSVParser
所提供的。 当你指定 CHCSVParserOptionUsesFirstLineAsKeys
选项,解析将返回 CHCSVOrderedDictionary
实例的array,而不是字符串数组的array 。
CHCSVOrderedDictionary
是一个 NSDictionary
子类,它维护对它的key-value 对的特定顺序,并允许你按索引查找键和值。
##Data 编码 CHCSVParser
依赖于知道内容的编码。 如果你能提供什么编码,它应该能处理几乎任何类型的文件编码。 CHCSVParser
将尝试从这些选项中猜出文件的编码:
- macOS Roman (
NSMacOSRomanStringEncoding
;默认/回退编码) - UTF-8 (
NSUTF8StringEncoding
) - UTF-16BE (
NSUTF16BigEndianStringEncoding
) - UTF-16LE (
NSUTF16LittleEndianStringEncoding
) - UTF-32BE (
NSUTF32BigEndianStringEncoding
) - UTF-32LE (
NSUTF32LittleEndianStringEncoding
) - ISO 2022-KR (
kCFStringEncodingISO_2022_KR
)