ファイル出力先などの「パス」を指定する、かつパスを手入力できるという項目の確認をする際、「フォルダの不正な入力形式とは?」という点で悩んだ(というかそれらしい情報がない)ため、後々の忘備録を兼ねて確認したことをまとめ。

 ・以下はWindows7SP1で検証した内容となります。他のWindowsについてもいずれまとめる。
 ・規格その他の情報については2018年5月時点のものになります。追加情報あり次第修正。
 ・内容は独自研究のため間違っている可能性あり

 フォルダパスを指定する場合、「ドライブレターを指定してローカルPC上のフォルダパス」を直接指定する場合と、「UNCを指定し、ネットワーク上のフォルダパス」を指定する形式が考えられます。
・「相対パス」を指定する場合もありますが、あらかじめファイル出力先などの格納先パスをあらかじめ指定しておくコントロールに相対パスを指定しておくといったものは想定しがたいので、ここでは検討対象外とします。
・不正なパス指定が「入力時点でエラーとなる」「設定保存時にエラーとなる」「そもそも入力できない」などのエラーパターンがありうるので、どの入力がどのエラーとなるかは事前に確認しておくこと。



●ドライブレター指定形式

 「C:\test\」のようにドライブレターを指定してローカルPC上フォルダの直接パスを指定する入力形式。

・ドライブレター指定が2文字以上
 「ZZ:\test\」などのドライブレター指定文字が2文字以上となる場合
 ドライブレターの形式はA~Zまでなので、ドライブレターに2文字以上指定した場合、必ず不正となる
 
・コロンなし
 「C\test\」のように、ドライブレター→フォルダ間に「:」(コロン)がない場合

・コロンが2つ以上
 「C::\test\」のように、ドライブレター→フォルダ間の「:」(コロン)が複数指定されている場合
 フォルダ名に「:」が使えないため、ドライブレター→フォルダ間以外の部分にそもそも「:」が指定できない。

・コロン後、\なし
 「C:test\」のように、ドライブレター→フォルダ間の「:」(コロン)後に\(バックスラッシュ)がない場合

・コロン後、\が複数
 「C:\\test\」のように、ドライブレター→フォルダ間の「:」(コロン)後に\(バックスラッシュ)が複数指定されている場合
 
・パスの末尾に\が複数
 「C:\test\\」のように、パスの末尾に\(バックスラッシュ)が複数指定されている場合
 末尾\複数は自動的に修正される場合もあり。

・パスの末尾に\なし
 「C:\test」のように、パスの末尾に\(バックスラッシュ)が指定されていない場合
 フォルダパス入力項目ではたいてい、処理の最後に\が無い場合、自動的に指定されるためめったに問題にならないと思われる。
 ただし入力確定時に\が補完される、設定保存時に\が補完されるなど\が差し挟まれるタイミングが異なるパターンの場合あり。



●UNC指定形式

 「\\test_server\test」のようにネットワーク上のコンピュータ名→フォルダの直接パスを指定する入力形式。

・コンピュータ名指定の前方\が1つ
 「\test_server\test\」のようにコンピュータ名指定部分の前方にある\(バックスラッシュ)が1文字分しかない場合
 UNC指定時のコンピュータ名指定部分は前方に「\\」2文字である必要があるため、不正な指定となる

・コンピュータ名指定の前方\が3つ以上
 「\\\test_server\test\」のようにコンピュータ名指定部分の前方にある\(バックスラッシュ)が3文字以上ある場合
 UNC指定時のコンピュータ名指定部分は前方に「\\」2文字である必要があるため、不正な指定となる

・パス末尾\が2つ以上
 「\\test_server\test\\」のようにコンピュータ名指定部分の前方にある\(バックスラッシュ)が2文字以上ある場合
 末尾\複数は自動的に修正される場合もあり。

・パス末尾\なし
 「\\test_server\test」のようにコンピュータ名指定部分の前方にある\(バックスラッシュ)がない場合
 フォルダパス入力項目ではたいてい、処理の最後に\が無い場合、自動的に指定されるためめったに問題にならないと思われる。
 ただし入力確定時に\が補完される、設定保存時に\が補完されるなど\が差し挟まれるタイミングが異なるパターンの場合あり。


 なお「フォルダ指定先頭の\が2文字以上」の場合はエラーにならない?
 「\\test_server\\test\」←こういう形式
 これが処理系によるものなのか、UNCの仕様なのかは調査中


<例外>
 フォルダパス指定時にエラーとなるわけではないが処理系が異なることがあるパターンの指定について
・存在しないフォルダ
 パス指定時には存在していない(あるいは指定後にフォルダが削除されている)フォルダがパスに指定されている場合等。
 この場合、そのパスにファイル出力などを行う場合「エラーとなる」、「指定パスに示されたフォルダが作成される」などのパターンがありうる。

・存在しないドライブレター指定
 ドライブレター指定形式時に、ローカルPCに存在していないドライブレターが指定されている状態
 リムーバブルディスクなどにより、指定時は存在していたが出力時は存在していないといった形式もあり得るため、入力時に制限されていない場合が殆どと思われる。
 試験としては「存在しないドライブレターが指定できる」「出力動作時に存在しないドライブレターに出力できない」などが確認どころか。

つい先日、Office2010のExcelにてツールからシート名に名前を付ける際、ちょっと引っかかったことがあった。そこでまずはExcelのシート命名規則を少し調査してみた。
-今回の調査はすべてOffice2010で確認しております
まずマイクロソフトの公式ページから
https://support.microsoft.com/ja-jp/help/401030

●シート名に仕様使用不可能
・コロン :
・円記号 ¥
・疑問符 ?
・角カッコ [ ]
・スラッシュ /
・アスタリスク *

●ブック名に使用不可能
・コロン :
・角カッコ [ ]


ただし、現実としてはこれ以外にもシート名に指定できない文字列の制限はあるようで、代表的なのは以下の制限。

●31文字まで(Offcie2010の制限)
 Excel97以降のバージョンではシート名は31文字まで。全角、半角に関わらず、文字数でカウントされる模様。

●「予約語」
 予約語として登録されているため「履歴」の文字は使用できない。意外と忘れがちな機能。
 
●そのほか理由不明
 ちと特殊な文字として、'(シングルクォート)、’(アポストロフィ)はシート名につけられない場合がある。
・シート名の先頭、末尾にこれらの記号があるとエラーとなる(それ以外の箇所にある場合は問題ない)
・現在調査してみたが、この2つが制限を受けている理由は良く分からない。公式回答でもそれらしい記述は見当たらないが、実機環境では確実にエラーを起こすため、実環境では避けたほうが無難でしょう。

 Excelファイルを出力するタイプのソフトや、VBAでシート名を扱うツールなどの試験を行う際はこの点は覚えておくと役に立つかもしれません。

最近、文字列入力確認テストする機会が多いため、文字列比較テストに役立つツールをいくつか探してみた。今のところ、以下の二つが便利かつ使いやすい。

 

<文字列出力>

文字列ジェネレータ

https://lazesoftware.com/tool/strgen/

 

<文字列比較ツール>

difff(デュフフ)

https://difff.jp/

 

・「文字列ジェネレータ」は様々なパターンの文字列を出力できるツール。半角/全角や文字数の指定だけではなく、記号、機種依存文字、ソ能表(いわゆるバケ文字)、サロゲートペア文字といった特種用途の文字列も出力できる結構便利なツール。

・・文字列のシャッフルやHTMLタグ追加、各種エンコード/デコードなどかゆいところに手が届く機能もあり、文字列出力テストに必要な機能は大体ある(というかこれ以上を求めるならもう自分で開発した方が早かろう)。

 

・「difff」は張り付けた文字列を比較してくれるツール。文字列比較ツールで検索すると2ファイル感を比較するツールが多いので、こういう単純ながら必要なところだけ比較してくれるWebサービスは有難い。

・・いろいろ試してみたが、日本語英語記号、半角全角すべてごちゃまぜの文字列比較でも問題なし。ちゃんと半角スペースの数もカウントしてくれるので文字列比較ツールとしては使いやすい。これも文字列比較テストには使いやすいツールだと思う。

 

<エイリアス指定>

 PictMaster上で「ほぼ同一である複数の値」をまとめて一つの値として指定する場合は「値の並び」欄に|(パイプ)記号を使って指定する。

 このように指定した値は組み合わせ時には1つの値として組み合わせされ、組み合わせ完了後に置き返されます。

 

