CSVファイルを扱っていると項目値をダブルクォーテーションで囲まれていないケースもあり、これを項目毎にダブルクォーテーションで囲ませたい時があります。こういう場合に手っ取り早くダブルクォーテーションを付与する方法をご紹介します。基本的にはEXCELとサクラエディタなどのエディタを併用する事で実現出来ます。
使用するソフト
Microsoft Excel ※特にバージョンは問いません
サクラエディタ ※秀丸など他のエディタでも可
CSVファイルへのダブルクォーテーションの付与手順
Excelで対象のCSVファイルを開きます。ここでは「sample.csv」を開いています。
「sample.csv」の内容は以下の通りです。
Excelでcsvファイルを開いたらデータの最終行の次行へ以下の数式を入力します。今回は1行空けて見やすくA5セルへ入力しています。
⇒「=””””&A1&””””」
A5セルへダブルクォーテーション付で値が表示されましたので次にA5セルの式をA5:C7セルまでコピペします。
※項目数、行数によってペーストする範囲は変更して下さい。
ここまで項目単位にはダブルクォーテーションが付与された状態になったのでこの内容をサクラエディタへ貼り付けます。
ただこのままではカンマ区切りではなくタブ区切りの状態なので今度はこれをカンマ区切りへ変更します。
「Ctrl + R」で置換ダイアログを表示し、「置換前」の文字へ「\t」、「置換後」の文字へ「,」(カンマ)を入力し、正規表現へチェック後に「全て置換」を選択します。
これでダブルクォーテーション付与のカンマ区切りのCSV形式の内容になったのでこの内容を元のファイルと差し替えれば完了です。
補足:CSV のダブルクォーテーション処理で注意すべき点
1. 既にダブルクォーテーションが含まれている値への対応
データの中にすでに "(ダブルクォーテーション)が含まれている場合、それをどう扱うかを考えておく必要があります。 例えば、値が He said "Hello" のようになっていたとすると、ただ前後に " を付けるだけでは "He said "Hello"" のように不正な CSV になります。
通常は、内部に含まれる " を "" のように二重化してエスケープする手法を使います(CSV 規格の慣例)。 例:He said "Hello" → "He said ""Hello"""
2. 区切り文字や改行、カンマを含む値
値にカンマ , や改行 \n が含まれる可能性がある場合は、必ず そのフィールドをダブルクォーテーションで囲む必要があります。 そうしないと、カンマが「別フィールドの区切り」と誤認されてしまいます。
したがって、値を囲む処理を行う際には すべてのフィールド に対して囲むようにしておいたほうが安全です。
3. 文字コード・改行コードの扱い
CSV ファイルを扱う際には、文字コード(UTF-8, Shift_JIS, etc.)や改行コード(CRLF, LF, CR)が混在していることがあります。 作業前に統一しておいた方がトラブルが起きにくくなります。
特に Excel で読み書きする際には、Excel の仕様(Windows 版 Excel は CRLF を期待するなど)を意識しておきましょう。
4. 自動化スクリプトでの生成・変換を検討
5. 検証・動作確認を忘れずに
ちょっとdjUnitで「addReturnValue」を使用しても全く効いてない?という事象に少しハマっていたので原因についてメモしておきます。
addReturnValueが効かない原因
addReturnValueが効かない原因として上げられるのが概ね以下の3つになるかと思います。1と2については少し見なおせばすぐ発見出来そうですが、今回ハマった原因が3でした。。。
クラス名の指定が間違っている
メソッド名の指定が間違っている
指定したメソッドが複数回実行されている
「指定したメソッドが複数回実行されている」とは
では「指定したメソッドが複数回実行されている」というのはどういう事かというとについて説明します。
根本的な話として以下の2つのコードは全く同じ意味という事を理解しておく必要があります。
addReturnValue ( UtilClass1 . class , "getStr" , expected1 ) ;
setReturnValueAt ( UtilClass1 . class , "getStr" , 0 , expected1 ) ;
これだけで気づく方はハッと思うかもしれませんが、ここで重要なのはaddReturnValueでは「1回目に実行」されたメソッドのみしかaddReturnValueで指定した値が返ってこないという事です。つまり「setReturnValueAt」で1回目を指定した場合と同様の動きしかしてくれないのです。
今回私がハマったのは指定したメソッドが想定した箇所よりも手前で事前に実行されていた為、想定したいたメソッドは2回目の実行になっていたために2回目の方にはaddReturnValueが効いていなかったという事象でした。
addReturnValueが効かない時の調査方法
addReturnValueをしてクラス名やメソッド名は正しいのにどうも効いていないように見える時は一度「getCallCount」でメソッドの実行回数を調査して見ると良いかもしれません。
djUnitではメソッドが呼び出されている事の確認は「assertCalled」を使用する事で確認出来ましたが、逆にメソッドを呼び出されていない事の確認では「assertNotCalled」を使用する事で確認出来ます。
Javaソース
djUnitサンプル
djUnitではassertCalledを使用する事でメソッドが呼び出された事が確認出来ます。
Javaソース
djUnitサンプル
複数回呼び出された時の確認方法
以下の様に「getCallCount」を使用する事でメソッドが何回呼び出されたかを確認する事も出来ます。
int countHtmlEscape = getCallCount ( UtilSample1 . class , "htmlEscape" ) ;
assertEquals ( 10 , countHtmlEscape ) ;
Excelで複数ページを印刷する場合に「2 in 1」などに集約して印刷設定した後に印刷してみると1頁目だけ「2 in 1」形式で印刷され、2頁目以降は「2 in 1」形式ではなく元のまま1ページ分そのまま印刷されてしまうという事を経験した事はないでしょうか。これは印刷設定画面でプレビュー表示されている頁のみに変更した印刷設定が適用されている為に発生する事象です。解決するには大きく2通りの方法があります。
対処方法.一
一つ目の対処方法としては印刷画面で「1頁単位で表示⇒印刷設定」を印刷する頁数分繰り返して指定する方法です。
ただこの方法では印刷頁数が2,3枚程度ならいいですが数十、数百頁ある場合は手間が掛かり過ぎるのでお勧め出来ません。
対処方法.二
二つ目の対処方法(というか根本的な対処方法)としてはExcelファイルを開く前にWindowsメニューの「デバイスとプリンター」画面で対象のプリンタのプロパティから直接印刷設定変更した後でExcelファイルを開いて印刷する方法です。
基本的にExcelでは起動した際にデフォルトでプリンターの印刷設定通りに印刷されますので、Excelを起動する前にプリンターの印刷設定をしておけば全ての印刷対象頁にその設定が反映されます。
iTunesでiphoneのバックアップを実行しようとした時に「十分な領域がありません」と表示されてバックアップが実行出来ない事があります。
そこでふと疑問に思うのがそもそも「iphoneのバックアップってどこに保存されてるの?」という点です。
ということでバックアップ先を調べて見ました。
環境
OS:Windows 7 Professional 64bit
iTunes version:12.3.2.35
iPhone6
iPhoneのバックアップ先
iphoneのバックアップデータは以下へ保存されています。
C:\Users\[ユーザ名]\AppData\Roaming\Apple Computer\MobileSync\Backup\
私の場合、このBackupフォルダ内にフォルダが複数あり、その一つ一つのサイズが何十GBにもなっていました。。。そりゃ容量も足りなくなるか。
なので最新のバックアップフォルダ以外は全て削除しました。
基本的にバックアップは最新版の一つだけあれば十分!。それでも80GBとかあるのですが。。。
iPhoneのバックアップ先を変更する方法
※iPhoneのバックアップ先を変更する方法については以下記事をご参照下さい。
⇒iPhoneのバックアップ先を変更する方法
投稿ナビゲーション
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。