DOBON.NET DOBON.NETプログラミング掲示板過去ログ

"¥"を含む文字列の置換

環境/言語:[XP,VB.NET]
分類:[ASP.NET]

"¥"の文字列を含む置換をしたいと考えています。
¥を含む文字列をうまく置換することが出来ず、エラーが起きてしまいます。

ある文字列を"¥"にするのはうまくいくのですが・・・。

エラー内容は
解析中 "..\" - パターンの末尾に無効な \ があります。
です。

ロジックは
strData="..\master\TEST\TEST"
strData = Replace(strData, "..\", "\master")
です。

どなたか対処方法がありましたら、教えてください。

文法的には問題ないようですが。

Sub Button1_Click(sender As Object, e As EventArgs)
Dim strData
strData = "..\master\TEST\TEST"
strData = Replace(strData, "..\", "\master")
literal1.text=(strData)
End Sub

で、Literal1に「\mastermaster\TEST\TEST」
と表示されましたよ。
2005/03/28(Mon) 13:03:16 編集(投稿者)

こんにちは、じゃんぬ です。

■No10125に返信(Michelleさんの記事)
> ロジックは
> strData="..\master\TEST\TEST"
> strData = Replace(strData, "..\", "\master")
> です。

VB.NET 2003 Web アプリケーションで検証しましたが、問題なく動作しました。
ところで、Replace できたとしても、この strData のパスって不正じゃないですかね? (^^)



# あわわ、Moo さんと 9 秒差 (w
# しかも、同じようなコト書いてる (w
■No10129に返信(Mooさんの記事)

>
> 文法的には問題ないようですが。
>
> Sub Button1_Click(sender As Object, e As EventArgs)
> Dim strData
> strData = "..\master\TEST\TEST"
> strData = Replace(strData, "..\", "\master")
> literal1.text=(strData)
> End Sub
>
> で、Literal1に「\mastermaster\TEST\TEST」
> と表示されましたよ。

教えてもらったとうりやったところうまくいきました。
しかし、実際はモジュールないで処理しており正確には

Public Function TEST()
Dim strData
strData = "..\master\TEST\TEST"
strData = Replace(strData, "..\", "\master")

End Function

と記述していました。
これだとやはりエラーが発生してしまいます。
2005/03/28(Mon) 14:13:51 編集(投稿者)

> しかし、実際はモジュールないで処理しており正確には
最初からそうやって書いておいてもらえれば、話が早いのに……。(^^;


> Public Function TEST()
> Dim strData
なぜ、「As データ型」が書かれていないのでしょうか?


> strData = "..\master\TEST\TEST"
> strData = Replace(strData, "..\", "\master")
> End Function
プロシージャの最後に、『TEST = strData』もしくは、『Return strData』の
いずれかも書かれていませんから、生成された変数strData の内容が、
関数の戻り値として返される事もありませんよね。


--- 追記 ---
あ。もしかして、VB.NETではなく、(クライアント側の)VBScriptなのかな?
だとしたら、「As データ型」が無いのも説明がつくし。(^^;

もし、VBScript だとしたら、『Return strData』の構文は使えないので、
『TEST = strData』の構文を利用する事になりますね。
■No10135に返信(魔界の仮面弁士さんの記事)
> 2005/03/28(Mon) 14:13:51 編集(投稿者)
>
>>しかし、実際はモジュールないで処理しており正確には
> 最初からそうやって書いておいてもらえれば、話が早いのに……。(^^;
>
>
>>Public Function TEST()
>>Dim strData
> なぜ、「As データ型」が書かれていないのでしょうか?
>
>
>>strData = "..\master\TEST\TEST"
>>strData = Replace(strData, "..\", "\master")
>>End Function
> プロシージャの最後に、『TEST = strData』もしくは、『Return strData』の
> いずれかも書かれていませんから、生成された変数strData の内容が、
> 関数の戻り値として返される事もありませんよね。
>
>
> --- 追記 ---
> あ。もしかして、VB.NETではなく、(クライアント側の)VBScriptなのかな?
> だとしたら、「As データ型」が無いのも説明がつくし。(^^;
>
> もし、VBScript だとしたら、『Return strData』の構文は使えないので、
> 『TEST = strData』の構文を利用する事になりますね。

モジュールの先頭に
Imports System.Text.RegularExpressions
Imports System.Text.RegularExpressions.Regex
を定義していました。

これをコメント化したところうまくいきました。
どうしてなのでしょうか?

とりあえず原因が解かったので、応急処置としてモジュールの構成を修正し対応しようと思います。
2005/03/28(Mon) 15:02:50 編集(投稿者)

こんにちは、じゃんぬ です。

■No10136に返信(Michelleさんの記事)
> モジュールの先頭に
> Imports System.Text.RegularExpressions
> Imports System.Text.RegularExpressions.Regex
> を定義していました。
> これをコメント化したところうまくいきました。
> どうしてなのでしょうか?

そりゃ、こういうことだからです。(^^)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemtextregularexpressionsregexclassreplacetopic.asp

> とりあえず原因が解かったので、応急処置としてモジュールの構成を修正し対応しようと思います。

その前に、

 ・変数の型の指定はちゃんとしましょう。
 ・Function なのですから、戻り値を返しましょう。
 ・っていうか、Option Strict On にしませんか?
 ・質問する前に、どの Replace() メソッドを使っているのか自分で把握しておきましょう。
 ・こういうミスを防ぐためにも、String.Replace() を使いましょう。
 ・こういうメソッドの衝突を防ぐためにも、Imports はやたらめったらしないようにしましょう。
 ・どうしても Imports したいならば別名を使った Imports にしましょう。

−以上。

DOBON.NET | プログラミング道 | プログラミング掲示板