swift 3.1 how to get array or dictionary from CSV

前端 未结 4 1310
孤独总比滥情好
孤独总比滥情好 2020-12-24 01:50

How could I use data in this kind of CSV file? Or how could I print for example row 2 value for \"inside\" column and assign it to a property / entity?

I have this k

4条回答
  •  忘掉有多难
    2020-12-24 02:41

    Swift 5.0 .scanLocaion and .scanUpTo() were deprecated in iOS13. Here's a working version of Chhaileng's answer.

     func openCSV(fileName:String, fileType: String)-> String!{
        guard let filepath = Bundle.main.path(forResource: fileName, ofType: fileType)
            else {
                return nil
        }
        do {
            let contents = try String(contentsOfFile: filepath, encoding: .utf8)
    
            return contents
        } catch {
            print("File Read Error for file \(filepath)")
            return nil
        }
    }
    
     func parseCSV(){
    
        let dataString: String! = openCSV(fileName: "MeislinDemo", fileType: "csv")
        var items: [(String, String, String)] = []
        let lines: [String] = dataString.components(separatedBy: NSCharacterSet.newlines) as [String]
    
        for line in lines {
           var values: [String] = []
           if line != "" {
               if line.range(of: "\"") != nil {
                   var textToScan:String = line
                   var value:String?
                   var textScanner:Scanner = Scanner(string: textToScan)
                while !textScanner.isAtEnd {
                       if (textScanner.string as NSString).substring(to: 1) == "\"" {
    
    
                           textScanner.currentIndex = textScanner.string.index(after: textScanner.currentIndex)
    
                           value = textScanner.scanUpToString("\"")
                           textScanner.currentIndex = textScanner.string.index(after: textScanner.currentIndex)
                       } else {
                           value = textScanner.scanUpToString(",")
                       }
    
                        values.append(value! as String)
    
                    if !textScanner.isAtEnd{
                            let indexPlusOne = textScanner.string.index(after: textScanner.currentIndex)
    
                        textToScan = String(textScanner.string[indexPlusOne...])
                        } else {
                            textToScan = ""
                        }
                        textScanner = Scanner(string: textToScan)
                   }
    
                   // For a line without double quotes, we can simply separate the string
                   // by using the delimiter (e.g. comma)
               } else  {
                   values = line.components(separatedBy: ",")
               }
    
               // Put the values into the tuple and add it to the items array
               let item = (values[0], values[1], values[2])
               items.append(item)
               print(item.0)
               print(item.1)
               print(item.2)
            }
        }
    
    }
    

提交回复
热议问题