2015-06-18 2 views
4

Я анализирую данные из файла csv в словарь с помощью github.
После анализа я получаю этот тип словаря: -Parse CSV файл в swift

{ 
"" = ""; 
"\"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 
    } 
}