VB6初心者のためのファイル名の命名規則についての質問

このQ&Aのポイント
  • VB6初心者がファイル名の命名規則について質問しています。
  • 特に、ファイル名に使用できない文字や、その文字を認識させる方法について知りたいようです。
  • 質問者は、使用するワイルドカード文字が文字として認識されず、どのように修正すればいいかを教えて欲しいとお願いしています。
回答を見る
  • ベストアンサー

vb6の初心者です。特定の文字について

よろしくお願いします。 私はVB6の初心者です。 かなり初歩的な質問ですが、聞いてください。 ファイル名の命名規則を識別するプログラムを組みたいのですが、 *(アスタリスク)など、ファイル名として使えない決まりがあります。 ファイル名の命名規則に反する文字を調べたいのですが、 *(アスタリスク)などを文字として認識させるにはどうすればいいのでしょうか。 ワイルドカードとして、読み込んでしまうため、文字として読み取ってくれません。 どなたか文字として認識させる記述の仕方がわかる方、いらっしゃいますでしょうか。 ご教授お願いします。 ファイル名に反する文字: * ? \ / | < > : "(以上の9文字) strFileName   ' ファイル名が格納されているString型の変数 if strFileName Like "*?*" Or strFileName Like "***" ...(他の条件)... Then   ' 命名規則に反するか   MsgBox "ファイル名が正しくありません!"   ' 反しているのでエラー End If

質問者が選んだベストアンサー

  • ベストアンサー
  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.4

#2さんのアドバイスで一つ思い浮かびましたが、こういう事ですか? Char(Asc("*"))  ← * (アスタリスク) Char(Asc("?"))  ← ? (クエスチョン) Char(Asc("""")) ← " (ダブルクォーテーション) Char関数とアスキーコードを使用すれば「: * ? \ / | < > : "」を表現できます。

ponzuman
質問者

お礼

ご回答ありがとうございます。 ソース上わかりやすい記述ですね。 参考にさせていただきます。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 方法は、いくらでもあるのではないでしょうか? 今のところ、私は、主に、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

ponzuman
質問者

お礼

