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

ダブルクォーテーションについて

環境/言語:[Windows2000,VB.NET Framework1.1]
分類:[.NET]

またまたお世話になります。

また困っている事があります。毎回聞いてばかりなので段々と申し訳ない
気がします。

行いたい処理
下記のようなデータ型に格納されている、文字列を下記のように入れ替えたい。
DataRow型 → String型
String型 → DataRow型

 いっけんするとなんでもない処理なんですが、文字列にダブルクォーテーションが
含まれている時に困っています。
例えば、文字列「"""あいう"」の場合は、「"あいう」としたい。
 調べた結果、String型は、ダブルクォーテーション2つ続けて記述すると1つの
ダブルクォーテーションを意味しますよね(例、"""" → " )。DataRow型は、ダブ
ルクォーテーション1つで1つのダブルクォーテーションを意味しているみたいです。
(例、"""→")
 代入時に変換すれば、解決しそうなんですができません。
DataRow = String.Replace("""",""")←の記述は当たり前ですがエラーとなります。

よろしくお願いいたします。
■No10656に返信(178さんの記事)
> またまたお世話になります。
>
> また困っている事があります。毎回聞いてばかりなので段々と申し訳ない
> 気がします。
>
> 行いたい処理
> 下記のようなデータ型に格納されている、文字列を下記のように入れ替えたい。
> DataRow型 → String型
> String型 → DataRow型
>
>  いっけんするとなんでもない処理なんですが、文字列にダブルクォーテーションが
> 含まれている時に困っています。
> 例えば、文字列「"""あいう"」の場合は、「"あいう」としたい。
>  調べた結果、String型は、ダブルクォーテーション2つ続けて記述すると1つの
> ダブルクォーテーションを意味しますよね(例、"""" → " )。DataRow型は、ダブ
> ルクォーテーション1つで1つのダブルクォーテーションを意味しているみたいです。
> (例、"""→")
>  代入時に変換すれば、解決しそうなんですができません。
> DataRow = String.Replace("""",""")←の記述は当たり前ですがエラーとなります。
>
> よろしくお願いいたします。

ちょっとしたアイデアですが、
別の文字列に変えてから、処理する...といった方法はどうでしょうか?
例えば、""""を;;;;
といった具合に...で
;;;;を"""に変換するのです。

#とりあえず、正規表現を使うといった考え以外での回答です。
(つっこみ:DataRowは行ですよ?)

両サイドに「"」があるか調べて、あれば両サイド1文字ずつ切り取るとして、
残りの内側部分は、「s=s.Replace("""""", """")」する、とか。
ご回答ありがとうございます。ぺがらぼさん。こど。さんの

ぺがらぼさん
 私の情報提示不足ですね。すみません。
取得した文字列は、文字であればどのような記号OR文字がはいってくるか
わかりません。ですので、別の文字列にするという事ができません。
一番初めにお伝えしなければならない情報でした。

こどさん
> 両サイドに「"」があるか調べて、あれば両サイド1文字ずつ切り取るとして、
> 残りの内側部分は、「s=s.Replace("""""", """")」する、とか。
上記の文をヒントに簡単にできることが思いつきました。

「String→DataRowにする方法」
s=String
d=DataRow

s=s.Replace("""""", """")
d=s

「DataRow→Stringにする方法」の方法も今考えているので、解決したら報告
します。

> (つっこみ:DataRowは行ですよ?)
上記の意味がわかりません。軽いジャブを受けているはずなんですが、、。
DataRow = String.Replace("""",""")→DataRow(0) = String.Replace("""",""")
だという事ですか?本気で聞いてすみません。

よろしくお願いいたします。
> >>(つっこみ:DataRowは行ですよ?)
> 上記の意味がわかりません。軽いジャブを受けているはずなんですが、、。
> DataRow = String.Replace("""",""")→DataRow(0) = String.Replace("""",""")
> だという事ですか?本気で聞いてすみません。
> > よろしくお願いいたします。

(System.Data.DataRowですよね?)


Dim dtable As New DataTable
dtable.Columns.Add("aiueo")
dtable.Columns.Add("kakiku")
とかすると、列aiueoと列kakikuの二列を持つテーブルです。
(下であまりずれないようにする都合により列名が全角。気にしないでください。)


で、DataRowというのは・・・
Dim rw As DataRow
rw = dtable.NewRow
rw("aiueo") = "列一の値。"
rw("kakiku") = "列二のあたい!"
dtable.Rows.Add(rw)
rw = dtable.NewRow
rw("aiueo") = "列一の値。二行目"
rw("kakiku") = "列二のあたい!二行目"
dtable.Rows.Add(rw)

とかすると、
+−−−−−−−−+−−−−−−−−−−+
|aiueo   |kakiku    |
+−−−−−−−−+−−−−−−−−−−+
|列一の値。   |列二のあたい!   |
+−−−−−−−−+−−−−−−−−−−+
|列一の値。二行目|列二のあたい!二行目|
+−−−−−−−−+−−−−−−−−−−+
ってな感じのDataTableになります。
DataRowは、1行目とか、二行目とかの行を指します。

rw=dtable.Rows(1)
rw("kakiku")=rw("kakiku").ToString.Replace("あたい","値")
とかすると、
+−−−−−−−−+−−−−−−−−−−+
|aiueo   |kakiku    |
+−−−−−−−−+−−−−−−−−−−+
|列一の値。   |列二のあたい!   |
+−−−−−−−−+−−−−−−−−−−+
|列一の値。二行目|列二の値!二行目  |
+−−−−−−−−+−−−−−−−−−−+
となります。
(※なお、Rowsを使って望んだ位置にアクセスできるのは、行削除されていない場合だけです。
実際のプログラムで上のRowsで位置指定する方法は真似しないでください。
dtable.Selectメソッドなどで行状態絞込をつけて真面目にアクセスしてください。)
「DataRow→Stringにする方法」もできました。

こんな関数を作成してみました。

Private Shared Function 関数名(ByVal strVal As String) As String

Dim intActivePoint As Integer = -1
Dim strTempVal As String = strVal

If ClsStr.f_blnIsNull(strVal) Then
Return strTempVal
End If

Do
'ダブルクォーテーションがあるか
intActivePoint = strVal.IndexOf("""", intActivePoint + 1)

'存在しなければ処理終了
If intActivePoint = -1 Then
Exit Do
End If

'ダブルクォーテーションを挿入
strTempVal = strTempVal.Insert(intActivePoint, """")

Loop

Return strTempVal

End Function

こど。さん。わざわざ説明していただきありがとうございます。
こど。さんのつっこみがやっとわかりました。勘違いはしていないと思います。

今回は、
1.DataRowに1行分データを作成
2.DataTableに1.のデータをセット
3.DataRowを破棄
という1.→2.→3.の繰り返しの処理を行っています。(これも説明していません
でした・・)

ぺがらぼさん、こど。さん、お付き合いありがとうございました。
解決済み!

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