繁体   English   中英

如何解析我的CSV文件?

[英]How to parse my CSV file?

这是我第一次尝试解析CSV文件。 我以前只使用过JSON文件。 我知道CSV是逗号分隔值的缩写。 我有一个CSV文件,其中列出了全美国州际公路上所有其余站点的清单; 但是,此文件中的值不以逗号分隔。 我想知道是否有人可以帮助我将此文件解析为对象? 我的目标是对这个文件进行排序,并将属于特定状态的每个状态放入相应的对象(状态)中。 例如,5号州际公路(I-5)横跨美国的整个西海岸,它从加拿大边境开始,一直穿过华盛顿,俄勒冈和加利福尼亚,一直到墨西哥边境。 因此,I-5应该位于“华盛顿”,“俄勒冈”和“加利福尼亚”对象中。 下面的代码是我尝试删除所有标点符号并仅用逗号替换它们以获得常规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文件:

RestAreasCombined_USA.csv

如果您在下载文件时遇到任何麻烦,请告诉我。

预先感谢您抽出宝贵的时间阅读我的帖子!

您遇到的问题是,这并非完全是.csv文件。 “详细信息”列的第4列只是一个字符串(不幸的是,您可能会在其中包含逗号)。

您需要做的是期望前三列在那里,然后对子项进行更多的分析。

例如,州际项目不是一个单独的字段。 它是类型注释列第3列的一部分(并且不能保证是跨州的;例如,查看与美国高速公路有关的第14和22行)。

另外,为什么还要测试第三列的“ CA”? 您链接的文件中的所有行都根本没有...

然后,当您获取4长度的字符串条目时,您将不得不针对“ RR”,“ PT”,“ VM”,“ Pets”,“ HF”,“ Gas”,“ Food”, “ RV转储”等为您的出口设置适当的布尔值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM