「ブログ」カテゴリーアーカイブ

ブログ投稿用のカテゴリ

CSVファイルの項目をダブルクォーテーションで囲む方法

CSVファイルを扱っていると項目値をダブルクォーテーションで囲まれていないケースもあり、これを項目毎にダブルクォーテーションで囲ませたい時があります。こういう場合に手っ取り早くダブルクォーテーションを付与する方法をご紹介します。基本的にはEXCELとサクラエディタなどのエディタを併用する事で実現出来ます。

使用するソフト

  • Microsoft Excel ※特にバージョンは問いません
  • サクラエディタ ※秀丸など他のエディタでも可

CSVファイルへのダブルクォーテーションの付与手順

  1. Excelで対象のCSVファイルを開きます。ここでは「sample.csv」を開いています。
    「sample.csv」の内容は以下の通りです。
  2. Excelでcsvファイルを開いたらデータの最終行の次行へ以下の数式を入力します。今回は1行空けて見やすくA5セルへ入力しています。
    ⇒「=””””&A1&””””」
  3. A5セルへダブルクォーテーション付で値が表示されましたので次にA5セルの式をA5:C7セルまでコピペします。
    ※項目数、行数によってペーストする範囲は変更して下さい。
  4. ここまで項目単位にはダブルクォーテーションが付与された状態になったのでこの内容をサクラエディタへ貼り付けます。
    ただこのままではカンマ区切りではなくタブ区切りの状態なので今度はこれをカンマ区切りへ変更します。
  5. 「Ctrl + R」で置換ダイアログを表示し、「置換前」の文字へ「\t」、「置換後」の文字へ「,」(カンマ)を入力し、正規表現へチェック後に「全て置換」を選択します。
  6. これでダブルクォーテーション付与のカンマ区切りの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. 自動化スクリプトでの生成・変換を検討

  • Excel+エディタによる手作業の方法は簡便ですが、データ件数が多かったり繰り返し処理が必要だったりする場合は、スクリプトで一括処理できる方法を使ったほうが効率的・安全です。
    例:

    • Python(pandas や csv モジュール)

    • PowerShell / Bash スクリプト

    • あるいは Excel VBA マクロ など

    これらを使えば、囲み処理、内部の " のエスケープ、文字コード変換などもあわせて一括で処理できます。

5. 検証・動作確認を忘れずに

  • 実際に処理後の CSV を別のプログラム(Excel やデータベースのインポート機能等)で読み込んで、意図した通りにフィールドが分割されているかを確認しておきましょう。

  • 特に本番データで使う前には、サンプルデータでテストを繰り返すと安心です。

Excel:シートをコピーしようとすると「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか?」というメッセージが表示される原因

Excelを操作しているとシートをコピーする際に「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか?」というメッセージが表示される事がたまに発生します。今回はその原因と対処方法についてメモしておきます。

原因

    一部のセル範囲に名前指定していてその指定した範囲を列削除などしていると名前指定範囲等がおかしくなってしまい、シートコピーの際にメッセージが表示されてしまいます。
    ※Office2013の場合は「名前’xxx’は既に存在します。この名前にする場合は[はい]をクリックします。移動またはコピーを行うために’xxx’の名前を変更する場合は、[いいえ]をクリックします。」というメッセージになります。

対処方法

  1. 「Ctrl + F3」もしくはメニューの「数式」タブ⇒「名前の管理」を選択します。
  2. 名前の管理画面が表示されたら表示された一覧で参照範囲か範囲の数式が「#REF!」などエラーになっている箇所を修正する。もしくは名前定義そのものを削除すれば完了です。

djUnitでaddReturnValueが効かない原因について

ちょっとdjUnitで「addReturnValue」を使用しても全く効いてない?という事象に少しハマっていたので原因についてメモしておきます。

addReturnValueが効かない原因

addReturnValueが効かない原因として上げられるのが概ね以下の3つになるかと思います。1と2については少し見なおせばすぐ発見出来そうですが、今回ハマった原因が3でした。。。

  1. クラス名の指定が間違っている
  2. メソッド名の指定が間違っている
  3. 指定したメソッドが複数回実行されている

