【问题标题】:Fill an array with strings from a txt file用 txt 文件中的字符串填充数组
【发布时间】:2014-06-20 12:40:46
【问题描述】:

Data.txt 包含如下内容: “猫” “狗” “鼠标”

我想用该文件中的字符串填充一个数组(dico[0] = "Cat", dico[1] = "Dog", aso)。

我发现了这个,How to call Objective-C's NSArray class method from within Swift?Read and write data from text file,但是当我使用这个代码时:

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("data", ofType: "txt")
let dico = NSArray(contentsOfFile: path)

println("\(dico[0])")
println("\(dico.count)")

我得到的只是“nil”和“0”。

我猜我文件中的数据没有按照应有的方式写入,而且我使用的代码也不正确,但我不知道为什么。

此外,当我使用此代码时,没关系:

    let bundle = NSBundle.mainBundle()
    let path = bundle.pathForResource("data", ofType: "txt")
    let dico = NSString(contentsOfFile: path)

    println("\(dico)")

问题是我不希望 dico 是一个字符串,我希望它是一个数组。

【问题讨论】:

标签: arrays swift


【解决方案1】:

arrayWithContentsOfFile 不是这样工作的。

它期望一个文件的路径作为其参数,该文件包含由writeToFile:atomically: 方法生成的数组的字符串表示形式。

出于您的目的,您可以使用第二种方法,并在您的字符串上调用componentsSeparatedByString() 作为补充。

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("data", ofType: "txt")
let dico = NSString(contentsOfFile: path).componentsSeparatedByString("\n")

【讨论】:

  • @Piercy 很高兴能帮上忙。另外,如果您认为它解决了您的问题,请记住接受/赞成这个答案。您也应该对过去收到的任何解决您之前问题的问题的答案执行相同的操作。这会奖励回答者,给您带来一点声誉,并帮助社区中的其他成员找出一个好的答案。
  • 投票需要15声望,我是新来的。 ;) 不过,请确保我会在有能力的时候投票。
  • NSString(contentsOfFile: path) 不再适用于 swift
【解决方案2】:

NSArray 的arrayWithContentsOfFile: 初始化器不适合与常规文本文件一起使用。它仅适用于使用 NSArray 的 writeToFile:atomically: 创建的文件

假设您要将文本文件中的单词拆分为一个数组,并假设每个单词将由空格分隔,您可以执行以下操作:

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("data", ofType: "txt")
let dico = NSString(contentsOfFile: path)

let components = dico.componentsSeparatedByString(" ")

println("\(components)")

【讨论】:

  • 我是新来的,所以我不能投票。但如果可以的话,我会的。您指出了我的错误并给了我解决方案。非常感谢。
  • 很高兴听到,您应该仍然能够接受答案 :) 这也将有助于提高您的声誉。
  • 这给了我“init(contentsOfFile:) 不可用”,因为它已被弃用
  • 你应该使用 init(contentsOfFile:encoding:error:) 代替。
【解决方案3】:

您尝试读取的文件必须使用writeToFile:atomically: 方法创建。这就是文档所说的:

aPath - 包含数组表示的文件的路径 由 writeToFile:atomically: 方法生成。

因此,您必须使用上述方法创建文件,或者将其作为字符串读取,然后使用 componentsSeparatedByString: 方法将其转换为数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多