Skip to content

Commit d10c3e9

Browse files
committed
add basic Readme
1 parent 20d2423 commit d10c3e9

File tree

1 file changed

+101
-2
lines changed

1 file changed

+101
-2
lines changed

README.md

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# CSV
2-
31
<p align="center">
42
<a href="https://github.com/benkoska/CSV.Swift/actions">
53
<img src="https://img.shields.io/github/workflow/status/benkoska/csv.swift/Main%20Workflow/master" alt="CI Status" />
@@ -18,3 +16,104 @@
1816
</a>
1917
</p>
2018

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

Comments
 (0)