わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

「"」だけのCSV,「+x」だけのCSV

 いきなりですが問題です.

 テキストエディタでファイルを新規作成します.中身を「"」の1文字だけにして,sample.csvという名前で保存し,Excelで開いたら,どのように表示されるでしょうか.

 さっそくですが解答です.どのセルにも何も表示されません.
 ところで,中身が「"」の1文字だけというファイルは,テキストエディタを使用することなく,Linuxが使えるなら*1,以下のコマンドで作成できます.

echo -n '"' > sample.csv

 echoコマンドのオプション「-n」は,改行を出力しないという意味です.
 続いてですが問題です.

 以下のコマンドで作成したsample2.csvを,Excelで開いたら,どのように表示されるでしょうか.

echo '"' > sample2.csv

 sample.csvと同じだろう…と思いながら,実際にやってみると,ちょっと面白いことが起こりました.1行目だけ,行の高さが,2行目以降の倍になりました.

f:id:takehikom:20200130211536j:plain

 ただし何回か,閉じて開いてしていると,sample.csvと同じ表示になることもありました.
 ところで,Linuxでコマンド実行をすると,改行コードは「\n」(Line Feed)の1バイトです.「\r」(Carriage Return)を付けて,「\r\n」の2バイトとするよう,テキストエディタで改行コードを変更してsample2.csvを上書き保存し,Excelで開いても,同じ表示になりました.
 さらにですが問題です.

 テキストエディタでファイルを新規作成します.Excelで開いたらA1のセルに「"」が表示されるようなCSVファイルにするには,どのような中身にすればいいでしょうか.

 これについても解答です.中身を「""""」,ダブルクォーテーションマーク4つにします.最初と最後のダブルクォーテーションマークは,中身を1個の値(文字列)とするもので,中の2つのダブルクォーテーションマークは,1文字のダブルクォーテーションマークを意味します.改行は,2バイト(\r\n)でも,1バイト(\n)でも,なしでも,違いがありませんでした.
 最後にですが問題です.

 テキストエディタでファイルを新規作成します.Excelで開いたらA1のセルに「+x」が表示されるようなCSVファイルにするには,どのような中身にすればいいでしょうか.

 実はこの問題に対する答えが見つかっていません.単純に「+x」だけの中身では,Excelで開くと「#NAME?」と表示され,該当のセルの値が「=+x」に変わってしまいます.

f:id:takehikom:20200130211545j:plain

 Excelで,A1のセルに「+x」を書いて,Enterを押すと,また「#NAME?」の表示です.
 こういうときはシングルクォーテーションマークです*2.A1の中身を消して,「'+x」と書いて,Enterを押せば,A1の表示は「+x」になってくれました.
 ですがこれを上書き保存し,テキストエディタで開くと,中身は「+x」だけです.Excelで閉じてから開き直すと,また「#NAME?」の表示になりました.
 テキストエディタCSVファイルを編集して,「"+x"」としてみても,Excelでは「#NAME?」ですし*3,「'+x」や「'+x'」は,そのまま表示されてしまいました.
 本記事作成のきっかけは,仕事中のちょっとしたトラブルです.研究のために10分くらいで書いたRubyスクリプトを実行したときに,「+x」を含むCSVファイルを生成しまして,Excelで開いて何じゃこれ,クォートしてもあかんのかと,この件だけで30分くらい,時間を費やしてしまいました.結局,「x+」に変換することで解決を図りました.

*1:WSLもオールオッケー!

*2:Excelのセルに「1/30」を入力し,EnterまたはTabを押すと,セルは「1月30日」になりますが,代わりに「'1/30」を入力したのなら,セルの表示は「1/30」になってくれるのです.

*3:ExcelでA1のセルを「"+x"」に書き換えて,CSVで保存すると,ファイルの中身は「"""+x"""」です.最初と最後のダブルクォーテーションマークは,中身を1個の値(文字列)とするもので,2番目と3番目,4番目と5番目は,それぞれが1文字のダブルクォーテーションマークを意味します.