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: ",") }
解決。
とはいっても、今回はスプレッドシートの書き方に依存するので、スプレッドシート側でミスされるとプログラムがしにます。
正規表現の達人なら、そのあたりも含めていい感じにやれるようにできるのでしょう。
ああ、正規表現を操りたい。