22
33[ ![ Build Status] ( https://travis-ci.org/yaslab/CSV.swift.svg?branch=master )] ( https://travis-ci.org/yaslab/CSV.swift )
44
5- CSV reading library written in Swift.
5+ CSV reading and writing library written in Swift.
66
7- ## Usage
7+ ## Usage for reading CSV
88
9- ### From CSV string
9+ ### From string
1010
1111``` swift
1212import CSV
1313
14- for row in try ! CSV (string : " 1,foo\n 2,bar" ) {
14+ let csvString = " 1,foo\n 2,bar"
15+ let csv = try ! CSVReader (string : csvString)
16+ while let row = csv.next () {
1517 print (" \( row ) " )
16- // => ["1", "foo"]
17- // => ["2", "bar"]
1818}
19+ // => ["1", "foo"]
20+ // => ["2", "bar"]
1921```
2022
21- ### From file path
23+ ### From file
2224
2325``` swift
2426import Foundation
2527import CSV
2628
2729let stream = InputStream (fileAtPath : " /path/to/file.csv" )!
28- for row in try ! CSV (stream : stream) {
30+ let csv = try ! CSVReader (stream : stream)
31+ while let row = csv.next () {
2932 print (" \( row ) " )
3033}
3134```
@@ -35,30 +38,30 @@ for row in try! CSV(stream: stream) {
3538``` swift
3639import CSV
3740
38- let csv = try ! CSV (
39- string : " id,name \n 1,foo \n 2,bar " ,
40- hasHeaderRow : true ) // default: false
41+ let csvString = " id,name \n 1,foo \n 2,bar "
42+ let csv = try ! CSVReader ( string : csvString ,
43+ hasHeaderRow : true ) // It must be true.
4144
4245let headerRow = csv.headerRow !
4346print (" \( headerRow ) " ) // => ["id", "name"]
4447
45- for row in csv {
48+ while let row = csv. next () {
4649 print (" \( row ) " )
47- // => ["1", "foo"]
48- // => ["2", "bar"]
4950}
51+ // => ["1", "foo"]
52+ // => ["2", "bar"]
5053```
5154
5255### Get the field value using subscript
5356
5457``` swift
5558import CSV
5659
57- var csv = try ! CSV (
58- string : " id,name \n 1,foo " ,
59- hasHeaderRow : true ) // It must be true.
60+ let csvString = " id,name \n 1,foo "
61+ let csv = try ! CSVReader ( string : csvString ,
62+ hasHeaderRow : true ) // It must be true.
6063
61- while let _ = csv.next () {
64+ while csv.next () != nil {
6265 print (" \( csv[" id" ]! ) " ) // => "1"
6366 print (" \( csv[" name" ]! ) " ) // => "foo"
6467}
@@ -72,24 +75,71 @@ If you use a file path, you can provide the character encoding to initializer.
7275import Foundation
7376import CSV
7477
75- let csv = try ! CSV (
76- stream : InputStream (fileAtPath : " /path/to/file.csv" )! ,
77- codecType : UTF16 .self ,
78- endian : .big )
78+ let stream = InputStream (fileAtPath : " /path/to/file.csv" )!
79+ let csv = try ! CSV (stream : stream,
80+ codecType : UTF16 .self ,
81+ endian : .big )
82+ ```
83+
84+ ## Usage for writing CSV
85+
86+ ### Write to memory and get a CSV String
87+
88+ ``` swift
89+ import Foundation
90+ import CSV
91+
92+ let stream = OutputStream (toMemory : ())
93+ let csv = try ! CSVWriter (stream : stream)
94+
95+ // Write a row
96+ try ! csv.write (row : [" id" , " name" ])
97+
98+ // Write fields separately
99+ csv.beginNewRow ()
100+ try ! csv.write (field : " 1" )
101+ try ! csv.write (field : " foo" )
102+ csv.beginNewRow ()
103+ try ! csv.write (field : " 2" )
104+ try ! csv.write (field : " bar" )
105+
106+ csv.stream .close ()
107+
108+ // Get a String
109+ let csvData = stream.property (forKey : .dataWrittenToMemoryStreamKey ) as! NSData
110+ let csvString = String (data : Data (referencing : csvData), encoding : .utf8 )!
111+ print (csvString)
112+ // => "id,name\n1,foo\n2,bar"
113+ ```
114+
115+ ### Write to file
116+
117+ ``` swift
118+ import Foundation
119+ import CSV
120+
121+ let stream = OutputStream (toFileAtPath : " /path/to/file.csv" , append : false )!
122+ let csv = try ! CSVWriter (stream : stream)
123+
124+ try ! csv.write (row : [" id" , " name" ])
125+ try ! csv.write (row : [" 1" , " foo" ])
126+ try ! csv.write (row : [" 1" , " bar" ])
127+
128+ csv.stream .close ()
79129```
80130
81131## Installation
82132
83133### CocoaPods
84134
85135``` ruby
86- pod ' CSV.swift' , ' ~> 1.1 '
136+ pod ' CSV.swift' , ' ~> 2.0 '
87137```
88138
89139### Carthage
90140
91141```
92- github "yaslab/CSV.swift" ~> 1.1
142+ github "yaslab/CSV.swift" ~> 2.0
93143```
94144
95145### Swift Package Manager
@@ -100,7 +150,7 @@ import PackageDescription
100150let package = Package (
101151 name : " PackageName" ,
102152 dependencies : [
103- .Package (url : " https://github.com/yaslab/CSV.swift.git" , majorVersion : 1 , minor : 1 )
153+ .Package (url : " https://github.com/yaslab/CSV.swift.git" , majorVersion : 2 , minor : 0 )
104154 ]
105155)
106156```
0 commit comments