Как мне проанализировать CSV-файл, чтобы сделать его легко доступным для tableView? - PullRequest
0 голосов
/ 16 июня 2020

Я написал файл CSV, содержащий набор элементов по строкам. Я использовал такой класс для создания файла CSV, вот код для создания файла:

class SymptomData: NSObject {
var symptom: String = ""
var severity: String = ""
var comment: String = ""
var timestamp: String = ""
}

var symptom_data = [SymptomData]()
var symptomData: SymptomData!

func writeTrackedSymptomValues(symptom: String, comment: String, time: String, timestamp: String) {
    symptomData = SymptomData()
    for _ in 0..<5 {
        symptomData.symptom = symptom
        symptomData.severity = self.severity
        symptomData.comment = comment
        symptomData.timestamp = timestamp
        symptom_data.append(symptomData!)
    }

    createCSV()
}

    var logFile: URL? {
        guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return nil }
        let fileName = "symptom_data.csv"
        return documentsDirectory.appendingPathComponent(fileName)
    }

    func createCSV() {
        guard let logFile = logFile else {
            return
        }

        guard let data = ("\(symptomData.symptom),\(symptomData.severity),\(symptomData.comment),\(symptomData.timestamp)\n").data(using: String.Encoding.utf8) else { return }

        if FileManager.default.fileExists(atPath: logFile.path) {
            if let fileHandle = try? FileHandle(forWritingTo: logFile) {
                fileHandle.seekToEndOfFile()
                fileHandle.write(data)
                fileHandle.closeFile()
            }
        } else {
            var csvText = "Symptom,Severity,Comment,Time\n"


                 let newLine = "\(symptomData.symptom),\(symptomData.severity),\(symptomData.comment),\(symptomData.timestamp)\n"
                 csvText.append(newLine)


             do {
                try csvText.write(to: logFile, atomically: true, encoding: String.Encoding.utf8)

             } catch {
                 print("Failed to create file")
                 print("\(error)")
             }
             print(logFile ?? "not found")
        }
    }

Файл CSV выглядит так:

CSV File

Теперь я хотел бы прочитать файл и добавить каждую строку в представление таблицы. В идеале я хотел бы иметь простой доступ к каждой строке, например:

row0.symptom = symptomData[0].symptom
row0.comment = symptomData[0].comment

et c. Но я не уверен, как разобрать данные обратно в мой класс, я бы тоже хотел, чтобы это было так, чтобы я мог переупорядочить их по метке времени.

Вот как я анализирую данные до сих пор:

func readCSV() {
    guard let logFile = logFile else {
        return
    }

    if FileManager.default.fileExists(atPath: logFile.path) {
        if let fileHandle = try? FileHandle(forWritingTo: logFile) {
            fileHandle.seekToEndOfFile()
            fileHandle.readDataToEndOfFile()
            fileHandle.closeFile()
            print("symptom_data exists")
            do {
                let file = try String(contentsOf: logFile)
                let rows = file.components(separatedBy: .newlines)
                for row in rows {
                    let fields = row.replacingOccurrences(of: "\"", with: "").components(separatedBy: ",")

                    print(fields)

                }
            } catch {
                print(error)
            }

        }
    } else {
         print("No symptom_data File.")
    }
}

Это напечатает это:

 ["Symptom", "Severity", "Comment", "Time"]
 ["Anxiety", "Severe", "test", "1592333677"]
 ["Anxiety", "Mild", "test2", "1592333686"]
 ["Fatigue", "Mild", "test3", "1592160840"]
 ["Electric shock sensations (Brain Zaps)", "Mild", "", "1592333820"]
 ["Anxiety", "Severe", "", "1592336985"]

Как я могу поместить каждую строку в класс или структуру, чтобы я мог легко добавить ее в представление таблицы, или есть лучший способ сделать это?

...