大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

SwiftUI沼でゆっくり浸る Zip解凍からList表示へ

著者:川上洋
公開日:2022/07/20
最終更新日:2022/07/20
カテゴリー:技術情報 雑記
タグ:

こんにちは、川上です。

保存できたサイト上の郵便番号ZipFileの解凍フェーズです。
SwiftでMyアプリに解凍フレームワークを簡単に組み入れて利用したかったのです。

ググ巷に彷徨うと、結構、Hitして、その手の情報で見れますwね。

フレームワークの組入れの出し入れが容易で、イマイチでアカンだったら、安易に削除できる便利なツールは、やっぱ、SPM(Swift Package Manager)かなぁと、思いました。

SPMでZipを検索したなかで、解凍処理が簡単そーだったのが”SwiftZip”でした。

で、SwiftZipのDocの解凍処理コードをコピペ。
その後、解凍して取得したData型をString型に変換したのでした。
Stringのデータを取得できてしまえば、あとは、ゴリゴリとして、Listの表示化へと繋がっていくのでした。

  
 // 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の取得へとするのでした。

ではでは。

    上に戻る