簡體   English   中英

如何解析從 Firebase Storage Swift 3 下載的 CSV 文件

[英]How to parse a CSV file downloaded from Firebase Storage Swift 3

我正在使用 Swift 3 創建一個應用程序來管理事件中的條目。我正在使用 Firebase 來存儲我客戶端的 CSV 文件。 這些 CSV 文件代表一個活動所有參與者的數據庫。

我的 CSV 文件中存儲在 Firebase Storage 中的行示例:

id;event;lastname;firstname;phone;email;address;zipcode;city;added_in_event;comment;checked;checked_date;created;created_uid
479;NULL;CHARLANES;Herve;Google;NULL;NULL;NULL;NULL;NULL;NULL;1;24/11/2016 11:43;NULL;NULL
480;NULL;CHARLANES;Eve;Google;NULL;NULL;NULL;NULL;NULL;NULL;1;24/11/2016 13:21;NULL;NULL[...]

Firebase 網站為您提供教程,以了解如何使用 Firebase Storage 存儲圖像以及如何從我們的應用程序下載此圖像。 這很容易,您只需要使用您的參考gsReference.data(withMaxSize: 1 * 1024 * 1024) { data, error in [...]並將NSData類型的“data”的結果存儲在UIImage和作業中已經完成了。

Firebase 教程鏈接: https ://firebase.google.com/docs/storage/ios/download-files

但是今天,我想下載一個 CSV 文件而不是圖像。 正如 Firebase 教程所說, NSData類型的“數據”中的結果是我剛下載的 CSV。 我想讀取文件的內容並將所有行存儲到選項卡 [] 中。 但是,當我打印“數據”時,我所能擁有的唯一信息是此示例的 CSV 文件“1796 字節”的正確大小,而不是我的 CSV 內容。

所以我試圖從“數據”對NSData進行編碼,但它也不起作用......

你們對我有什么建議嗎?

這是我的功能的一個例子:

  func downloadMyCSV(){
        //Firebase Storage Reference
        let storage = FIRStorage.storage()
        //location of my CSV file in Firebase Storage Reference
        let gsReference = storage.reference(forURL: "gs://xxxx-xxxx.appspot.com/USERS_BDD_CSV/XXXxq5qur9XQOqAOoAeWH9F5AXo2/Tab-User-Trial.csv")

        //Firebase function for download a file with a reference
        gsReference.data(withMaxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                //Sh*t happen
                print(error.localizedDescription)
            } else {
                print(data)//print : "1796 bytes" the exacte size of my CSV file stored in firebase storage

                if data != nil {//Me trying to encode
                    do {
                        let dataString = String(data: data!, encoding: .utf8)
                        let s = try String(contentsOf: url!, encoding : .utf8)
                        print("my data : \(dataString)")
                        print(s)
                    }catch let error as NSError{
                        print(error)
                    }
                }
            }
        }
    }

您要問的實際上與 Firebase 無關。 您只想解析代表 CSV 文件的Data / NSData 從 Firebase 存儲下載數據與其格式無關,因為它只是存儲原始數據。

CSV 文件只不過是逗號分隔或分號分隔的純文本,因此將下載的數據視為String

這里要記住一些事情:

無論您使用什么方法 (d) 將 CSV 文件上傳到 Firebase Storage,請確保稍后使用其字符編碼對下載的數據進行解碼。 這就是你如何獲得 Swift StringUTF8數據表示(在 Swift 3 中)

let data = "myCSVString".data(using: .utf8)

解析傳入的 CSV 數據:

正如您在示例中所做的那樣,將數據解碼回字符串:

let dataString = String(data: data!, encoding: .utf8)    // this is only valid if you used UTF8 to encode it

為方便處理,在 CSV 中獲取所有字符串的數組,如下所示:

let csvStrings = dataString.components(separatedBy: ";")
// this can also be...
let moreGenericCSVStrings = dataString.components(separatedBy: [",", ";"])   // to handle comma separated CSV

如果您想要一種較少手動操作的方式,則無需重新發明輪子。

一些 CSV 解析器:

使用其中之一可以讓您擁有一些有用的方法,並且能夠將內容拆分為更多組件(行、標題等),這需要比我提供的示例多一點的工作.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM