「これはヤバかったな」という遅刻エピソード

よろしくお願いします。
私はVB6の初心者です。
かなり初歩的な質問ですが、聞いてください。

ファイル名の命名規則を識別するプログラムを組みたいのですが、
*(アスタリスク)など、ファイル名として使えない決まりがあります。
ファイル名の命名規則に反する文字を調べたいのですが、
*(アスタリスク)などを文字として認識させるにはどうすればいいのでしょうか。
ワイルドカードとして、読み込んでしまうため、文字として読み取ってくれません。
どなたか文字として認識させる記述の仕方がわかる方、いらっしゃいますでしょうか。
ご教授お願いします。


ファイル名に反する文字: * ? \ / | < > : "(以上の9文字)

strFileName   ' ファイル名が格納されているString型の変数
if strFileName Like "*?*" Or strFileName Like "***" ...(他の条件)... Then   ' 命名規則に反するか
  MsgBox "ファイル名が正しくありません!"   ' 反しているのでエラー
End If

A 回答 (5件)

#2さんのアドバイスで一つ思い浮かびましたが、こういう事ですか?



Char(Asc("*"))  ← * (アスタリスク)
Char(Asc("?"))  ← ? (クエスチョン)
Char(Asc("""")) ← " (ダブルクォーテーション)

Char関数とアスキーコードを使用すれば「: * ? \ / | < > : "」を表現できます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ソース上わかりやすい記述ですね。

参考にさせていただきます。

お礼日時:2006/02/14 23:01

こんばんは。



方法は、いくらでもあるのではないでしょうか?
今のところ、私は、主に、VBAを扱うので、その場合は、まったく違う方法なので、あまり考えたことがありませんが、Like 演算子でも出来ますし、InStr() でも、以下のようなコードにしてもよいし、API の PathGetCharType を使ってもできると思います。

つまり、戻り値が、GCT_INVALID ,GCT_SEPARATOR ,GCT_WILD
の時ですね。

Dim strFileName As String
  Dim t As String
  Dim i As Integer
  strFileName = Text1.Text
  If strFileName = "" Then
   MsgBox "ファイル名がありません。"
   Exit Sub
  End If
  For i = 1 To Len(strFileName)
   t = Mid$(strFileName, i, 1)
   If LenB(StrConv(t, vbFromUnicode)) > 1 Then
     MsgBox "全角文字です。  " & t
     Else
     Select Case t
      Case "*", "?", "\", "/", "|", "<", ">", ":", """"
        MsgBox "ファイル名が正しくありません!" & t
        Exit Sub
     End Select
   End If
  Next
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

初心者なので試行錯誤にやっているので、すぐにこのような方法を思いつきませんでした。

一文字一文字検索していく方法もありますよね。

この書き方あるのは知りませんでした。「""""」

参考にさせていただきます。

お礼日時:2006/02/14 23:06

やっぱり言わんとしていることが分かりません(^^;


もう少し補足していただけますか?

プログラムとは、ほぼ例外なく「入力」があって「出力」があるわけですが、

>でも一番知りたいのは*(アスタリスク)を文字として認識させたいのです。
>普通に使ってしまうとワイルドカードとして認識されてしまいます。
>"*goo*" ←任意の文字列 と goo と 任意の文字列
>"***"  ←任意の文字列 と 任意の文字列 と 任意の文字列
>"*"   ←任意の文字列
>となってしまいます。
この場合、どのようなことを行って、どのような結果を望んでいるのでしょうか?一番知りたいと言っていることがよくわかりません(汗;

ファイル名に ? や * を使いたいわけではないですよね?
この中の「普通に使ってしまう」というのはどういう使い方ですか?
Open "*goo*" For Output As #1
と言う使い方ですか?
それとも
Dir("*goo*")
と言う使い方でしょうか?

やりたいことを相手に正確に伝えるテクニックというのもプログラマやSEの重要な資質ですよ。
箇条書きでも構わないので、やりたいことを列挙してみてください。
    • good
    • 0
この回答へのお礼

たびたびすいません。

初心者なもので、勉強させていただきます。

目的:
テキストボックスにファイル名を入力して、コマンドボタンをクリックしたとき、正しいファイル名か判断するプログラム。(拡張子は抜き)

処理内容:
ファイル名の命名規則に反することがあれば、エラーメッセージを返す。
それ以外はOKメッセージを返す。

質問したいこと:
ファイル名が正しいか判断するには、ワイルドカードである文字(*、?)なども識別して、判断したいのです。
例えばファイル名の中に?文字がどこかに含まれていないか判断するためには"*?*"を使い判断します。
if 0 <> InStr(strFileName, "*?*") then  ' ファイル名に?が含まれていたらエラー
しかし、結果としては?を文字として認識してくれてないみたいです。

ですので、ワイルドカードで使われる文字をただの文字として認識してくれる記述方法が見つかればと思い質問いたしました。

おわかりいただけたでしょうか。
すいません、説明がへたくそで…。

お礼日時:2006/02/14 22:57

chr(42)で * を表現できますよ。

instr関数内で使用可。


VB6が無くても、EXCEL2000以降のVBEで試験はできますよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なるほど!
chr(xx)で指定してやればいいのですね。

Officeがあるので、早速試してみたいと思います。

お礼日時:2006/02/14 22:31

イマイチ言わんとしていることが分からないのですが…



strFileName変数の中にファイル名で使用できない文字が含まれているかを調べたいんですよね?

単純に考えると、InStr関数を使えばいいのでは?

今VBを使える環境がないので、InStr関数はヘルプで調べてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

わかりづらい文章ですいません。

InStr関数でもいけそうですね!ありがとうございます。

申し訳ありませんが、私も今、使える環境ではないのでわかりません。(他のマシンなので)

でも一番知りたいのは*(アスタリスク)を文字として認識させたいのです。
普通に使ってしまうとワイルドカードとして認識されてしまいます。
"*goo*" ←任意の文字列 と goo と 任意の文字列
"***"  ←任意の文字列 と 任意の文字列 と 任意の文字列
"*"   ←任意の文字列
となってしまいます。

*、?、"、などを「文字」として認識させるにはどーすればいいのでしょうか。

お礼日時:2006/02/14 21:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!