SwiftUI沼でゆっくり浸る Zip解凍からList表示へ
こんにちは、川上です。
保存できたサイト上の郵便番号ZipFileの解凍フェーズです。
SwiftでMyアプリに解凍フレームワークを簡単に組み入れて利用したかったのです。
ググ巷に彷徨うと、結構、Hitして、その手の情報で見れますwね。
フレームワークの組入れの出し入れが容易で、イマイチでアカンだったら、安易に削除できる便利なツールは、やっぱ、SPM(Swift Package Manager)かなぁと、思いました。
SPMでZipを検索したなかで、解凍処理が簡単そーだったのが”SwiftZip”でした。
で、SwiftZipのDocの解凍処理コードをコピペ。
その後、解凍して取得したData型をString型に変換したのでした。
Stringのデータを取得できてしまえば、あとは、ゴリゴリとして、Listの表示化へと繋がっていくのでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | // MAR: == Zip -> Data → [String] func getUnZip(_ fname: String) ->[String]? { guard let path = getPathForDataURL(fname) else { return nil } //let csvfilename = fname.replacingOccurrences(of: "zip", with: "csv") do { // Open an archive for reading let archive = try ZipArchive(url: path) var onecsvstr :String = "" // Enumerate entries in the archive for entry in archive.entries() { // Get basic entry information let name = try entry.getName() let size = try entry.stat().size print("\(name) -> \(size as Any)") // Read entry contents into a `Data` instance let data = try entry.data() // == 郵便番号Zip 郵便番号データファイルの形式等 // == ※1 文字コードには、MS漢字コード(SHIFT JIS)を使用しています let str_: String? = String(data: data, encoding: .shiftJIS) if let str = str_ { onecsvstr = str } else { print(" 🟥 NG == zip -> str") } } // == for entry in archive.entries() // MARK: == UnZipした1本のcsvのstringをArry化にする return oneData2AddLineStrArry(onecsvstr) } catch { // Handle possible errors print("=== 🟥 \(error)") return nil } } // == getUnZip |
// MARK: == UnZipした1本のcsvのstringをArry化にする
return oneData2AddLineStrArry(onecsvstr)
は、ベタで取得したCSVStringデータを1行ごとに分割して、
リスト表示用のStringのArryの取得へとするのでした。
ではでは。