↑エイリアス指定

 

  • 最終的な組み合わせ数は、最大数>纏めあり>最小数ぐらいの量となることが多いです。同値として纏める数が多ければ多いほど効果が高くなります。反対に纏める値の数が少数の場合はあまり効果が無い。
  • 組み合わせ表に登場する割合は(重みづけを行わない場合)ほぼ均等に登場する。
  • 複数の同値を同値としてまとめて指定することで、最終的な組み合わせ数を減らすことが出来るというメリットがあるが、最終的な組み合わせを行う際、纏めた値が登場しない組み合わせが現れる場合などもあり、同値として纏める際にはこの点を注意する。

 

<制約表にエイリアスの値を指定する場合>

 エイリアスとして纏めた値を「制約表」で指定する場合、「エイリアスとして纏めた最初の値」のみ指定する。

 他の値は指定できない(指定すると組み合わせ実行時にエラーとなる)が、最終的な組み合わせにはエイリアスの値全体が使用されるため問題なし。

↑制約表の記載。エイリアスの先頭のみ指定する

 

↑結果。ちゃんとエイリアス全体の値が組み合わせに現れる

 Windows7上で動作するアプリケーションをいろいろな方法で起動するパターンをネットで探してみたが、思ったような資料がなかった。

 結局いろいろなパターンを自力で試す羽目になったため、とりあえず忘備録的に記録を残す。Windows8や10のパターンについては別に調査する予定。

 

<アプリそのものを起動する場合>

  • Windowsメニューから起動する
    • 「すべてのプログラム」から起動する
    • 「最近使ったプログラム」リストから起動する
  • ショートカットアイコンから起動する
    • アプリケーションインストール時に作成したショートカットから起動する
    • タスクバーのアイコンから起動する
    • Windowsインジケータのアイコンから起動する
  • 「プログラムとファイルの検索」からアプリを指定して起動する
  • コマンドプロンプトから起動する
    • 環境変数PATHが指定されているアプリを起動する
    • startコマンドを使用する(レジストリキーの指定が必要)
      • /maxによる最大化、/minによる最小化で開く
    • パス指定して起動する
    • ディレクトリに移動して起動する

     

<ファイル関連付けが行われているアプリを起動する場合>

  • ファイルをダブルクリックする
  • アプリアイコンにファイルをドラッグ&ドロップする
  • ファイルを右クリック→「開く」/「プログラムを選択して起動」を選択する
    • 「管理者として起動」から管理権限で起動する
  • Windowsメニューの「▼」アイコン→「最近使ったファイル」からファイルを選択する
  • コマンドプロンプトから起動する
    • アプリの起動と同時に開くファイルを引数指定する
    • パス指定して関連ファイルを起動する
    • ディレクトリに移動して関連ファイルを指定する
    • startコマンドで関連ファイルを指定する(→ファイルを開いた状態でアプリ起動する)

     

<アプリ起動後、利用できるファイルを開く場合>

  • 「ファイル」メニューから起動する
    • 「開く(ファイルを開く)」からファイルを選択する
    • 「最近使用したファイル」からファイルを選択する
      • 対象ファイルがリンク切れの場合、グレーアウトする等も確認する
  • ショートカットから「ファイル」メニューを起動する
  • アプリアイコンにファイルをドラッグ&ドロップする(アプリ起動状態で実行する)
  • アプリケーションのウィンドウ上にファイルをドラッグ&ドロップする

 

 ネットで調べると様々なページで言及されているが、なんだか結構意見がバラバラ。どうもWindowsのOS種類やバージョンによって微妙な差異があったりしていたのが原因っぽい。
 ファイル名についての制限は試験でもよく確認される項目のため、いろいろ検証してみたこと等まとめ。
 ・以下はWindows7SP1で検証した内容となります。他のWindowsについてもいずれまとめる。
 ・規格その他の情報については2017年5月時点のものになります。追加情報あり次第修正。

 ・内容は独自研究のため間違っている可能性あり
 