「指定したメソッドが複数回実行されている」とは

では「指定したメソッドが複数回実行されている」というのはどういう事かというとについて説明します。
根本的な話として以下の2つのコードは全く同じ意味という事を理解しておく必要があります。

これだけで気づく方はハッと思うかもしれませんが、ここで重要なのはaddReturnValueでは「1回目に実行」されたメソッドのみしかaddReturnValueで指定した値が返ってこないという事です。つまり「setReturnValueAt」で1回目を指定した場合と同様の動きしかしてくれないのです。
今回私がハマったのは指定したメソッドが想定した箇所よりも手前で事前に実行されていた為、想定したいたメソッドは2回目の実行になっていたために2回目の方にはaddReturnValueが効いていなかったという事象でした。

addReturnValueが効かない時の調査方法

addReturnValueをしてクラス名やメソッド名は正しいのにどうも効いていないように見える時は一度「getCallCount」でメソッドの実行回数を調査して見ると良いかもしれません。

djUnitでメソッドが呼び出されていない事を確認する方法

djUnitではメソッドが呼び出されている事の確認は「assertCalled」を使用する事で確認出来ましたが、逆にメソッドを呼び出されていない事の確認では「assertNotCalled」を使用する事で確認出来ます。

Javaソース

djUnitサンプル

    以下のテストソースでは「getDiffDays」メソッドが呼び出されていない事を確認しています。

djUnitでメソッドが呼び出された事を確認する方法

djUnitではassertCalledを使用する事でメソッドが呼び出された事が確認出来ます。

Javaソース

djUnitサンプル

    以下のテストソースでは「htmlEscape」メソッドと「urlEncode」メソッドが呼び出されている事を確認しています。

複数回呼び出された時の確認方法

以下の様に「getCallCount」を使用する事でメソッドが何回呼び出されたかを確認する事も出来ます。

djUnitで戻り値なしのメソッドを無効化する方法

djUnitでテストする際に、一部のメソッドは特に実行する必要はないけどそのメソッドの処理はスルーさせたいケースがたまに発生します。こういう場合にはdjUnitのaddReturnValue機能を活用する事でそのメソッドの処理を無効化する事が出来ます。
通常addReturnValueはメソッドの戻り値を好みの値に変更する際に使用しますが、戻り値なし(void)のメソッドの時には通常使用しません。それでも戻り値なしのメソッドをaddReturnValueで指定するとそのメソッドが実行されずメソッドの処理を無効化する事が出来ます。
ただし、この方法は戻り値なし(void)のメソッドにしか活用出来ませんのでご注意下さい。

Javaソース

djUnitサンプル

コンソール

    addReturnValueを使用しないでテストした場合
    addReturnValueを使用してテストした場合

Excel:印刷すると1ページ目にしか印刷設定内容が適用されない場合の対処方法

Excelで複数ページを印刷する場合に「2 in 1」などに集約して印刷設定した後に印刷してみると1頁目だけ「2 in 1」形式で印刷され、2頁目以降は「2 in 1」形式ではなく元のまま1ページ分そのまま印刷されてしまうという事を経験した事はないでしょうか。これは印刷設定画面でプレビュー表示されている頁のみに変更した印刷設定が適用されている為に発生する事象です。解決するには大きく2通りの方法があります。

対処方法.一

    一つ目の対処方法としては印刷画面で「1頁単位で表示⇒印刷設定」を印刷する頁数分繰り返して指定する方法です。
    ただこの方法では印刷頁数が2,3枚程度ならいいですが数十、数百頁ある場合は手間が掛かり過ぎるのでお勧め出来ません。

対処方法.二

    二つ目の対処方法(というか根本的な対処方法)としてはExcelファイルを開く前にWindowsメニューの「デバイスとプリンター」画面で対象のプリンタのプロパティから直接印刷設定変更した後でExcelファイルを開いて印刷する方法です。
    基本的にExcelでは起動した際にデフォルトでプリンターの印刷設定通りに印刷されますので、Excelを起動する前にプリンターの印刷設定をしておけば全ての印刷対象頁にその設定が反映されます。

