Я пытаюсь получить движение устройства, а также необработанные данные акселерометра, сохраняя в CSV-файл. как я пытаюсь добавить второй массив в CSV-файл, он не добавляет с остальными столбцами. Я пробовал это решение Как объединить или объединить массивы в Swift? , но это не работает
Я хочу, чтобы мой CSV-файл быть таким: ![enter image description here](https://i.stack.imgur.com/eQQOP.png)
Код для включения обновлений движения:
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)")
}
})
}