2014-12-04 105 views
0

我使用swift讀取文件時遇到問題。我尋覓了很多網絡瑟如果我能找到任何東西上,我發現了3種不同的,但我不能讓任何人的工作Swift - 讀取文件

在這裏,他們是:

import Foundation 


//----- 1 ------ 
var error: NSErrorPointer = nil 

let url = NSURL(string: "ISO.csv") 
let csvString = String(contentsOfURL:url!, encoding: NSUTF8StringEncoding, error: error); 


println("contest") 
println(csvString) 


//----- 2 ------ 
func readFile(fileName: String, fileType: String) -> String{ 
    var fileRoot = NSBundle.mainBundle().pathForResource(fileName, ofType: fileType) 
    var contents = NSString.stringWithContentsOfFile(fileRoot!, encoding: NSUTF8StringEncoding, error: nil) 
    return contents 
} 

// example: read file.txt 
var contents = readFile("ISO", "csv") 
println(contents) 


//----- 3 ----- 

let path = NSBundle.mainBundle().pathForResource("ISO", ofType: "csv") 
var data = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil) 

在1號:它只是返回一個零。但它與從網站返回的數據

號2:/ISO/main.swift:26:20: 'String.Type' does not have a member named 'stringWithContentsOfFile'

數3:提前/ISO/main.swift:38:21: 'stringWithContentsOfFile(_:encoding:error:)' is unavailable: use object construction 'NSString(contentsOfFile:encoding:error:)'

我不知道該怎麼辦,希望你們當中有些人知道,謝謝

回答

1
//----- 2 ------ 
func readFile(fileName: String, fileType: String) -> String{ 
    var fileRoot = NSBundle.mainBundle().pathForResource(fileName, ofType: fileType) 
    var contents = NSString.stringWithContentsOfFile(fileRoot!, encoding: NSUTF8StringEncoding, error: nil) 
    return contents 
} 

// example: read file.txt 
var contents = readFile("ISO", "csv") 
println(contents) 


//----- 3 ----- 

let path = NSBundle.mainBundle().pathForResource("ISO", ofType: "csv") 
var data = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil) 

這兩個都使用錯誤的初始化語法,因爲錯誤狀態。他們也做同樣的事情。

修復:

let path = NSBundle.mainBundle().pathForResource("ISO", ofType: "csv") 
var data = String(contentsOfFile:path, encoding: NSUTF8StringEncoding, error: nil) 
+1

這是因爲在XCode的6.1,初始化現在可以失敗,因此蘋果改變了很多「類funcs中」來初始化的。網絡上的部分樣本仍然使用6.1之前的功能。見https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html – tng 2014-12-04 18:50:06

+0

這是我從中得到的:http://i58.tinypic.com/2z6wo0o.png – Andy 2014-12-04 18:57:56

+0

@Andy這很可能是因爲'path'是'nil'。你確定文件名和類型是否正確,文件是否被添加到包中? – Jack 2014-12-04 19:10:36

1

你會發現這個工具非常有用:

所以分析文件你這樣做:

import StreamScanner 

if let input = NSFileHandle(forReadingAtPath: NSBundle.mainBundle().pathForResource("ISO", ofType: "csv")) 
{ 
    let scanner = StreamScanner(source: input, delimiters: NSCharacterSet(charactersInString: ",\n")) 

    //EITHER 

    while 
     let field: String = scanner.read() //read CSV field by field, skipping newlines 
    { 
     //work with field 
    } 

    //OR 

    while //parse each line at a time (if you're sure there're enough fields in each line and you even know their types) 
     let field1: String = scanner.read(), 
     let field2: Int = scanner.read(), 
     let field3: Double = scanner.read(), 
     { 
      //work with fields 
     } 
} 

希望,這會有所幫助。

1

雨燕3.0的版本:

let path = Bundle.main.url(forResource: FileNameWithoutExtension, withExtension: FileExtension) 
do { 
      let content = try String(contentsOf: path!, encoding: .utf8) 
      print(content) 
} catch { 
      print("Error:file content can't be loaded") 
}