●ファイル名・フォルダー名に使用できない文字

 Windows7では下記の文字がファイル名・フォルダー名に使用できません(全角であれば可)
 \ / : ? " < > |
 使用できないファイル名については、Windows7でもアプリによってまれに;(セミコロン)と,(カンマ)も使用できません、というメッセージが表示される場合があります。おそらくFAT時代の制限メッセージがそのまま使われているから?
 =(イコール)はFAT時代には使用できなかったが、Windowsでは問題なく使用可能。ただし、ファイル名の処理でおかしな処理となった経験があるため記号などの確認を行う場合、ついでに試した方が良いかもしれません。

 

●ファイル名に使用できない名前

・Windowsの場合、システム予約語を含む文字列は指定できない
 CON, AUX, COMn (nは1~9), LPTn (nは1~9), PRN, NUL

 ただ、ファイルを作成するアプリによってはCOMnやLPTnあたりは処理が間違っているのか、COM1はダメだがCOM9だと作成できたりすることがある。試験時にはこのあたりは確認した方が良い。
 他にもシステム予約語には「CLOCK$」があるが、これはなぜかWindowsではファイル名に指定できる。理由は不明。

 

●ファイル名に使用できるが問題が起きやすい文字

・サロゲートペア文字
 いわゆる4バイト文字。日本語は2バイト文字と思い込んでいるプログラマに対して突き刺さる面倒くさい文字。
 ↓ここに詳しい
 http://w3.kcua.ac.jp/~fujiwara/jis2000/jis2004/jisx0213-2004-surro.html
 Windowsでサロゲートペアに対応したのは、Windows VistaのJIS2004対応以降のため、古めのプログラムやそれを引き継いだ
 プログラムでは対応していないことが多い。
 そもそも読み込めないのほか、読み込めるがアプリ上ではファイル名が文字化けしているといったケースに遭遇したことあり。
 
・特定のUnicodeバージョンに依存した文字
 良く「機種依存文字」などと呼ばれることが多い記号系を含むカテゴリー。上記サロゲートペア文字も実はここに含まれる。
 Windowsのファイル名に使われる文字コードはデスクトップの文字コードに依存するため、いわゆるShift_JISに含まれないUnicord文字(化け文字等)は使用できなかったりうまく処理されなかったりしやすい。
 またUnicordはバージョンアップごとに文字が追加されたりしているため、Unicord処理系でも扱えない文字が出たりして余計にややこしい。
 以下は問題が発生しやすいバージョンと追加された文字について 

 Unicord3.2.0(2002年3月)
  このバージョンでJIS X 0213規格に正式対応している。以下の文字が追加された。
  俱剝𠮟吞噓姸屛幷瘦繫

  また、一部の文字が旧字で表示されるようになった(これ以前のバージョンと文字形が違う)
  ↓ここ参照
  https://ja.wikipedia.org/wiki/JIS_X_0213

 Unicode 5.1.0(2008年4月4日)
  このバージョンより、スターマーク(電話の米印)や麻雀牌、トランプやドミノといった記号に対応。

  ↓麻雀牌の文字コード
  http://www.unicode.org/charts/PDF/Unicode-5.1/U51-1F000.pdf
 
  ↓トランプとかドミノとか
  http://www.unicode.org/charts/PDF/U2600.pdf
  
  この中だと「♥」は比較的携帯電話などで良く使われる。

 Unicode 6.0.0(2010年10月11日)
  携帯電話の絵文字に対応。これ以降の7.0、9.0でも絵文字が追加されている
  ↓絵文字一覧
  https://ja.wikipedia.org/wiki/Unicode6.0%E3%81%AE%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7

・Unicord制御文字
 メモ帖などで右クリックした際にメニューから指定可能。
 アプリによってはこれを含んだファイル名を正しく表示できなかったり、開けなかったりする。
 RLO(文字列を右から左に並べる)などはファイル名偽装などで悪用されやすい。

 ‮
・半角スペース
 Windowsではファイル名に半角スペースを指定可能(というかOSが作成するシステムフォルダ名に普通に使用している)。
 ただしMS-DOS時代では半角スペースが区切り文字だった関係上、ファイル名として使用できなかった。この仕様を引き継いでいる
 一部アプリで問題になることがある。
 特に先頭、末尾スペースが良くやらかす。

