• Stars
    star
    126
  • Rank 275,631 (Top 6 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Swift CSV Export is rich features framework and it helpful to read and write CSV in simple way.

CSV Swift Version Language Swift Swift Package Manager compatible Carthage compatible

SwiftCSVExport

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

  • Support swift 4, 4.2 and 5 and latest Xcode(12)
  • 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.

Swift Version

Supported swift 4, 4.2 and 5 and latest Xcode

pod 'SwiftCSVExport' , '= 2.0.2' // Swift 4
pod 'SwiftCSVExport' , '= 2.0.3' // Swift 4.2
pod 'SwiftCSVExport' , '= 2.3.0' // Swift 5
pod 'SwiftCSVExport' , '= 2.6.0' // Latest Xcode 12


iOS/MacOS import headers

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

Refer iOS Examples:Here. Refer Mac Examples:Here.

//iOS - Objective-C
@import SwiftCSVExport;

//iOS - Swift
import SwiftCSVExport

//macOS - Old swift version < 4
import SwiftCSVExportOSX 

//macOS - New swift version > 4
import SwiftCSVExport

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("[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

More Repositories

1

iOS-Signature-Capture

iOS-Signature-Capture is helps to capture the user signature with name and signed date in iOS and supports both Objective-c and Swift languages.
Swift
52
star
2

SwiftLoggly

Simple way to logging with rich feature framework in Swift.
Swift
34
star
3

GoDateFormat

GoLang date time format - Helpful to convert normal date/time into GoLang date/time format.
Go
24
star
4

CoreData

Swift Core Data Basics with easy sample project.
Swift
8
star
5

Go-Micro-Service

Simple Golang Micro Manager is useful to create RestFul web services using Golang.
Go
7
star
6

TicTacToe

A Simple Tic Tac Toe iOS Game App to connect iWatch and iPhone using Swift 3.
Swift
6
star
7

SwiftPDFGenerator

Simple way to export PDF file from HTML with rich feature framework in Swift.
Swift
4
star
8

SwiftColorMemory

A simple iOS game to check your memory power and written in Swift 3.0
Swift
4
star
9

cordova-plugin-echo

Simple Cordova plugin that helps to echo the message and it will support both iOS and Android platforms.
Objective-C
4
star
10

node-webservice-manager

Simple Node Service Manager is useful to create RestFul web services using Express and Node.js.
JavaScript
3
star
11

vigneshuvi.github.io

Profile Web site.
HTML
2
star
12

Objective-C-Delegate-Swift

Register Objective-C delegate method from Swift Project.
1
star
13

reactskeleton

Integrated React + Redux. Implemented async call. Designed skeleton Arch.
JavaScript
1
star
14

cordova-plugin-nativealert

Cordova plugin dialog and alert-box - Helps to use native alert view and it will support both iOS and Android platforms.
Objective-C
1
star
15

SwiftCloneCLI

SwiftCloneCLI helps to clone bitbucket repository with user interaction from terminal.
Swift
1
star