2015-06-18 32 views
4

我借助github将csv文件中的数据解析为字典。
解析我得到这种类型的词典后: -在swift中解析CSV文件

{ 
"" = ""; 
"\"barred_date\"" = "\"\""; 
"\"company_id\"" = "\"1\""; 
"\"company_name\"" = "\"\""; 
"\"contact_no\"" = "\"1234567890\""; 
"\"created_date\"" = "\"2015-06-01 12:43:11\""; 
"\"current_project\"" = "\"111\""; 
"\"designation\"" = "\"Developer\""; 
"\"doj\"" = "\"2015-06-01 00:00:00\""; 
"\"fin_no\"" = "\"ABC001\""; 
"\"first_name\"" = "\"sssd\""; 
"\"last_name\"" = "\"dd\""; 
"\"project_name\"" = "\"Project 1\""; 
"\"qr_code\"" = "\"12345678\""; 
"\"resignation_date\"" = "\"\""; 
"\"status\"" = "\"1\""; 
"\"work_permit_no\"" = "\"ssdda11\""; 
"\"worker_id\"" = "\"1\""; 
"\"worker_image\"" = "\"assets/uploads/workers/eb49364ca5c5d22f11db2e3c84ebfce6.jpeg\""; 
"\"worker_image_thumb\"" = "\"assets/uploads/workers/thumbs/eb49364ca5c5d22f11db2e3c84ebfce6.jpeg\"";} 

我怎样才能将其转换为简单的字典。我需要的数据这样的“COMPANY_ID” =“1”

感谢

+0

这似乎是一个非常简单的CSV阅读器,它根本不处理引用的字段。例如,“a,b”,“c,d”应该被看作带有内容“a,b”和“c,d”(不带引号)的内容的两个*字段。从SwiftCSV快速浏览一下,在我看来,这是不正确的处理。 –

+0

你可以建议我任何其他解析器,这将简单易用... – chakshu

+0

对不起,我没有任何建议。 –

回答

5

使用CSwiftV解析器来代替:https://github.com/Daniel1of1/CSwiftV

它实际上处理引用的文本,因此,它可以处理换行符和逗号文本。 SwiftCSV花了我一些时间,因为它不处理。但我没有了解CSV格式,并解析它;)

2

推荐使用CSVImporter - 它需要照顾之类的东西引用的文字(以下RFC 4180)为您甚至处理非常大的文件没有问题。

其它方案相比,它的工作原理都异步(防止延迟)和逐行读取,而不是加载整个字符串到内存(可以避免内存问题)CSV文件行。最重要的是,它是易于使用并提供美丽的回调用于指示失败,进度,完成,如果你愿意,甚至数据映射


你可以使用它像这样每行得到一个字符串数组:

let path = "path/to/your/CSV/file" 
let importer = CSVImporter<[String]>(path: path) 
importer.startImportingRecords { $0 }.onFinish { importedRecords in 
    for record in importedRecords { 
     // record is of type [String] and contains all data in a line 
    } 
} 

更复杂的功能像头结构支持这样的优势:

// given this CSV file content 
firstName,lastName 
Harry,Potter 
Hermione,Granger 
Ron,Weasley 

// you can import data in Dictionary format 
let path = "path/to/Hogwarts/students" 
let importer = CSVImporter<[String: String]>(path: path) 
importer.startImportingRecords(structure: { (headerValues) -> Void in 

    // use the header values CSVImporter has found if needed 
    print(headerValues) // => ["firstName", "lastName"] 

}) { $0 }.onFinish { importedRecords in 

    for record in importedRecords { 
     // a record is now a Dictionary with the header values as keys 
     print(record) // => e.g. ["firstName": "Harry", "lastName": "Potter"] 
     print(record["firstName"]) // prints "Harry" on first, "Hermione" on second run 
     print(record["lastName"]) // prints "Potter" on first, "Granger" on second run 
    } 
}