人生最悪の忘れ物

環境 VB6.0

 CSVデータをカンマで区切ってデータを取得して
 いるのですが、こういう処理はできるのでしょうか?
 例えば データがダブルコーテーションでくるられて
     いる場合はカンマ(,)を無視するといった
     ことはできるのでしょうか?

DIM CSVDATA AS STRING
DIM XWDNDATA() AS STRING

CSVDATA = "1,2,"あいう,おえお",25"

XWDNData = Split(CSVDATA, ",")

XWDNData(0) = "1"
XWDNData(1) = "2"
XWDNData(2) = ""あいう"
XWDNData(3) = "おえお""
XWDNData(4) = "25"

XWDNData(2)とXWDNData(3)を一つのデータとしたい

こうしたいデータ
XWDNData(0) = "1"
XWDNData(1) = "2"
XWDNData(2) = "あいうおえお"
XWDNData(3) = "25"

A 回答 (6件)

3度目のすいませんです。


また、間違えてました。
(もっと良く考えてから回答しないとだめですね。)
余計な空白が入ってしまいました。

'1度配列を結合し再度[,]で区切る
XWDNDATA = Split(Join(XWDNDATA, ""), ",")

に変更してください。

もう変更は無いと思います。(無い事を祈ってます)
    • good
    • 0
この回答へのお礼

taisuke555さんありがとうございました。すみませんたくさんソースを書いてくださって。taisuke555さんのおかげでできました。すっげーうれしいです。

お礼日時:2003/08/17 12:25

さらにすいません。


それなら

Private Sub Test()
  Dim CSVDATA As String
  Dim XWDNDATA() As String
  Dim i     As Integer
 
  Dim Dat    As String 'デバッグ用
 
  CSVDATA = "1,2,""あいう,おえお"",25"
 
  'データを["]で区切る
  XWDNDATA = Split(CSVDATA, """")
 
  '奇数番目の配列の[,]を削除する
  For i = 1 To UBound(XWDNDATA) Step 2
    XWDNDATA(i) = Replace(XWDNDATA(i), ",", "")
  Next i
  '1度配列を結合し再度[,]で区切る
  XWDNDATA = Split(Join(XWDNDATA), ",")
 
  'デバッグ用
  For i = 0 To UBound(XWDNDATA)
    Dat = Dat & i & "=" & XWDNDATA(i) & Chr(13)
  Next i
 
  MsgBox Dat
End Sub

でいいですね。(これなら絶対にでない文字[@]は必要ないです。)
    • good
    • 0

すいません。


「あいう,おえお」→「あいうおえお」
にしたいのでしたね。

  '偶数番目の配列の[,]を[@]に置換する
  '奇数番目の配列の[,]を削除する
  For i = 0 To UBound(XWDNDATA)
    If (i Mod 2 = 0) Then
      XWDNDATA(i) = Replace(XWDNDATA(i), ",", "@")
    Else
      XWDNDATA(i) = Replace(XWDNDATA(i), ",", "")
    End If
  Next i
に訂正してください。
    • good
    • 0

こんな方法はいかがでしょう?



Private Sub Test()
  Dim CSVDATA As String
  Dim XWDNDATA() As String
  Dim i     As Integer
 
  Dim Dat    As String 'デバッグ用
 
  CSVDATA = "1,2,""あいう,おえお"",25"
 
  'データを["]で区切る
  XWDNDATA = Split(CSVDATA, """")
 
  '偶数番目の配列の[,]を[@]に置換する
  For i = 0 To UBound(XWDNDATA) Step 2
    XWDNDATA(i) = Replace(XWDNDATA(i), ",", "@")
  Next i
  '1度配列を結合し再度[@]で区切る
  XWDNDATA = Split(Join(XWDNDATA), "@")
 
  'デバッグ用
  For i = 0 To UBound(XWDNDATA)
    Dat = Dat & i & "=" & XWDNDATA(i) & Chr(13)
  Next i
 
  MsgBox Dat
End Sub

[,]を[@]に置換していますが、
文字列中に絶対に出てこない文字ならば[#]でも[|]でも何でもいいです。
ただ、絶対に出てこない文字が無ければ無理ですね。
    • good
    • 0

質問例しかテストしていませんのでバグがあるかもしれませんが、興味があれば改良してください。

「,」から、「,」までに「”」があると次ぎの「”」までを切り出しています。
Sub test03()
c = "1,2,""あいう,おえお"",25"
s = 1
j1:
p = InStr(s, c, ",")
If p = 0 Then
b = Mid(c, s, Len(c) + 1 - s)
Else
b = Mid(c, s, p - s)
End If
p1 = InStr(1, b, """")
If p1 = 0 Then
s = p + 1
Else
p2 = InStr(p + 1, c, """")
b = Mid(c, s, p2 + 1 - s)
s = p2 + 2
End If
MsgBox b
If p <> 0 Then GoTo j1
End Sub
    • good
    • 0

 


正規表現を使えば簡単です。

参考URL:http://fukkey.dyndns.org/pins/vb/020425/35943.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報