サクラエディタでタブ表示する方法

サクラエディタのデフォルト状態では複数のテキストファイルを表示するとファイル毎にウィンドウが表示されてしまいます。個人的にテキストファイルを表示する際はウィンドウは一つにまとめたいのでタブ表示化してしまえば、問題解決です。

サクラエディタでタブ表示する手順

  1. サクラエディタを起動して「設定」メニューにある「タブバーを表示」を選択します。
  2. これだけで以下の様にタブ表示されます。
  3. 1ファイルだけでは分かり難いので、試しにファイルを新規作成してみるとタブ表示が増えてテキスト毎にウィンドウが表示されなくなるのがわかります。

iPhoneのバックアップ先を変更する方法

iTunesではiPhoneやiPodのバックアップを取得する際にバックアップ先を変更する事が標準では出来ません。
標準のバックアップ先はCドライブになる為、Cドライブの容量が少ない場合などではiTuensのバックアップ機能はあまりにも使い勝手が悪すぎます。ここでは「CopyTrans Shelbee」を使用してiPhoneのバックアップ先を変更する方法をご紹介します。
「CopyTrans Shelbee」はバックアップ先の変更だけではなくiTuensを起動していなくてもiPhoneやiPodのバックアップ・リカバリが可能なソフトです。

環境

    OS:Windows 7 Professional 64bit
    iTunes version:12.3.2.35
    iPhone6

CopyTrans Shelbeeのインストール手順

  1. 下記サイトへアクセスして「無料ダウンロード」をクリックするとインストーラをダウンロード出来ます。
    ⇒CopyTrans Shelbeeのダウンロードページ
  2. ダウンロードした「Install_CopyTransControlCenter.exe」ファイルをダブルクリックしてインストーラを起動します。
  3. 「インストール」ボタンを選択します。
  4. コネクションウィザード画面が表示されるので「接続テスト」ボタンを選択します。
  5. 警告ダイアログが表示されるので「OK」ボタンを選択します。
  6. 接続テストが正常に終了すると「接続テストに成功しました!」と表示されるのでそのまま「OK」ボタンを選択します。
  7. 今回インストールするソフト「CopyTrans Shelbee」を選択し、「インストール」ボタンを選択します。
  8. インストールが完了すると「インストール済みソフト」の下に「CopyTrans Shelbee」が表示されるのでそれを選択して「スタート」ボタンを選択すると「CopyTrans Shelbee」が起動します。

CopyTrans ShelbeeでのiPhoneバックアップ先の変更方法

  1. CopyTrans Shelbeeが起動したら「ツールボックス」タブを選択して、移動先フォルダを選択してバックアップ先のフォルダ指定(未作成ならフォルダを作成して指定)します。
  2. 確認ダイアログが表示されるので「はい」ボタンを選択するとバックアップ先の変更が開始されます。
  3. バックアップ先の変更が完了すると以下の様なメッセージが表示されるので「OK」を選択すればバックアップ先の変更は完了です。

    ※バックアップ先が変更されると従来のCドライブ化に保存されていたバックアップフォルダがショートカットリンクへ変更されているのがわかります。
    これでiTunesでバックアップ作業を実施しても変更後のフォルダへバックアップされます。

CopyTrans ShelbeeでのiPhoneバックアップ方法

  1. ここからはCopyTrans Shelbeeでのバックアップ取得方法となります。まずは「バックアップ&リストア」タブを選択します。
  2. 「バックアップ」を選択します。
  3. 「フルバックアップ」か「差分バックアップ」を選択します。ここでは「フルバックアップ」を指定してバックアップ先のフォルダを指定しています。
  4. 「スタート」ボタンを選択するとバックアップが開始します。結構時間が掛かるので気長に待ちましょう。
  5. 以下の画面が表示されればバックアップ完了です。

iPhoneバックアップ時の保存先について

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のバックアップ先を変更する方法