2016-11-10 12 views
1

現在、私のアプリは.csvファイルのサンフランシスコからデータ(地図上の点)を取得しています。すぐに2つのCSVファイルからデータを取得する方法

私が追加した別の.csvファイルであるOaklandと同様に、サンフランシスコからのデータを取得するためにコードを変更する必要はありますか?

func setupData() { 
pointsDataSource = PointsDataSource(with: "San Francisco") 

//if let pointsDataSource = pointsDataSource { 
//map.addAnnotations(pointsDataSource.annotations) 
//} 
} 

enter image description here

+0

私のアプリはすでに.csvファイルをスキャンしています。私は尋ねるだけで、1つではなく2つのファイルからどのようにスキャンできますか?それが動作するようにmコードに小さな変更が必要ですが、私は初心者です – Peter

答えて

0

スウィフトを使用してアプリにCSVファイルをスキャンするため、いくつかの異なる方法があります。私は、私が思った自分のクラスメソッドを作成することができたことが分かりました。

私が助けてくれた他の開発者がインターネットの投稿を参照していないため、私は謝罪しなければなりません。ここで

クラスです:

import Foundation 

class CSVScanner { 

class func debug(string:String){ 

    println("CSVScanner: \(string)") 
} 

class func runFunctionOnRowsFromFile(theColumnNames:Array<String>, withFileName theFileName:String, withFunction theFunction:(Dictionary<String, String>)->()) { 

    if let strBundle = NSBundle.mainBundle().pathForResource(theFileName, ofType: "csv") { 

     var encodingError:NSError? = nil 

     if let fileObject = NSString(contentsOfFile: strBundle, encoding: NSUTF8StringEncoding, error: &encodingError){ 

      var fileObjectCleaned = fileObject.stringByReplacingOccurrencesOfString("\r", withString: "\n") 

      fileObjectCleaned = fileObjectCleaned.stringByReplacingOccurrencesOfString("\n\n", withString: "\n") 

      let objectArray = fileObjectCleaned.componentsSeparatedByString("\n") 

      for anObjectRow in objectArray { 

       let objectColumns = anObjectRow.componentsSeparatedByString(",") 

       var aDictionaryEntry = Dictionary<String, String>() 

       var columnIndex = 0 

       for anObjectColumn in objectColumns { 

        aDictionaryEntry[theColumnNames[columnIndex]] = anObjectColumn.stringByReplacingOccurrencesOfString("\"", withString: "", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil) 

        columnIndex++ 
       } 

       if aDictionaryEntry.count>1{ 
        theFunction(aDictionaryEntry) 
       }else{ 

        CSVScanner.debug("No data extracted from row: \(anObjectRow) -> \(objectColumns)") 
       } 
      } 
     }else{ 
      CSVScanner.debug("Unable to load csv file from path: \(strBundle)") 

      if let errorString = encodingError?.description { 

       CSVScanner.debug("Received encoding error: \(errorString)") 
      } 
     } 
    }else{ 
     CSVScanner.debug("Unable to get path to csv file: \(theFileName).csv") 
    } 
    } 
} 

あなたはこのようなあなたのコードでそれを実装することができます

var myCSVContents = Array<Dictionary<String, String>>() 

CSVScanner.runFunctionOnRowsFromFile(["title", "body", "category"], withFileName: "fileName.csv", withFunction: { 

    (aRow:Dictionary<String, String>) in 

    myCSVContents.append(aRow) 

}) 

これは、それぞれの行を表す、辞書オブジェクトの配列を構築しますCSVから。 csv文書のヘッダーラベルを含む最初のパラメーターとして配列を指定する必要があります。すべての列にラベルを付けてください。

ただし、配列に行を追加するのをスキップしてください。各行で好きな機能を実行できます。たとえば、これらをCoreDataオブジェクトに直接追加することができます。

関連する問題