使用Swift 2.0从文本文件创建的字符串中获取数组组件

时间:2016-06-11 00:55:59

标签: swift csv nsmutablearray

我有一个文本文件,格式如下(以下简称):

Title";"SeriesID";"ChannelName
Title1";"00000001";"Channel1
Title2";"00000002";"Channel2
Title3";"00000003";"Channel3
...
Title99999999";"99999999";"Channel99999999

我已将此文本文件作为资源加载到Xcode 7中,并按如下方式解析它:

class TVSeriesTableViewController: UITableViewController {

    var seriesDict = [String:String]()
    var seriesArray = NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        let path = NSBundle.mainBundle().pathForResource("series", ofType: "txt")

        let filemgr = NSFileManager.defaultManager()
        if filemgr.fileExistsAtPath(path!) {

            do {

                let fullText = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)

                let readings = fullText.componentsSeparatedByString("\n") as [String]

                for i in 1..<readings.count {

                    let seriesData = readings[i].componentsSeparatedByString("\";\"")

                    seriesDict["Title"] = "\(seriesData[0])"
                    seriesDict["SeriesID"] = "\(seriesData[1])"
                    seriesDict["ChannelName"] = "\(seriesData[2])"

                    seriesArray.addObject(seriesDict)

                }

                for element in seriesArray {

                    print(element)

                }

            } catch let error as NSError {

                print("Error: \(error)")

            }

        }

        self.title = "TV Series"

    }
}

由于某种原因,上面的脚本会引发索引超出范围错误,但是如果我切换

seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[1])"
seriesDict["ChannelName"] = "\(seriesData[2])"

seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[0])"
seriesDict["ChannelName"] = "\(seriesData[0])"

没有错误。我一直试图找出为什么我似乎无法访问seriesData的第二和第三个组件。经过一些调试后,我注意到seriesData的结构如下:

["Title1", "00000001", "Channel1"]
["Title2", "00000002", "Channel2"]
["Title3", "00000003", "Channel3"]
[...]
["Title99999999", "99999999", "Channel99999999"]

我是Xcode / Swift的新手,所以我们非常感谢任何帮助(以及上述原因失败的解释。谢谢!

2 个答案:

答案 0 :(得分:0)

我猜你的问题是Xcode没有添加&#34; series.txt&#34;将文件存入您项目的复制包资源。要执行此操作,请单击界面左侧面板上导航视图中的蓝色项目图标。 (它应该在顶部)。enter image description here

(图标以蓝色突出显示)。 单击后,转到Build Phases(带蓝色字体的选项卡)enter image description here

在视图底部点击复制捆绑资源,然后按加号并添加 series.txt 文件enter image description here

这样做会将 series.txt 文件添加到主包中,从而可以通过NSBundle.mainBundle().pathForResource("series", ofType: "txt")

访问它

希望这有帮助! :d

答案 1 :(得分:0)

错误被抛出,因为文件的最后一行是一个空行。试图弄清楚如何不阅读,但这是一个单独的问题,我想我能够弄明白。