見習い魔法使いの日常

果たして魔法が使える日は訪れるのか!?

Swiftでcsvファイルの連続カンマを置換で消してみた

お久しぶりになりました。自分用のブログを作ろうとしばらく運用してみたのですが、私にはまだ早かったらしくこちらに戻ってまいりました。

さて、今回はSwiftのお話になります。
タイトルの通り、csvファイルのから連続するカラムを正規表現の置換によって取り除いたという内容です。

Google スプレッドシートに書かれた内容を読み取り、その内容にそって処理を走らせるというプログラムを書きました。
ただ、少し困ったことに、スプレッドシートのから指定されるパラメータは固定数ではなく、そのあたりをどう対処するか悩みどころでした

name key value key value
login
share item_id id content_type ctn
level_up level 3 character shogo

↑こんなやつです。

csv形式に治すと

login,,,,
share,item_id,id,content_type,ctn
level_up,level,3,character,shogo

今回処理の中で、邪魔になってくるのがカンマが連続する行。

let result = (String(data: data, encoding: String.Encoding.utf8) ?? "").components(separatedBy: "\r\n")
    for v in result 
        let c = v.components(separatedBy: ",")
    }

↑のような感じで(動くかは知らない)、カンマ区切りのリストを作って処理していたのですが、カンマが続く行は空のリストができてしまう。

そこで、カンマ区切りのリストにする前に、文字列を置換することで解決しました。

let result = (String(data: data, encoding: String.Encoding.utf8) ?? "").components(separatedBy: "\r\n")
    for v in result {
        let repStr = v.replacingOccurrences(of: "(^.*?)(,,*)$", with: "$1", options: .regularExpression)        
        let c = repStr.components(separatedBy: ",")
    }

解決。

とはいっても、今回はスプレッドシートの書き方に依存するので、スプレッドシート側でミスされるとプログラムがしにます。
正規表現の達人なら、そのあたりも含めていい感じにやれるようにできるのでしょう。

ああ、正規表現を操りたい。