・先頭に.(ドット)
 ファイル名およびフォルダ名の先頭にドットがある場合、パスの処理がおかしくなることがある。(エクスプローラーそのものの動作がおかしくなることがある)
 なお、末尾ドットはWindows上では指定できない。

 ファイル名は普通に先頭ドットを含む名前で作成可能だが、フォルダは通常の方法では作成できない。

 フォルダの場合「.名前.」のように前後にドットを付けて確定すると、末尾ドットが省略されて先頭ドット名を作れる。

・正規表現文字
 具体的にはこのあたり。正規表現を使ってファイル名制限している場合、エスケープが甘いとこのあたりが引っかかりやすい。
 ( ) [ ] { } & $ ` ^ ~
 特に()はWindowsでファイルコピーをした際に「XX-コピー(2)」のようなファイル名が作られるため、特に注意。

・~(チルダ)
 ~(チルダ)は8.3形式のショートファイル名に使われるため、ショートファイル名と混同される(あるいは同名ファイルとなる)可能性がある。

 

●ファイル名の長さ

 Windowsのエクスプローラーで指定可能なファイル名の長さはWindows9x系とNT系で異なる点に注意(古いプログラムでまれに引っかかります)
 Windows9x(95、98、Me)系ではファイル名に使用できる「バイト数」が255だった。そのため、半角255文字、全角127文字まで指定可能だった。
 WindowsNT(2000以降)系ではファイル名に使用できる「文字数」が255文字になった。文字バイト数に関わらず、255文字まで使用できる。
 
 また、ファイル名とは別に、絶対パス含めた259文字(258文字+制御文字1文字)まで指定可能。ドライブ名+フォルダパスを含む点に注意。
 
 一応ファイル名としてはNTSCでは32676文字まで可能となっているはずだが、FAT時代の名残からか(C++等の「MAX_PATH」定数の制限?)
 現状でもWindowsのエクスプローラーなど多くのアプリでは絶対パス260文字の制限が使われていることが多い。大体Microsoftのせい。

 なお、パス+ファイル名を含めて260文字を超える状態を作り出すことは可能。手順は以下の通り
 1. フォルダパス+ファイル名(拡張子込み)+制御文字1文字で259文字以下の状態を作る
 2. ファイル名の上位フォルダの名前をリネームする→リネームにより、パス+ファイル名が260文字以上にする
 

 とりあえずこんなものかな

 PictMasterOAのユーザーマニュアルがあまりに読み辛く、仕事時に毎回マニュアルに首っ引きになるのにいい加減懲りたので、忘備録を兼ねてBlogに挙げておく。

 

<例題>

以下の因子、水準の組み合わせを行う際、各制約条件の付け方について記述する。

  • 基本的に生成方法は「Parwise法」を使用する。「直交表」の場合、一部の制約が使用できなくなる点に注意する。

    • 組み合わせ生成時は「デフォルトのシードで作成」を使用する
  • 生成エンジンは「PICT」とする。

 

「A」が○のとき、「B」の値は「△」となる

 制約の基本形。要素1の値が特定の値の時、要素2の値が特定の値に制限される、というパターン。

 

<例題1>

「Alpha」の値が{Alpha1}のとき、「Bravo」の値は{Bravo1/Bravo2}のいずれか

  • 上記の条件の場合、まず制約式の制約1に「制約条件」となる因子「Alpha」の水準「Alpha1」を記載する。

    • このとき、制約を記述したセルに色を指定する(透明以外なら何でも)。こうすることでこのセルに記載した条件が「制約条件」の基準となる。

  • 次に、因子「Bravo」の値として{Bravo1,Bravo2}を記載する。

    • 複数の値を指定する場合、各々の値の間は,(カンマ)で区切ること

 上記条件で実行した出力結果は以下の通り

<例題1:出力結果>

 

 

<例題2>

「Alpha」の値が{Alpha1}のとき、「Bravo」の値は{Bravo4}以外の値

  • 逆制約式となるパターンの指定方法。「制約条件」となる因子「Alpha」は例題1と同一。
  • 制約が課せられる因子「Bravo」側は、指定する値の前に#(シャープ)を付けて指定する。これにより、逆制約(〇〇以外)という指定となる。
    • これも,(カンマ)で区切ることで複数の値を指定可能

 上記条件で実行した出力結果は以下の通り

<例題2:出力結果>