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

splitがうまく処理されない

環境/言語:[C# .NET Framework]
分類:[ASP.NET]

おはつです。お知恵をお借りしたいです。
今、「\n」を「<BR>」に置き換える処理を作成しましたが、
うまく動作しません。(下記、ソース参照)
テキストボックスに"test\n"と入力しボタンをクリックした時に
"test<BR>"という結果を表示させたいと思っています。
下記の処理で、splitの処理がうまく「\n」で区切ってくれていないようです。
デバッグでテキストボックスに入力した値を見ると@"test\n"と頭に「@」がついて
います。これが原因でsplitがうまくいってないように見られます。
関数の引数に直接"test\n"とセットすればうまくsplitも起動し正常に処理が
されます。テキストボックスから入力した時に、値に「@」がつくのは
何故なのでしょうか?どなたか知っておられたら教えてください。


関数呼出側(コマンドボタンクリック処理)

TextBox2.text = cls.AddBR(TextBox1.text);

関数側
public static string AddBR( string strConvStr ){
string TempStr = "";
try {
if ( strConvStr != null ){
string[] wkArray = strConvStr.Split( '\n' );
for( int i = 0 ; i < wkArray.Length - 1; i++ ) {
TempStr = TempStr + wkArray[i] + "<br>";
}
}
return TempStr;
}catch( Exception e ){
string strMsg = "The exception error occurred. Details( " + e.Source + ":" + e.Message + " )";
SetErrorList(strMsg);
return TempStr;
}
}
お世話になります。

■No13714に返信(リュウさんの記事)
string.Replaceを使われてはいかがでしょう。

private void Button1_Click(object sender, System.EventArgs e)
{
  string text = this.TextBox1.Text;
  string addBrText;

  addBrText = text.Replace("\r\n", "<br>");
  this.TextBox1.Text = addBrText;
}

> 下記の処理で、splitの処理がうまく「\n」で区切ってくれていないようです。
> デバッグでテキストボックスに入力した値を見ると@"test\n"と頭に「@」がついて
> います。これが原因でsplitがうまくいってないように見られます。
> 関数の引数に直接"test\n"とセットすればうまくsplitも起動し正常に処理が
> されます。テキストボックスから入力した時に、値に「@」がつくのは
> 何故なのでしょうか?どなたか知っておられたら教えてください。

改行コードの CR + LFのLFしか置き換えしていないからでしょう。
なおこ(・∀・)様

返答ありがとうございます。
string.Replaceも試していたのですが
「\n」、「\r」の「\」ついた文字が認識されません。
ヘルプで調べたところ「@」付きの変数や値は「\」を無視するとありました。
テキストボックスで入力された値を取得したときに、「@」付きで値を
返ってくること自体でおかしくなっているようです。
何故、「@」付きで値が返ってくるのかが分かりません(-_-;)ウーン


■No13721に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> ■No13714に返信(リュウさんの記事)
> string.Replaceを使われてはいかがでしょう。
>
> private void Button1_Click(object sender, System.EventArgs e)
> {
>   string text = this.TextBox1.Text;
>   string addBrText;
>
>   addBrText = text.Replace("\r\n", "<br>");
>   this.TextBox1.Text = addBrText;
> }
>
>>下記の処理で、splitの処理がうまく「\n」で区切ってくれていないようです。
>>デバッグでテキストボックスに入力した値を見ると@"test\n"と頭に「@」がついて
>>います。これが原因でsplitがうまくいってないように見られます。
>>関数の引数に直接"test\n"とセットすればうまくsplitも起動し正常に処理が
>>されます。テキストボックスから入力した時に、値に「@」がつくのは
>>何故なのでしょうか?どなたか知っておられたら教えてください。
>
> 改行コードの CR + LFのLFしか置き換えしていないからでしょう。
> 何故、「@」付きで値が返ってくるのかが分かりません(-_-;)ウーン

\はエスケープ文字なので、\を単なる文字として扱うために@が付きます。
Regex.Unescape メソッドを使えば、@が付かない単なる\nを取得できます。
お世話になります。

■No13722に返信(リュウさんの記事)
すみません。読み違えてました...
>テキストボックスに"test\n"と入力しボタンをクリックした時に
"\nと入力する"んですね。

ごめんなさい...
trapemiya様 なおこ(・∀・)様

返答ありがとうございます。
trapemiya様、早速、試したらうまくいきました。
助かりました。

なおこ(・∀・)様、大丈夫ですよ。間違えは気にしてません。
いろいろ返答ありがとうございました。

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