使用 Swift 2.0 从文本文件创建的字符串中获取数组组件
Grab array components from string created from text file using Swift 2.0
我有一个格式如下(缩写如下)的文本文件:
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 的新手,因此非常感谢任何帮助(以及对上述失败原因的解释。谢谢!
我猜你的问题是 Xcode 没有将 "series.txt" 文件添加到项目的复制包资源中。为此,请单击界面左侧面板导航视图中的蓝色项目图标。 (它应该在顶部)。
(以蓝色突出显示的图标)。
单击它之后,转到构建阶段(带有蓝色字体的选项卡)
然后在视图底部单击复制捆绑资源,然后按加号并添加您的series.txt文件
这样做会将 series.txt 文件添加到主包中,从而可以通过 NSBundle.mainBundle().pathForResource("series", ofType: "txt")
访问它
希望对您有所帮助! :D
由于文件的最后一行是空行,所以出现了错误。试图弄清楚如何不读它,但这是一个单独的问题,我想我能弄清楚。
我有一个格式如下(缩写如下)的文本文件:
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 的新手,因此非常感谢任何帮助(以及对上述失败原因的解释。谢谢!
我猜你的问题是 Xcode 没有将 "series.txt" 文件添加到项目的复制包资源中。为此,请单击界面左侧面板导航视图中的蓝色项目图标。 (它应该在顶部)。
(以蓝色突出显示的图标)。
单击它之后,转到构建阶段(带有蓝色字体的选项卡)
然后在视图底部单击复制捆绑资源,然后按加号并添加您的series.txt文件
这样做会将 series.txt 文件添加到主包中,从而可以通过 NSBundle.mainBundle().pathForResource("series", ofType: "txt")
希望对您有所帮助! :D
由于文件的最后一行是空行,所以出现了错误。试图弄清楚如何不读它,但这是一个单独的问题,我想我能弄清楚。