| 
1 |  | -# CSV  | 
2 |  | - | 
3 | 1 | <p align="center">  | 
4 | 2 | 	<a href="https://github.com/benkoska/CSV.Swift/actions">  | 
5 | 3 | 		<img src="https://img.shields.io/github/workflow/status/benkoska/csv.swift/Main%20Workflow/master" alt="CI Status" />  | 
 | 
18 | 16 | 	</a>  | 
19 | 17 | </p>  | 
20 | 18 | 
 
  | 
 | 19 | + | 
 | 20 | +# CSV  | 
 | 21 | +CSV.swift is a powerful swift library for parsing CSV files that supports reading as `[String]`, `[String: String]` and `Decodable`, without sacrificing performance.  | 
 | 22 | + | 
 | 23 | +CSV.swift also supports the new `async/await` functionality of swift 5.5.  | 
 | 24 | + | 
 | 25 | +# Why?  | 
 | 26 | +There are already a few CSV parsers for Swift, but I was not able to find one that had support for high-speed parsing, while still offering convenience features, such as parsing Decodables.  | 
 | 27 | + | 
 | 28 | + | 
 | 29 | +## ⚡ Speed Comparison  | 
 | 30 | +[Coming Soon]  | 
 | 31 | + | 
 | 32 | +# Installation  | 
 | 33 | +## Swift Package Manager  | 
 | 34 | +CSV.Swift is compatible with Swift Package Manager. Simply add it to your project's `Package.swift`.  | 
 | 35 | +```swift  | 
 | 36 | +dependencies: [  | 
 | 37 | +	.package(url: "https://github.com/benkoska/csv.swift.git", from: "0.1.0")  | 
 | 38 | +],  | 
 | 39 | +targets: [  | 
 | 40 | +	.target(  | 
 | 41 | +		name: "Project",  | 
 | 42 | +		dependencies: [  | 
 | 43 | +			.product(name: "CSV", package: "csv")  | 
 | 44 | +		]  | 
 | 45 | +	)  | 
 | 46 | +]  | 
 | 47 | +```  | 
 | 48 | + | 
 | 49 | +After the installation you can import `CSV` in your `.swift` files.  | 
 | 50 | + | 
 | 51 | +```swift  | 
 | 52 | +import CSV  | 
 | 53 | +```  | 
 | 54 | + | 
 | 55 | +# Usage  | 
 | 56 | +```swift  | 
 | 57 | +let string = "joe,doe,28"  | 
 | 58 | +let parser = try CSVParser(url: url, header: ["firstName", "lastName", "age"])  | 
 | 59 | +```  | 
 | 60 | + | 
 | 61 | +Get next as array  | 
 | 62 | +```swift  | 
 | 63 | +parser.next() // => Optional<["joe", "doe", "28"]>  | 
 | 64 | +```  | 
 | 65 | + | 
 | 66 | +Get next as dictionary  | 
 | 67 | +```swift  | 
 | 68 | +try parser.nextAsDict() // => Optional<["firstName": "joe", "lastName": "doe", "age": "28"]>  | 
 | 69 | +```  | 
 | 70 | + | 
 | 71 | +Decode next from `Decodable`  | 
 | 72 | +```swift  | 
 | 73 | +struct Person: Decodable {  | 
 | 74 | +	let firstName: String  | 
 | 75 | +	let lastName: String  | 
 | 76 | +	let age: Int  | 
 | 77 | +}  | 
 | 78 | + | 
 | 79 | +try parser.next(as: Person.self) // => Optional<Person(firstName: "joe", lastName: "doe", age: 28)>  | 
 | 80 | +```  | 
 | 81 | + | 
 | 82 | +## Create parser from `URL`  | 
 | 83 | +```swift  | 
 | 84 | +let parser = try CSVParser(url: url)  | 
 | 85 | +let parser = try CSVParser(url: url, delimiter: "|")  | 
 | 86 | +let parser = try CSVParser(url: url, delimiter: "|", hasHeader: true)  | 
 | 87 | +let parser = try CSVParser(url: url, delimiter: "|", header: ["firstName", "lastName", "age"])  | 
 | 88 | +```  | 
 | 89 | + | 
 | 90 | +## Create parser from `String`  | 
 | 91 | +```swift  | 
 | 92 | +let string = "joe,doe,28\njane,doe,21"  | 
 | 93 | +let string2 = "joe|doe|28\njane|doe|21"  | 
 | 94 | +let string3 = "firstName|lastName|age\njoe|doe|28\njane|doe|21"  | 
 | 95 | + | 
 | 96 | +let parser = try CSVParser(string: string)  | 
 | 97 | +let parser = try CSVParser(string: string2, delimiter: "|")  | 
 | 98 | +let parser = try CSVParser(string: string3, delimiter: "|", hasHeader: true)  | 
 | 99 | +let parser = try CSVParser(string: string2, delimiter: "|", header: ["firstName", "lastName", "age"])  | 
 | 100 | +```  | 
 | 101 | + | 
 | 102 | +## Create parser from `Data`  | 
 | 103 | +```swift  | 
 | 104 | +let parser = try CSVParser(data: data)  | 
 | 105 | +let parser = try CSVParser(data: data, delimiter: "|")  | 
 | 106 | +let parser = try CSVParser(data: data, delimiter: "|", hasHeader: true)  | 
 | 107 | +let parser = try CSVParser(data: data, delimiter: "|", header: ["firstName", "lastName", "age"])  | 
 | 108 | +```  | 
 | 109 | + | 
 | 110 | +# Disclaimer  | 
 | 111 | +Until `Swift.CSV` reaches version 1.0.0 the API is subject to breaking changes between minor version jumps.  | 
 | 112 | + | 
 | 113 | +The being said, I will try to minimize breaking changes to the public API.  | 
 | 114 | + | 
 | 115 | +# Author  | 
 | 116 | + | 
 | 117 | + | 
 | 118 | +# License  | 
 | 119 | +Swift.CSV is available under the MIT license. See the LICENSE file for more info.  | 
0 commit comments