TXT文件具有无形的线路断路



我有两个相同的文件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)
                }

首先,我建议通过CharacterSet.newlines分开行,该行考虑所有常规的newline字符。

第二只只是过滤空线。

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

ps:请注意,根据您的文本样本,将每条线通过单个结肠分开会导致右侧的领先空间字符。

一个选项是让您的代码忽略少于或超过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)
}

最新更新