带有不可见换行符的txt文件

时间:2016-12-23 14:56:29

标签: swift

我有两个相同的文件level1.txt和lvl2.txt。两者都是UTF-8和行间距MacOS / Unix

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

我正在阅读它们并将它们放入卡片对象中。但是,第一个文件工作,第二个文件检测到一个额外的换行符,它会创建一个空的数组元素,并给出一个超出范围的致命错误索引,因为没有空字符串的第一个和第二个元素。

我尝试通过在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)
                }

2 个答案:

答案 0 :(得分:1)

首先,我建议将CharacterSet.newlines分隔为考虑所有常用换行符的行。

其次只是过滤空行。

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

PS:请注意,根据您的文本示例,将每一行分隔为单个冒号会在右侧导致前导空格字符。

答案 1 :(得分:0)

一种选择是让您的代码忽略具有少于或多于2个组件的行,例如:

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