2016-12-23 6 views
0

Ich habe zwei identische Dateien level1.txt und lvl2.txt. Beide sind UTF-8 und Zeilenabstand MacOS/UnixTxt-Dateien mit unsichtbaren Zeilenumbrüchen

Ich lese sie in und lege sie in Kartenobjekte. Die erste Datei funktioniert jedoch und die zweite erkennt einen zusätzlichen Zeilenumbruch, der ein leeres Array-Element erzeugt und mir einen fatalen Fehlerindex außerhalb des Bereichs gibt, weil es kein erstes und zweites Element einer leeren Zeichenfolge gibt.

Ich habe versucht, level2.txt neu zu erstellen, indem ich sowohl im xcode-Editor als auch im textEditor eine neue Datei anlege und den Code aus der funktionierenden Textdatei kopiere/einfüge, aber immer noch einen Zeilenumbruch feststelle. Könnte jemand erklären, warum dies passiert oder eine bessere Möglichkeit, Textdateien zu erstellen, die in xcode-Projekten verwendet werden, die keine unsichtbare Formatierung hinterlassen? Vielen Dank.

if let levelFilePath = Bundle.main.path(forResource: "level\(indexPath.row + 1)", ofType: "txt") { 

      if let levelContents = try? String(contentsOfFile: levelFilePath) { 
       print(levelContents) 
       //Split Q and A's by linebreak 
       let lines = levelContents.components(separatedBy: "\n") 

       for line in lines{ 
        //Splits each line into answer and clue 
        let parts = line.components(separatedBy: ":") 

        let card = Card(question: parts[0], answer: parts[1]) 
        currentDeck.append(card) 
       } 

Antwort

0

Eine Möglichkeit ist, den Code ignorieren Linien mit weniger oder mehr als zwei Komponenten zu haben, zum Beispiel:

for line in lines{ 
    //Splits each line into answer and clue 
    let parts = line.components(separatedBy: ":") 
    guard parts.count == 2 else { continue } 

    let card = Card(question: parts[0], answer: parts[1]) 
    currentDeck.append(card) 
} 
+0

Danke Jim. Ich bin mir sicher, dass ich das später in meinem Projekt verwenden werde. –

1

Vor allem empfehle ich die Linien von CharacterSet.newlines, die alle üblichen Zeilenumbrüche betrachtet zu trennen .

Zweitens von nur leere Zeilen filtern.

PS: Beachten Sie, dass das Trennen jeder Zeile durch einen einzelnen Doppelpunkt ein führendes Leerzeichen auf der rechten Seite entsprechend Ihrem Textmuster verursacht.

+0

Danke vadian. Es funktionierte! Auch, guter Vorschlag, den führenden Platz in meiner Textdatei nicht einzuschließen. –

Verwandte Themen