CHCSVParser 是一个 CSV 文件的 Objective-C 解析器。
为了使用 CHCSVParser,您需要在项目中包含以下两个文件:
CHCSVParser.hCHCSVParser.mCHCSVParser 需要 ARC。
CHCSVParser 与 NSXMLParser 类似,它在解析数据时同步调用代理回调方法,以便您知道它已找到字段、已读取完一行或遇到了语法错误。
CHCSVParser 可以通过以下三种方式之一创建:
NSString 的内容NSInputStreamCHCSVParser 可以配置为解析其他“字符分隔”文件格式,如“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
任何人免费获得本软件及其相关文档副本(简称“软件”),无论出于何种目的,均可无限制地使用、复制、修改、合并、发布、分发、许可或销售软件副本,以及允许第三方使用软件,本协议仅限于以下条件:
上述版权声明和本许可声明应包含于软件的副本中。
软件按“原样”提供,不提供任何形式的保修,无论是明示还是暗示的,包括但不限于适用性、特定目的和版权的侵权担保。在任何事件中,无论是在合同行为、侵权行为或任何其他行为中,作者或版权所有者都不会因其软件的使用、销售或分销而承担任何索赔、损害或其他责任。