запись двух строковых массивов в CSV-файл в Swift - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь получить движение устройства, а также необработанные данные акселерометра, сохраняя в CSV-файл. как я пытаюсь добавить второй массив в CSV-файл, он не добавляет с остальными столбцами. Я пробовал это решение Как объединить или объединить массивы в Swift? , но это не работает

enter image description here

Я хочу, чтобы мой CSV-файл быть таким: enter image description here

Код для включения обновлений движения:

 func enableMotionUpdates() {


    motionManager.deviceMotionUpdateInterval = 1.0 / defHz
    motionManager.accelerometerUpdateInterval = 1.0/defHz


    activityData = [String]()//storing device motion data 
    activityDataAccelro = [String]()//storing accelerometer data

    if motionManager.isAccelerometerAvailable {
        motionManager.startAccelerometerUpdates(
            to: .main,
            withHandler: { [weak self] accelrometerData, error in
            guard let self = self, let accelrometerData = accelrometerData else {
              if let error = error {
                // Just display error for local testing.
                // A more robust solution would include better error logging and
                // stop the session if too many errors occur.
                print("Device motion update error: \(error.localizedDescription)")
              }
              return
            }
                print("in accelro")
          self.processAccelroData(accelrometerData)
        })
    }
    else{
        print("accelro isnot available")
    }

     motionManager.startDeviceMotionUpdates(
       using: .xArbitraryZVertical,
       to: queue, withHandler: { [weak self] motionData, error in
         guard let self = self, let motionData = motionData else {
           if let error = error {
             print("Device motion update error: \(error.localizedDescription)")
           }
           return
         }

        self.processMotionData(motionData)
     })

     self.activityData.append(self.LABLES)
    self.activityDataAccelro.append(self.AccelroLable)
   }

код для хранения обновлений движения в массиве строк

func processMotionData(_ motionData: CMDeviceMotion) {

    numActionsRecorded+=1

    let sample = """

    \( motionData.timestamp),\
     \(motionData.attitude.roll),\
     \(motionData.attitude.pitch),\
     \(motionData.attitude.yaw),\
     \(motionData.rotationRate.x),\
     \(motionData.rotationRate.y),\
     \(motionData.rotationRate.z),\
     \(motionData.gravity.x),\
     \(motionData.gravity.y),\
     \(motionData.gravity.z),\
     \(motionData.userAcceleration.x),\
     \(motionData.userAcceleration.y),\
     \(motionData.userAcceleration.z),\
     \(motionData.attitude.quaternion.x),\
     \(motionData.attitude.quaternion.y),\
     \(motionData.attitude.quaternion.w),\
    \(motionData.attitude.quaternion.z)
    """

     activityData.append(sample)

   }

func processAccelroData(_ accelroData: CMAccelerometerData) {
    let sample = """
    \(accelroData.acceleration.x),\
    \(accelroData.acceleration.y),\
    \(accelroData.acceleration.z)
     """
    activityDataAccelro.append(sample)
    }

Сохранение данных в CSV-файл

 func saveActivityData() {
    var userActivityData = [String]()
  userActivityData = activityData + activityDataAccelro //merging two arrays

    let confirmDialog = WKAlertAction.init(title: "Save",
                                            style: WKAlertActionStyle.default,
                                            handler: { () -> Void in
                                            let dataURL =
                                            getDocumentsDirectory()
                                                .appendingPathComponent("sensorData")
                                                .appendingPathExtension("csv")
                                            do {

                                                try  
                                                userActivityData.appendLinesToURL(fileURL: dataURL)

                                            print("Appended to file \(dataURL.path)")
                                            } catch {
                                            print("Error writing file to \(dataURL): \(error.localizedDescription)")
                                            }

    })


    }

1 Ответ

1 голос
/ 21 апреля 2020

Если ваши массивы равной длины, вы можете использовать zip и map

var arr1 = ["A", "B", "C"]
var arr2 = ["a", "b", "c"]

let combo = Array(zip(arr1, arr2)).map{ "\($0.0),\($0.1)"}

Если ваши массивы не одинаковой длины, тогда определите, какой из них короче и l oop над ним

var arr1 = ["A", "B", "C", "D"]
var arr2 = ["a", "b", "c"]

for (index, item) in arr2.enumerated() {
    arr1[index] = "\(arr1[index]),\(item)" //If arr2 should be first then simply switch the order
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...