• ベストアンサー

\(円)記号を置換したい

Windowsのファイル名に使用禁止文字(\:/*?"<>|)を全角に置換しようと思い、下記のコードを書いてみたのですが、「\」だけが全角に置換されません。 どうしたら、「\」も全角に置換できるでしょうか? よろしくお願いいたします。 Private Function ReplaceZenkaku(ByVal fileName As String) As String     Dim ignoreString As Regex = New Regex("[\\:\/\*\?""<>\|]")     Return ignoreString.Replace(fileName, New MatchEvaluator(AddressOf ReplaceKigou)) End Function Private Function ReplaceKigou(ByVal M As Match) As String     Return Strings.StrConv(M.Value, VbStrConv.Wide) End Function

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

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> Return Strings.StrConv(M.Value, VbStrConv.Wide) では、変換できないそうです。 「[Info] Microsoft.VisualBasic.StrConv 関数で半角の "\" が変換されない」 (http://support.microsoft.com/kb/916603/ja

hys884
質問者

お礼

ありがとうございました。 "\" はReplaceメソッドを利用しないといけないんですね。

その他の回答 (1)

回答No.2

ちょっとめんどくさいけど、 Replace関数で置き換えてみたらどうでしょう?

hys884
質問者

お礼

ありがとうございました。 ReplaceKigouの中で"\"の時はReplaceで全角¥に置換するようにしました。

関連するQ&A

  • VB6.0のString関数に代わるVB2008のそれは?

    2009年1月27日にVB 2008Expressをダウンロードしたばかりの初学者です。 ですから、色々とわからないことだらけです。 で、今回は VB6.0のString関数に代わるVB2008のそれ。 ? String(12, "*") ************ Function Strings(ByVal C As Char, ByVal L As Integer) As String   Return Space(L).Replace(" ", C) End Function 少しは探しましたが、適当なのがなくてStrings関数を作成してしまいました。 2週間程度の初学者。 しかも、文字列関連のヘルプは昨日に初めて紐解いたばかり。 ですから、「適当なのがない」との判断はかなり怪しいものです。 そこで、「VB6.0のString関数に代わるVB2008のそれは、これですよ!」という回答をお願いします。

  • VB2008でデリゲートの代わりにラムダ式が使えるというので、試してみ

    VB2008でデリゲートの代わりにラムダ式が使えるというので、試してみたのですが、うまくいきません。 試したコードは下記です。WindowsFormアプリで、Form1にButton1とLabel1を貼りつけております。 Button1を押すとLabel1に"はじめました"と表示し、2秒待ってから"おわりました"と表示するつもりです。 デリゲートを使った(2)は意図した動作をしますが、ラムダ式を使った(1)はLabel1に何も表示しません。 このようなことはできないのでしょうか? Public Class Form1 Private Delegate Sub longTaskDelegate() Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "" Dim dlg As New longTaskDelegate(AddressOf LongTask) dlg.BeginInvoke(AddressOf longTaskCallback, dlg) End Sub Private Sub longTaskCallback(ByVal ar As IAsyncResult) Dim dlg As longTaskDelegate = DirectCast(ar.AsyncState, longTaskDelegate) dlg.EndInvoke(ar) End Sub Private Delegate Sub displayMessageDelegate(ByVal msg As String) Private Sub DisplayMessage(ByVal msg As String) If Label1.InvokeRequired Then Label1.Invoke(Function() Label1.Text = msg) ' --- (1) 'Label1.Invoke(New displayMessageDelegate(AddressOf Me.DisplayMessage), msg) ' --- (2) Else Label1.Text = msg End If End Sub Private Sub LongTask() DisplayMessage("はじめました") System.Threading.Thread.Sleep(2000) DisplayMessage("おわりました") End Sub End Class

  • UTF8で作成されたHTMLファイルの表示について

    WebBrowserをフォームに貼り付け、次のようなコードを記載してたのですが、表示が文字化けしてしまいます。どうすればよいでしょうか? Private Sub Form_Load() Dim html As String Dim pDoc As Object html = ReadFileData("UTF8.html") Set pDoc = New MSHTMLCtl.HTMLDocument WebBrowser1.Navigate "about:blank" Set pDoc = WebBrowser1.Document pDoc.writeln html Set pDoc = Nothing End Sub Public Function ReadFileData(ByVal FileName As String) As String Dim bytArray() As Byte Dim intFileNo As Integer Dim lngFileLenB As Long lngFileLenB = FileLen(FileName) ReDim bytArray(lngFileLenB - 1) intFileNo = FreeFile Open FileName For Binary As #intFileNo Get #intFileNo, , bytArray Close #intFileNo ReadFileData = StrConv(bytArray, vbUnicode) End Function 環境:VB6+WinXP

  • VBA(Excel2003)で文字列の切り出し

    下のプロシージャーで全角半角混じりの文字列を切り出し、別の文字列で結合しようと思いますがうまくいく場合といかない場合があります。 イミディエイト・ウィンドウ上とCell上で動作が違います。 Cell上でうまく表示させるにはどうしたらいいでしょうか? Sub Test() Dim myString(2) As String Dim i As Integer myString(0) = "airueo" myString(1) = "かきくけこ" myString(2) = "さシすせそ" For i = 0 To 2 Debug.Print MidMbcs(myString(i), 1, 5) & "...テスト" Cells(i + 1, 1).Value = MidMbcs(myString(i), 1, 5) & "...テスト" Next i End Sub Function LenMbcs(ByVal str As String) LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function Function MidMbcs(ByVal str As String, start, length) MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode) End Function

  • プロパティープロシージャーについて

    簡単な年齢計算プログラムです。 書籍のサンプルなのでうまく動いています。 クラスの変数がPrivate strnameだったりするので そこへアクセスするためにプロパティプロシージャーを使っているというところまでは 判ったような気がしますが、 getとsetの関係がわかりません。 まず、 1.何をGetしているのか 2.なぜGetが先に来るのか、 3.Setの前にGetのReturnで返してますが実態は何を返しているのでしょうか?普通に考えると逆のような気がします。 根本がわかっていないのだと思いますが、どなたかお教え願います。 呼ぶ方 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim person As New Class1() person.Name = TextBox1.Text person.Birthday = DateTimePicker1.Value.Date MessageBox.Show(person.Name & "さんの年齢は" & person.GetAge()) End Sub クラスの方。 Public Class Class1 Private strname As String Private datBirthday As Date Public Property Name() As String Get Return strname End Get Set(ByVal pro_name As String) strname = pro_name End Set End Property Public Property Birthday() As Date Get Return datBirthday End Get Set(ByVal pro_birthday As Date) datBirthday = pro_birthday End Set End Property Public Function GetAge() As Integer Return Int(DateTime.Today.Subtract(Birthday).Days / 365.25) End Function End Class

  • VB2008で構造体を引数とした時にエラー

    VB2008の勉強を始めて数週間の初心者です。 勉強用にいろいろとプログラムを作っているのですが、 構造体(Structure)を引数で渡して戻り値を取得する Functionを作成してみました。 同一クラス内のPrivate Function の場合は問題ないのですいが、 追加した別クラスに Function を作成したところ 「 型 'TEST_A.Form1.str_IN' の値を 'TEST_A.Class1.str_IN' に変換できません。」 のエラーが表示されてしまいます。 別クラスのFunctionを使用する時、引数には構造体は指定できないのでしょうか? なにか文法上の誤りがあるのでしょうか? 初心者なので変な質問してたらスイマセン。 詳しい方がいらっしゃいましたらよろしくお願いします。 ------------------------------------------------------ Public Class Form1  Public Structure str_IN   Public in_aaa As String  End Structure  Private Sub Button1_Click(ByVal sender As System.Object,  ByVal e As System.EventArgs) ~   Dim stin As New str_IN   '------------------------------------   stin.in_aaa = "aaa"   Label1.Text = Test_Sub(stin) '<------- これはok   '-------------------------------------   Dim cls = New Class1   stin.in_aaa = "aaa"   Label1.Text = cls.CFnk(stin) '<----- エラーになる  End Sub  Private Function Test_Sub(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class ------------------------------------------------------------ Public Class Class1 '新たに作成したクラス  Public Structure str_IN   Public in_aaa As String  End Structure  Public Function CFnk(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class

  • リストボックス内の配列を保存・呼び出し

    お世話になります。 VB2005ユーザーです。 リストボックスに格納した配列をファイルへ保存・呼び出しをするにはどうすればいいのでしょうか? リストボックスにはTextbox1,2,3の内容を格納し、オーバーライドによりリストボックスにはTextbox1が表示されるようにすることはできたのですが、 SaveFileDialogを使って配列をファイルに保存する方法がわかりません。 http://dobon.net/vb/dotnet/file/xmlserializer.html こちらなどを参照させていただいたりしたのですが、よく理解できませんでした。 リストボックスに格納するコードは下記のようなものです。 Public Structure MyStruct Private _a As String Private _b As String Private _c As String Public Property a() As String Get Return _a End Get Set(ByVal Value As String) _a = Value End Set End Property Public Property b() As String Get Return _b End Get Set(ByVal Value As String) _b = Value End Set End Property Public Property c() As String Get Return _c End Get Set(ByVal Value As String) _c = Value End Set End Property ' ToStringメソッドをオーバーライドする Public Overrides Function ToString() As String Return Me._a End Function End Structure Private Sub リストに追加_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myStruct As New MyStruct myStruct.a = Textbox1.Text myStruct.b = Textbox2.Text myStruct.c = Textbox3.Text ' アイテム追加 ListBox1.Items.Add(myStruct) ListBox1.SelectedIndex = 0 End Sub 望む結果としては、リストボックスに格納した複数の配列をファイルに保存、呼び出し時には保存した内容を基にリストボックスに復元、という動作をして欲しいのです。 ご教示のほう、宜しくお願いいたします!!

  • VB.NETのデリゲートについて

    VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class

  • スレッドで Byref の引数を渡したい場合

    VB2005 の初心者です。 スレッドに Byref の引数を渡すやり方が分かりません。 Byval だとエラーは出ないのですが、 Byref だとどうしてもエラーが消えません。 ソースは下記です。 Private CDF As clsCDF Public Class clsCDF Public LOOP1 As clsLoop1 Public LOOP2 As clsLoop2 End Class Protected Overrides Sub OnStart(ByVal args() As String) Thread = New Thread(AddressOf ABC) Thread.Start(CDF) End Sub Private Sub prvABC ( ByRef CDF As Object ) End Sub 何かヒントになることでも良いので、 皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • Cで作成したDLL関数をVBから呼ぶ(.NET)

    以前の質問に「Cで作成したDLL関数をVBから呼ぶ」(QNo.1703839)がありますが、下記のコードを見るとVB6での内容だと思います。 Dim keydata As String * 128 keydata = String$(128, Chr(0) & Chr(0)) VB.NETでVC++のDLLで変更した文字列を受けたいのですが、 どのようにすればよいのでしょうか? VB.NET2003 <DllImport("DllTest.dll")> Private Shared Function _ Test(ByVal s1 As String) As String End Function Private Sub btnTest_Click(...) ... Dim s1 As String = "abc" Dim s2 As String Dim s3 As String s2 = Test(s1) MessageBox.Show(s2) ' "1"が表示される s3 = StrConv(s2, VbStrConv.None) MessageBox.Show(s3) ' 同じく"1"が表示 end sub VC++のDLL extern "C" __declspec (dllexport) BSTR __stdcall Test(char* s1) { AfxMessageBox(s1); // "abc"が表示される OK strcpy(s1, "123"); CString s2; s2 = "123"; return s2.AllocSysString(); } また、文字列に全角を含めても大丈夫でしょうか? Unicodeの変換処理を行う必要があるのでしょうか? よろしくお願いします。

専門家に質問してみよう