App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - App-ontwikkeling - Xcode: Line feed (enkele backslash) n wordt (dubbele backslash) n na parsing

Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje30 jun 2016, 19:24
Avatar
Avatar
Berichten:84


Ik heb het volgende probleem:

Ik heb csv files waarin in de tekst soms een (enkele backslash) n voorkomt (een line feed).

Na parsing van de csv file veranderd xcode dit in een (dubbele backslash) n

Dit wordt in een label gezien als tekst en niet als een line feed.

Het gaat "verkeerd" in deze code:

let lines:[String] = content.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) as [String]

Wie weet hoe dit op te lossen?

Cor

 

Hier is de volledige parsingcode:

 func parseCSVSituation (contentsOfURL: NSURL, encoding: NSStringEncoding) -> [( comment3:String, comment2:String, comment1:String,id_situation:String, situation_nr:String, language_id: String, country_id:String, situation_description:String, situation_yes:String, situation_no:String, situation_isdecision:String)]? {

        // Load the CSV file and parse it

        let delimiter = ","

       var items:[( comment3:String, comment2:String, comment1:String,id_situation:String, situation_nr:String, language_id: String, country_id:String, situation_description:String, situation_yes:String, situation_no:String, situation_isdecision:String)]?

        do {

            let content = try String(contentsOfURL: contentsOfURL, encoding: encoding)

            //print(content)

            items = []

            let lines:[String] = content.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) as [String]

            //print(lines)

            for line in lines {

                var values:[String] = []

                if line != "" {

//                     For a line with double quotes

//                     we use NSScanner to perform the parsing

                    if line.rangeOfString(""") != nil {

                        var textToScan:String = line

                        var value:NSString?

                        var textScanner:NSScanner = NSScanner(string: textToScan)

                        while textScanner.string != "" {

                            if (textScanner.string as NSString).substringToIndex(1) == """ {

                                textScanner.scanLocation += 1

                                textScanner.scanUpToString(""", intoString: &value)

                                textScanner.scanLocation += 1

                            } else {

                                textScanner.scanUpToString(delimiter, intoString: &value)

                            }

                        

                            // Store the value into the values array

                            values.append(value as! String)

                            

                            // Retrieve the unscanned remainder of the string

                            if textScanner.scanLocation < textScanner.string.characters.count {

                                textToScan = (textScanner.string as NSString).substringFromIndex(textScanner.scanLocation + 1)

                            } else {

                                textToScan = ""

                            }

                            textScanner = NSScanner(string: textToScan)

                        }

                        

                        // For a line without double quotes, we can simply separate the string

                        // by using the delimiter (e.g. comma)

                    } else  {

                        values = line.componentsSeparatedByString(delimiter)

                }

                    // Put the values into the tuple and add it to the items array

                    let item = (comment3: values[0], comment2: values[1], comment1: values[2], id_situation: values[3], situation_nr: values[4], language_id: values[5], country_id: values[6], situation_description: values[7], situation_yes: values[8], situation_no: values[9], situation_isdecision: values[10])

                    items?.append(item)

            }

            }

            

        } catch {

            print(error)

        }

        return items

    }

 

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje01 jul 2016, 09:42
Avatar
Avatar
Berichten:84


Opgelost met een workaround!

De (backslash) n wijzig ik in mijn csv file in een html break <br>

Na de parsing wijzig ik een deel van de string in de variabele met:

              strTemp = str.stringByReplacingOccurrencesOfString("(htmlbreak)", withString: "(backslash) n", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

 

NB: Ik schrijf hierboven (backslash) en (htmlbreak) omdat het echte teken wordt weggelaten in het forumbericht.

 

Prunus

Reageer

Goed advies! 1 persoon vindt dit goed advies.