Latest 2.0.1
Homepage https://github.com/vigneshuvi/SwiftCSVExport
License MIT
Platforms ios 8.0, osx 10.9, requires ARC
Frameworks Foundation
Authors

CSV Swift
Version
Language Swift
Swift Package Manager compatible
Carthage compatible

Swift CSV Export is lightweight & rich features framework and it helpful to create, read and write CSV files in simple way. It supports both Objective-C and Swift projects.

Features

  • Able to give CSV file name, headers and rows using property keys.
  • Able to convert JSON string into CSV.
  • Able to Read the CSV file and convert to NSDictionary.
  • Enable/Disable strict validation while write CSV file.
  • Able to Read the CSV file and convert to CSV class(Object Oriented Approach).
  • Support CocoaPods, mac OS and Vapor framework(Swift Package Manager).
  • Able to encoding CSV based on String.Encoding Type(utf8, ascii, unicode, utf16, etc) Refer: String.Encoding.
  • Able to view the exported CSV documents in iOS Files app by enabling the configuration in your project.
  • Handled the punctuation(n, t, t, and ,) characters in CSV file.

iOS/MacOS import headers

First thing is to import the framework. See the Installation instructions on how to add the framework to your project.


//iOS - Objective-C
@import SwiftCSVExport;

//iOS - Swift
import SwiftCSVExport

//macOS
import SwiftCSVExportOSX

Configuration

  • Add following keys in your project .plist file to view CSV exported CSV documents in iOS Files app.

Bundle display name - "APPLICATION NAME"
Application requires iPhone environment - YES
Supports opening documents in place - YES
Application supports iTunes file sharing - YES

Examples:

Example 1 – Objective-C


// First User Object
NSMutableDictionary *user1 = [NSMutableDictionary new];
[user1 setValue:@"vignesh" forKey:@"name" ];
[user1 setValue:@"[email protected]" forKey: @"email"];

// Secound User Object
NSMutableDictionary *user2 = [NSMutableDictionary new];
[user2 setValue:@"vinoth" forKey:@"name" ];
[user2 setValue:@"[email protected]" forKey: @"email"];

// CSV fields Array
NSMutableArray *fields = [NSMutableArray new];
[fields addObject:@"name"];
[fields addObject:@"email"];

// CSV rows Array
NSMutableArray *data = [NSMutableArray new];
[data addObject:user1];
[data addObject:user2];

NSString *userpath = [[CSVExport export] exportCSV:@"userlist1" fields:fields values:data];
NSLog(@"%@",userpath);

NSString *namepath =   [[CSVExport export] exportCSV:@"userlist1" fields:@[@"name", @"email"] values:data];
NSLog(@"%@",namepath);

// Able to convert JSON string into CSV.
NSString *string  = @"[{"name":"vignesh","email":"[email protected]"},{"name":"vinoth","email":"[email protected]"}]";
NSString *filePath   = [[CSVExport export] exportCSVString:@"userlist1"fields:fields values:string];

NSLog(@"%@",filePath);

Example 2 – Swift – Object Oriented Approach


// First User Object
let user1:NSMutableDictionary = NSMutableDictionary()
user1.setObject(107, forKey: "userid" as NSCopying);
user1.setObject("vignesh", forKey: "name" as NSCopying);
user1.setObject("vignesh[email protected]", forKey: "email" as NSCopying);
user1.setObject(true, forKey:"isValidUser" as NSCopying)
user1.setObject("Hi 'Vignesh!' nhow are you? t Shall we meet tomorrow? r Thanks ", forKey: "message" as NSCopying);
user1.setObject(571.05, forKey: "balance" as NSCopying);

// Secound User Object
let user2:NSMutableDictionary = NSMutableDictionary()
user2.setObject(108, forKey: "userid" as NSCopying);
user2.setObject("vinoth", forKey: "name" as NSCopying);
user2.setObject(false, forKey:"isValidUser" as NSCopying)
user2.setObject("[email protected]", forKey: "email" as NSCopying);
user2.setObject("Hi 'Vinoth!', nHow are you? t Shall we meet tomorrow? r Thanks ", forKey: "message" as NSCopying);
user2.setObject(567.50, forKey: "balance" as NSCopying);

// Add fields into columns of CSV headers
let header = ["userid", "name", "email", "message", "isValidUser","balance"]

// Add dictionary into rows of CSV Array
let data:NSMutableArray  = NSMutableArray()
data.add(user1);
data.add(user2);

// Create a object for write CSV
let writeCSVObj = CSV()
writeCSVObj.rows = data
writeCSVObj.delimiter = DividerType.comma.rawValue
writeCSVObj.fields = header as NSArray
writeCSVObj.name = "userlist"

// Write File using CSV class object
let result = exportCSV(writeCSVObj);
if result.isSuccess {
    guard let filePath =  result.value else {
        print("Export Error: (String(describing: result.value))")
        return
    }
    self.testWithFilePath(filePath, rowCount: data.count, columnCount: header.count)
    print("File Path: (filePath)")

    // Read File and convert as CSV class object
    let readCSVObj = readCSVObject(filePath);

    // Use 'SwiftLoggly' pod framework to print the Dictionary
    loggly(LogType.Info, text: readCSVObj.name)
} else {
    print("Export Error: (String(describing: result.value))")
}

Write & Read Output:


File Path: xxxxxx/xxxxxxx/Documents/Exports/userlist.csv

