・プログラミング
休日にやろうと思っていたプログラミングがあったのですが、昨日のうちに全て実装できてしまったので今日は暇でした。
具体的にどんなものかと言いますと、CSVのような特定の文字列で区切られたリストのファイルを読み込み、区切り文字で区切って文字列の配列として渡すプログラムです。(正確には、文字列は複数行あるので戻り値は文字列の二重配列になります)
ご想像の通り非常に簡単なプログラムなのですが、これまでに自分が作成したバージョンだと単純に","で分割するだけのものでした。
それでも使えないことは無いのですが、CSVの要素として","が使われていたときにそれも区切り文字とみなして分割してしまうのがいけていないところでした。
そのため、今回はこれを改良して区切り文字としての","とCSVの要素としての","を区別できるようにするのが目的です。
CSVの要素として","が使われているときにどのようにそれを表現するかと言いますと、","を含む要素を""で括ります。
(この表記法のRFCがあるようなのですが、それにきちんと倣っている訳ではなく、結構いい加減な理解です)
さらに要素の中に"が含まれる場合、それは""と表記します。
例えば、「ab"cd,ef"gh」という文字列をCSVの要素として表記すると「"ab""cd,ef""gh"」となります。
以上をふまえて、1行のCSVをリストに分割する手順は以下のようになります。
1. CSVの中の""という文字列を別の文字列に置き換える。
2. CSVを"で分割する。
そうすると、""で括られた要素はリストの偶数番目に格納される。
3. 偶数番目の要素に含まれる","を別の文字列に置き換える。
4. 2.で分割し、3で置換したリストを全て結合する。
5. 4.で得た文字列を","で分割する。
6. 各要素の置換していた文字列をもとに戻す。
上記に関して考慮すべきことは幾つかあります。
まず全体を通して、区切り文字や括り文字を置換する際、それはCSVの中に含まれる文字列であってはなりません。
何故なら6.で戻すときに戻すべきものなのかCSVの要素なのかが判断できなくなってしまうためです。
この問題を回避するために、置換する文字列は長めのランダムな文字列にするなどの工夫が必要です。
次に1.で""を別の文字列に置き換える際に、例えば"""のように3つ並んでいた場合はどうするかを考える必要があります。
しかし少し考えれば分かりますが、""と言う文字列に","は含まれないので、その部分が3.で置換される文字列の対象に含まれても、そうでなくても何ら問題はありません。そういう意味では単純に頭から置換していけば良いです。
また2.で"で分割した後、4.で再結合する際に、副作用として括り文字としての"はCSVから除去されます。
ただ、もともと括り文字としての"は要素に含まれるものではないので、それ自体は特に問題ないと考えています。
6.で置換文字列を元に戻す際に、括り文字を"に戻すか""に戻すかというところで少し悩みました。が、この関数の仕事はCSVの各要素をリストとして返すことであって、そこに(結果としての)文字列編集があるのはおかしいな、と思い、""に戻すことにしました。
そういった考慮は必要に応じて結果を受け取る側のプログラムでやることです。
動かしてみた感じはどうやらうまくいっているようなので、これを組み込んでみることにします。
今回の改修でまだ対応しきれていないのは、要素の中に改行が含まれる場合です。
書式としては","と同様""で括るのですが、CSV1行を処理するのに複数行の読み込みが必要になる場合があり、面倒くさそうなので断念しました。
少なくとも今回使う目的では、要素の中に改行が含まれることは無いので(数値のリストとかなので)、今の実装内容で不都合はないですし。
・最強伝説黒沢
最近、最強伝説黒沢(新のほう)の単行本を読む機会があったのですが、この人一向に最強になる気配がないんですが・・・。
と言うか8年経過していて職を失うって、むしろ最初の頃からランクダウンしてませんか(汗
・トッキュウジャー
なるほど今までは街が闇に飲まれる前になんとかしてたけど、主人公たちの街は既に闇に飲まれた後なのか。
む、アウトレットだ。
あと微妙に人が動いている。やっぱり完全に動かない演技って大変なんだなぁ。
・仮面ライダー鎧武
結局麻衣さん普通に帰ってきたな・・・。
う~ん、ミッチーも誰かに必要とされたかっただけなのにね。難しいね。
・ハピネスチャージプリキュア
久々に海外のプリキュアが出てきたな。
(変な声)
イカちゃんかな?(笑
まあ移動は神様の力でどうにかなるとして、歌は海外のプリキュアにどう聞こえているんだろう。
プリキュアの力とかで言葉は通じるとして、音符の数だったり韻を踏んだりはどうなるんだろう。
ハワイの半分だけ凍らすって割と器用な事をするな。氷の世界なの?井上陽水なの?
なんでエビフライ食べるときのキュアフォーチュンの目が必要以上に光ってるの(笑
う~ん、これ一発もののプリキュアのためにわざわざ変身シーン作ったのかな。
その努力は評価したい。
・ドラゴンボール改
やっぱり界王神様は魔人ブウのこと知ってたんじゃないですかー。
なんだったんだ前回のあの発言は。
ベジータ「界王神を一度でも凄いと思ったか」
いや、それは無いですね。
それはそれとして、自分たちみたいに戦闘力を変えられるタイプだという発想はないのかなぁ。
ベジータさんもデレるなら最初からデレてればよかったのに。
う~ん、界王神様はバビディでも最終的には手が負えなくなるとか言ってるけど、ミスターサタンがこの状況を打開できることを知った上で見るとなんだかなぁ。
・ふるさと再生 日本の昔ばなし
火除け仏。
この寺は和尚が何もしていないのになんでやっていけるんだ・・・。
天狗じゃ。天狗の仕業じゃ。
柳のたたり。
作画が割と頑張ってるな。静止画っぽいけど。
割とストレートな話だった。柳の木を切ったらたたりにあったという。
鮭を食わぬ家。
Komachang!!
コマちゃんが鷲にハイエースされた・・・。
コマちゃんも鮭になるのかよ。
・艦隊これくしょん#イベント10日目
キラキラの力は偉大だわ・・・。
今までキラ付けのコストを考えたときに本当にイベントでキラ付けが有効なのか悩ましかったけど、これだけ途中撤退率が高いとそうも言ってられないな。
2戦目で撤退するのと1回キラ付けするのが同じと考えるとE6では有効だ。キラ付け中は大破しないから、直すコストを考えると更にキラ付けの方が得だ。
もちろんキラキラは絶対では無いのですが、それでも到達率は結構上がりますし、初めてボス相手にS勝利も取れました。
なんとか希望の光が見えてきたか。
そのボスS勝利で大鯨がやってきました。今まで彼女がいなくて消化できない任務があったのでこれも嬉しい。
一応明日も夏休みなので、家でのんびり艦これでもやるか。