0

I have this file text

enter image description here

and I want to put this in an [[String]] in order to have it like this:

[
["Quanto tempo dopo il risveglio fumi la prima sigaretta?", "Entro 5 minuti", "Da 6 a 30 minuti", "Da 31 a 60 minuti", "Dopo 60 minuti"], 
["Ti riesce difficile non fumare nei luoghi dove è vietato?", "Sì", "No"],
["A quale sigaretta della giornata faresti più fatica a rinunciare?", "La prima del mattino", "Una delle successive"],
["Quante sigarette fumi al giorno?", "10 o meno", "Da 11 a 20", "Da 21 a 30", "31 o più"],
["Fumi più durante la prima ora dopo il risveglio che durante il resto della giornata?", "Sì", "No"]
]

so I've done this:

let data = try! String(contentsOf: Bundle.main.url(forResource: "questions", withExtension: "txt")!, encoding:
            .utf8)
            .components(separatedBy: "\n")
            .map { $0.components(separatedBy: "\n\n") }
print(data)

but I get instead a [[String]] like this:

[
["Quanto tempo dopo il risveglio fumi la prima sigaretta?"],
["Entro 5 minuti"],
["Da 6 a 30 minuti"],
["Da 31 a 60 minuti"],
["Dopo 60 minuti"],
[""],
["Ti riesce difficile non fumare nei luoghi dove è vietato?"],
["Sì"],
["No"],
[""],
["A quale sigaretta della giornata faresti più fatica a rinunciare?"],
["La prima del mattino"],
["Una delle successive"],
[""],
["Quante sigarette fumi al giorno?"],
["10 o meno"],
["Da 11 a 20"],
["Da 21 a 30"],
["31 o più"],
[""],
["Fumi più durante la prima ora dopo il risveglio che durante il resto della giornata?"],
["Sì"],
["No"],
[""]
]

something is an error with the escape sequences.

Leo Dabus
  • 229,809
  • 59
  • 489
  • 571
Elia Crocetta
  • 318
  • 1
  • 6
  • 20

1 Answers1

1

Your separators are in the wrong order. What you want is to first separate the file contents by paragraphs (with \n\n) and then separate each paragraph by lines (with \n):

let text = "line1\nline2\n\nline3\nline4"
let separated = text.components(separatedBy: "\n\n")
    .map { $0.components(separatedBy: "\n") }

print(separated) // [["line1", "line2"], ["line3", "line4"]]

Another option is to split the file into an array of lines, and then split the array at empty lines:

let separated = text.components(separatedBy: "\n")
      .split(separator: "")
      .map(Array.init) // transform slices to proper arrays
Martin R
  • 529,903
  • 94
  • 1,240
  • 1,382