userid,name,email,message,isValidUser,balance
107,  "vignesh",  "[email protected]",  "Hi 'Vignesh!' nhow are you? t Shall we meet tomorrow? r Thanks ",  1,  571.05
108,  "vinoth",  "[email protected]",  "Hi 'Vinoth!', nHow are you? t Shall we meet tomorrow? r Thanks ",  0,  567.5
109,  "John",  "[email protected]",  "Hi 'John!' nHow are you? t Shall we meet tomorrow? r Thanks ",  1,  105.41

[💙 Info -  Jan 2, 2018, 4:52:28 PM]: userlist.csv

Example 3 – Swift – Enable Strict Validation


// Enable Strict Validation
CSVExport.export.enableStrictValidation = true

// Able to convert JSON string into CSV.
let string = "[{"name":"vignesh","email":"[email protected]"},{"name":"vinoth","email":"[email protected]"}]";

// Write File using CSV class object
let result1 = exportCSV("userlist", fields:["userid","name","email"], values:string);
XCTAssertEqual(false, result1.isSuccess)
if result1.isSuccess {
    guard let filePath =  result1.value else {
        print("Export Error: (String(describing: result1.value))")
        return
    }
    print("File Path: (filePath)")

} else {
    print("Export Error: (String(describing: result1.value))")
}

Write Output:


Export Error: Optional("Expected 3 columns, But Parsed 2 columns on row 1")

Example 4 – Swift


// Read File
let fileDetails = readCSV(filePath);

// Use 'SwiftLoggly' pod framework to print the Dictionary
if fileDetails.allKeys.count > 0 {
    loggly(LogType.Info, dictionary: fileDetails)
}

Read Output:


[💙 Info -  Jan 2, 2018, 4:52:21 PM]: {
  "fields" : [
    "userid",
    "name",
    "email",
    "message",
    "isValidUser",
    "balance"
  ],
  "rows" : [
    {
      "email" : ""[email protected]"",
      "message" : ""Hi 'Vignesh!' \nhow are you? \t Shall we meet tomorrow? \r Thanks "",
      "userid" : 107,
      "name" : ""vignesh"",
      "isValidUser" : 1,
      "balance" : 571.05
    },
    {
      "email" : ""[email protected]"",
      "message" : ""Hi 'Vinoth!', \nHow are you? \t Shall we meet tomorrow? \r Thanks "",
      "userid" : 108,
      "name" : ""vinoth"",
      "isValidUser" : 0,
      "balance" : 567.5
    },
    {
      "email" : ""[email protected]"",
      "message" : ""Hi 'John!' \nHow are you? \t Shall we meet tomorrow? \r Thanks "",
      "userid" : 109,
      "name" : ""John"",
      "isValidUser" : 1,
      "balance" : 105.41
    }
  ],
  "name" : "userlist.csv",
  "divider" : ","
}

That will create a CSV file in the proper directory on both OS X and iOS.

OS X CSV files will be created in the OS X Exports directory (found under: /Library/Exports). The iOS CSV files will be created in your apps document directory under a folder called Exports.

Configuration

There are a few configurable options in SwiftCSVExport.


//Set the name of the csv file
CSVExport.export.fileName = "Sample" //default is "csvfile"

//Set the directory in which the csv files will be written
CSVExport.export.directory = "/Library/XXX-folder-name-XXX" //default is the standard exporting directory for each platform.

// Able to set strict validation while create a new CSV file.
CSVExport.export.enableStrictValidation = true

Installation

CocoaPods

Check out Get Started tab on cocoapods.org.

To use SwiftCSVExport in your project add the following ‘Podfile’ to your project

  source 'https://github.com/CocoaPods/Specs.git'
  platform :ios, '8.0'
  use_frameworks!

  pod 'SwiftCSVExport'

Then run:

pod install || pod update

Carthage

To use SwiftCSVExport in your project create/update ‘Cartfile.private’ file into your project

// Require version 2.x

github "vigneshuvi/SwiftCSVExport"

Then run:

carthage update

Swift Package Manager for Vapor

You need to add to dependencies in your ‘Package.swift’ and fetch Swift module using terminal comment.

// Vapor

dependencies: [
.Package(url: "https://github.com/vigneshuvi/SwiftCSVExport.git", majorVersion: 2, minor: 0)
],

Then run:

vapor build || vapor xcode

// Importing header

import SwiftCSVExport

License

SwiftCSVExport is licensed under the MIT License.

Contact

Vignesh Kumar

Latest podspec

{
    "name": "SwiftCSVExport",
    "version": "2.0.1",
    "summary": "Simple way to export csv file with rich feature framework and written in Swift 3 & 4.",
    "description": "The SwiftCSVExport is a completely customizable framework that can be used in any iOS/Mac app.(CSV Parser & Data Formater)",
    "homepage": "https://github.com/vigneshuvi/SwiftCSVExport",
    "documentation_url": "https://github.com/vigneshuvi/SwiftCSVExport/blob/master/README.md",
    "license": "MIT",
    "authors": {
        "Vignesh Kumar": "http://vigneshuvi.github.io/"
    },
    "platforms": {
        "ios": "8.0",
        "osx": "10.9"
    },
    "source": {
        "git": "https://github.com/vigneshuvi/SwiftCSVExport.git",
        "tag": "2.0.1"
    },
    "source_files": [
        "SwiftCSVExport",
        "SwiftCSVExport/**/*.{h,m,swift}"
    ],
    "frameworks": "Foundation",
    "requires_arc": true
}

Pin It on Pinterest

Share This