2016-12-23 12 views
0

私は同じファイルlevel1.txtとlvl2.txtを持っています。どちらもUTF-8と行間MacOS/Unixtxtファイルに見えない改行があります

ㅏ: ah 
ㅓ: eo/uh 
ㅡ: eu 
ㅣ: i 
ㅗ: o/oh 

私はそれらを読んでカードオブジェクトに入れています。しかし、最初のファイルが動作し、空の配列要素を作成し、空の文字列の第1要素と第2要素がないため、致命的なエラーインデックスを出力します。

私は、xcodeエディタとtextEditorの両方で新しいファイルを作成し、作業用テキストファイルからコードをコピー/ペーストすることによってlevel2.txtを再作成しようとしましたが、まだそこにない改行を検出します。誰かがなぜこれが起こっているのか、または目に見えないフォーマットを残さないxcodeプロジェクトで使用されるテキストファイルを作成するためのより良い方法を説明できますか?ありがとうございました。

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) 
       } 

答えて

0

1つのオプションは、あなたのコードは、より少ないまたは2つの以上のコンポーネントで行を無視することです例:

すべての通常の改行文字を考慮 CharacterSet.newlinesことで、私はラインを分離することをお勧めしますすべての
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

ジムありがとうございます。私は私のプロジェクトの後半でこれを使用すると確信しています。 –

1

ファースト。

第2のものはすべて空の行をフィルタリングするだけです。

let lines = levelContents.components(separatedBy: CharacterSet.newlines) 
         .filter{ !$0.isEmpty } 

PS:各行を1つのコロンで区切ると、テキストサンプルに応じて右側に先頭の空白文字が表示されることに注意してください。

+0

おかげでvadian。出来た!また、テキストファイルに先頭のスペースを含めないことをお勧めします。 –

関連する問題