ご回答ありがとうございます。 初心者なので試行錯誤にやっているので、すぐにこのような方法を思いつきませんでした。 一文字一文字検索していく方法もありますよね。 この書き方あるのは知りませんでした。「""""」 参考にさせていただきます。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.3

やっぱり言わんとしていることが分かりません(^^; もう少し補足していただけますか? プログラムとは、ほぼ例外なく「入力」があって「出力」があるわけですが、 >でも一番知りたいのは*(アスタリスク)を文字として認識させたいのです。 >普通に使ってしまうとワイルドカードとして認識されてしまいます。 >"*goo*" ←任意の文字列 と goo と 任意の文字列 >"***"  ←任意の文字列 と 任意の文字列 と 任意の文字列 >"*"   ←任意の文字列 >となってしまいます。 この場合、どのようなことを行って、どのような結果を望んでいるのでしょうか?一番知りたいと言っていることがよくわかりません(汗; ファイル名に ? や * を使いたいわけではないですよね? この中の「普通に使ってしまう」というのはどういう使い方ですか? Open "*goo*" For Output As #1 と言う使い方ですか? それとも Dir("*goo*") と言う使い方でしょうか? やりたいことを相手に正確に伝えるテクニックというのもプログラマやSEの重要な資質ですよ。 箇条書きでも構わないので、やりたいことを列挙してみてください。

ponzuman
質問者

お礼

たびたびすいません。 初心者なもので、勉強させていただきます。 目的: テキストボックスにファイル名を入力して、コマンドボタンをクリックしたとき、正しいファイル名か判断するプログラム。(拡張子は抜き) 処理内容: ファイル名の命名規則に反することがあれば、エラーメッセージを返す。 それ以外はOKメッセージを返す。 質問したいこと: ファイル名が正しいか判断するには、ワイルドカードである文字(*、?)なども識別して、判断したいのです。 例えばファイル名の中に?文字がどこかに含まれていないか判断するためには"*?*"を使い判断します。 if 0 <> InStr(strFileName, "*?*") then  ' ファイル名に?が含まれていたらエラー しかし、結果としては?を文字として認識してくれてないみたいです。 ですので、ワイルドカードで使われる文字をただの文字として認識してくれる記述方法が見つかればと思い質問いたしました。 おわかりいただけたでしょうか。 すいません、説明がへたくそで…。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

chr(42)で * を表現できますよ。instr関数内で使用可。 VB6が無くても、EXCEL2000以降のVBEで試験はできますよ。

ponzuman
質問者

お礼

ご回答ありがとうございます。 なるほど! chr(xx)で指定してやればいいのですね。 Officeがあるので、早速試してみたいと思います。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

イマイチ言わんとしていることが分からないのですが… strFileName変数の中にファイル名で使用できない文字が含まれているかを調べたいんですよね? 単純に考えると、InStr関数を使えばいいのでは? 今VBを使える環境がないので、InStr関数はヘルプで調べてください。

ponzuman
質問者

お礼

ご回答ありがとうございます。 わかりづらい文章ですいません。 InStr関数でもいけそうですね!ありがとうございます。 申し訳ありませんが、私も今、使える環境ではないのでわかりません。(他のマシンなので) でも一番知りたいのは*(アスタリスク)を文字として認識させたいのです。 普通に使ってしまうとワイルドカードとして認識されてしまいます。 "*goo*" ←任意の文字列 と goo と 任意の文字列 "***"  ←任意の文字列 と 任意の文字列 と 任意の文字列 "*"   ←任意の文字列 となってしまいます。 *、?、"、などを「文字」として認識させるにはどーすればいいのでしょうか。

関連するQ&A

  • VBA 変数にアスタリスクが含んでるかどうか

    変数にアスタリスクが含んでるかどうかをIFステートメントで取得するには? Sub test() Dim mystr As String mystr = "*/" If mystr Like "*" Then MsgBox "mystrはアスタリスクを含んでます。" End If End Sub このようなことをしたい場合、 mystr = "*/" でも mystr = "/" でも、結局は*が、どの文字でも含まれると認識してしまいます。 変数にアスタリスクが含まれてるかどうかを判定する方法を教えてください。

  • 【AccessVBA】ダイアログで複数選択しCSVインポートする

    お世話になります 現在1ファイルごとでインポートさせていますが 複数選択でインポートさせたいのですがわかる方ご教授お願いします。 ■現在のVBA '実行ボタンのイベント Private Sub 参照_Click() Dim strFileName As String 'ファイルを開くダイアログを表示 strFileName = GetFile("") If Len(strFileName) > 0 Then Me.テキスト1 = strFileName Else MsgBox "ファイルは選択されていません! End If End Sub Private Sub 実行_Click() TextConv Me.テキスト1, "定義名", "テーブル名" End Sub 'テキストコンバートルーチン Sub TextConv(strFle As String, strInp As String, strTbl As String) If MsgBox("インポートしますか?", 4, "実行確認") = vbYes Then DoCmd.TransferText acImportDelim, strInp, strTbl, strFle, False MsgBox "テーブルデータを更新しました" End If End Sub 上記の内容を変更だけでよいのか まったく書き直しかどうかもわかっていません わかる方ご教授よろしくお願いします。

  • VBA での文字列編集

    すみません、VBA初心者であまり調べる時間がないので質問させて頂きます。 Dim strFileName As String Dim strChk1 As String Dim strChk2 As String strFileName には "20070703_TEST001_DATA.csv" の文字列のデータが 格納されているとします。 この strFileName を編集して strChk1 には "20070703" strChk2 には "TEST001" がセットされるようにしたいのですが。。。 どのようにプログラムを書くのが一番いいのでしょうか? よろしくお願いします。

  • VBAでCSVを文字列として取り込む方法

    VBAでCSVを文字列として取り込む方法を教えてください。 下記のようにCSVファイルを取り込んでいます。 Array関数を使用していますが、どうしても文字列として認識してくれません。 Sub CSV取り込み() Dim xlAPP As Application ' Applicationオブジェクト Dim strFILENAME As String ' OPENするファイル名(フルパス) 'Applicationオブジェクト取得 Set xlAPP = Application '「ファイルを開く」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE) 'キャンセルされた場合は以降の処理は行なわない If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _ Array(4, 2), Array(6, 2)) Workbooks.Open Filename:=strFILENAME ActiveWorkbook.Sheets(1).Cells.Copy _ Destination:=ThisWorkbook.Worksheets("sheet1").Range("A1") End Sub この書式ではCSVを文字列として取り込めないのでしょうか? どなた様かご教示ください。 よろしくお願いいたします。

  • 「句読点の「。」の後に文字が続くなら」

    「句読点の「。」の後に文字が続くなら」 という条件でIFステートメントを作成するには? 例えば、 Sub Macro() Dim s1 As String s1 = "今日は晴れです。でも明日は雨です。" If s1 Like "*。*" Then MsgBox "。の後ろにも文字があります。" End If End Sub の時は、OKなのですが、 s1 = "今日は晴れです。" にした時も、 If s1 Like "*。*" Then だと、 MsgBox "。の後ろにも文字があります。" が表示されてしまいます。 s1 = "今日は晴れです。でも明日は雨です。" の時は、 MsgBox "。の後ろにも文字があります。" を表示させて、 s1 = "今日は晴れです。" の時は表示させない方法を教えてください。 実は行を最終行までループさせてるので IFステートメントは1つしか作りたくないです。

  • VB6でテレビ番組表HTMLの保存

    VB6の以下のプログラムで下記URLのテレビ番組表を保存しようとしたのですが、うまくできませんでした。ソースを開いてみるとEUC-JPとなっていまして、これが原因かと思うのですが、保存するにはどうしたら良いでしょうか? よろしくお願いします。 ■URL http://tv.nikkansports.com/tv.php?site=007&mode=06&category=g&area=025&template=time&sdate=20081226&lhour=24&shour=5&arg=05 ■プログラム Private Sub Command1_Click() Dim strURL As String ' 取得URL Dim strFileName As String ' ファイル名 ' URLとファイル名を代入する strURL = Text1.Text strFileName = Text2.Text ' 指定されたURLのドキュメントをファイルに出力する Open strFileName For Output As #1 Print #1, Inet1.OpenURL(strURL) Close #1 MsgBox strURL & "を" & strFileName & "に出力しました" End Sub

  • サービス名の命名規則ってありますか?

    servicesファイルに記載するTCP(or UDP)のサービス名ですが、命名規則ってありますか? 使用禁止文字や、文字列の長さなど、何か決まりがあるのでしょうか。 ご存知の方いらっしゃったら、ぜひ教えてください。

  • VBのKillについて

    皆様いつもお世話になっております。 質問なのですが VBの構文の一部で Dim strFilename as string strFilename = "C:\Temp\*.*" Kill strFilename とすると、指定したフォルダの中身が削除されるのですが、このフォルダ内に以下のpdfファイルを入れると、エラーが発生してしまいます。 テキストファイルで約同容量のファイルの削除も試み成功しました。 また、10KB程度のpdfファイルも削除できます。 何が原因かお分かりの方おりませんでしょうか? 【詳細】 ファイル名:J00932_4.pdf ファイルサイズ:8,531KB エラーメッセージ:パス名が無効です。 どうぞよろしくお願いします。

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • 変数に特定の文字が含まれているなら(VBA)

    以前に質問した http://oshiete1.goo.ne.jp/qa4407128.html とは違うのですが 変数"あいうえお"に "あ"が含まれているなら "含まれています"と表示したいです。 Sub test() Dim strmoji As String strmoji = "あいうえお" If Find(strmoji) Like "*あ*" Then MsgBox "含まれています" End If End Sub 部分的に考えてみたのですが 「Sub、Function、または Property が定義されていません。(Error 35)」 が出てしまいます。 ご教授よろしくお願い致します。