這是我第一次嘗試解析CSV文件;我以前只使用過JSON文件。我知道CSV是逗號分隔值的縮寫。我有一個CSV文件,列出美國各州際高速公路上所有休息站的列表;但是,此文件中的值不能用逗號分隔。我想知道是否有人可以幫助我解析這個文件到對象?我的目標是對這個文件進行排序,並把每個州際屬於一個特定的狀態放在相應的對象(狀態)中。例如,5號州際公路(I-5)跨越美國的整個西部海岸,從加拿大邊境開始,經過華盛頓,俄勒岡和加利福尼亞,直至墨西哥邊境。因此,I-5應該屬於「華盛頓」,「俄勒岡」和「加利福尼亞州」的對象。下面的代碼是我嘗試刪除所有標點符號,並用逗號替換它們以獲得常規的CSV文件。按照順序,在我創建了一個常規的CSV文件之後,我嘗試按照上面的解釋進行排序。這是我的代碼:如何解析我的CSV文件?
var californiaInterstates: [InterstateAttributes] = []
func parseCSVFile(){
var fullString: String = ""
var restStops: [String] = []
guard let path = NSBundle.mainBundle().pathForResource("Rest_Areas", ofType: "csv") else{
print("There was an error parsing the data file!")
return
}
do{
fullString = try String(contentsOfFile: path)
}catch let error as NSError{
print(error.debugDescription)
}
restStops = fullString.componentsSeparatedByString("\r")
for (index, restStop) in restStops.enumerate() {
let element = restStop.componentsSeparatedByString("\"").joinWithSeparator("").componentsSeparatedByString("]").joinWithSeparator("").componentsSeparatedByString("[").joinWithSeparator("").componentsSeparatedByString("|").joinWithSeparator(",")
restStops[index] = element
}
for (index, restStop) in restStops.enumerate(){
//print(index)
let restStopArray = restStop.componentsSeparatedByString(",")
if restStopArray[2] == "CA" {
let interstateAttributes = InterstateAttributes()
interstateAttributes.latitude = Double(restStopArray[0])
interstateAttributes.longitude = Double(restStopArray[1])
interstateAttributes.state = restStopArray[2]
interstateAttributes.interstate = restStopArray[3]
interstateAttributes.bound = restStopArray[4]
interstateAttributes.description = restStopArray[5]
interstateAttributes.name = restStopArray[6]
interstateAttributes.RR = restStopArray[7]
interstateAttributes.PT = restStopArray[8]
interstateAttributes.VM = restStopArray[9]
interstateAttributes.pets = restStopArray[10]
interstateAttributes.HF = restStopArray[11]
interstateAttributes.RVDump = restStopArray[12]
californiaInterstates.append(interstateAttributes)
}
}
}
我試圖以加利福尼亞高速公路作爲例子。此代碼不起作用,並且出現錯誤,因爲當我嘗試訪問州際屬性時,某些索引超出範圍。你能幫我解析和排序這個CVS文件嗎?
附上CSV文件:
如果您在下載文件,請讓我知道任何麻煩。
預先感謝您花時間閱讀我的文章!
我正在檢查「CA」索引始終是州名的縮寫,例如CA是加利福尼亞州,這是一個條目的示例:-120.780655,36.860709,CA,I-5,NB,JOHN ERRECA REST AREA,MM386,RR,PT,VM ,Pets,HF,PHONES –
該條目與您鏈接的CSV文件不符 '經度,緯度,TYPE_NOTES,詳細信息 -67.834062,46.141129,REST AREA-FOLLOW SIGNS SB I-95 MM305,「RR,PT,Pets,HF」 -67.845906,46.138084,REST AREA-FOLLOW SIGNS NB I-95 MM305,「RR,PT,Pets,HF」 -68.498471,45.659781,TURNOUT NB I -95 MM249,Scenic Vista-NO FACILITIES -68.534061,45.598464,REST AREA SB I-95 MM240,「RR,PT,Pets,HF」 -68.539034,45.594001,REST ARE NB NB I-95 MM240,「RR,PT ,寵物,HF「' 不是一個」CA「被看到。 –
你仍然有同樣的問題。你在這裏有什麼不只是一個逗號分隔值的列表。相反,你有什麼是: 1)逗號分隔:長,拉特;再多一個逗號; 2)報價打開,然後逗號分隔狀態,州際或高速公路,名稱,英里標記,關閉報價,然後多一個逗號; 3)報價打開,然後括號,可能或可能不存在的項目的逗號分隔列表,然後括號,然後管道,可選元素,然後關閉報價。 你將不得不做多層次的解析。我會建議首先通過引用分割令牌,然後再通過逗號分割令牌。 –