【问题标题】:Take element from a string in VB6从VB6中的字符串中获取元素
【发布时间】:2021-11-26 02:04:58
【问题描述】:

我有一个类似于 json 格式的字符串。由以下代码生成:

str = "{"
str &= Chr(34) & "code" & Chr(34) + ":" & Chr(34) & "0000001" & Chr(34)
str &= Chr(34) & "name" & Chr(34) + ":" & Chr(34) & "product 1" & Chr(34)
str &= Chr(34) & "value" & Chr(34) + ":" & Chr(34) & "150.00" & Chr(34)
str &= "}"

我只需要获取代码、名称和值之后的值。 我找不到有效的方法来做到这一点,因为稍后我将不得不推广到更多术语。在不转换为 JSON 的情况下如何做到这一点?

【问题讨论】:

  • 你确定元素之间没有逗号吗?因为如果有,那么它确实是 JSON,你可以parse it as JSON
  • += 在 vb6 中不是有效的赋值运算符。它在 vb.net 中。请更正您的标签。而且 - 由于正在执行字符串连接,&=& 将是更好的运算符(尽管 +=+ 将适用于给定的语句)。
  • 如果您无法将其解析为 JSON,您是否查看过正则表达式?
  • 如果格式是固定的,不能做成合适的JOSN,那么就在Chr(34)上拆分字符串,然后从数组中取出第3、7、11个元素。
  • chr(34) 是一个引号,所以构造的字符串看起来像{"code":"0000001""name":"product 1""value":"150.00"}。我怀疑你会找到任何现有的工具来为你解析它。最好按照@Slugsie 的建议继续并将字符串拆分为一个数组,如果字符串格式一致,那么第一个“值”将是第三个元素,任何后续的将是之后的每第四个元素(7, 11、15、19 等)。

标签: json string vb6 string-concatenation


【解决方案1】:

您提供的代码 sn-p 生成此字符串:

{"code":"0000001""name":"product 1""value":"150.00"}

假设您确实使用 VB6 来处理这个字符串,下面的代码会分解这些值:

Private Sub Test(ByVal str As String)
   Dim groups As Variant
   Dim values As Variant
   Dim i As Integer

   str = Replace(str, "{", "")
   str = Replace(str, "}", "")
   str = Replace(str, """""", ",")
   str = Replace(str, """", "")
   groups = Split(str, ",")

   For i = LBound(groups) To UBound(groups)
      values = Split(groups(i), ":")
      Debug.Print values(1)
   Next
End Sub

【讨论】:

    【解决方案2】:

    这样的事情应该会有所帮助(未经测试):

    
    colon% = 0
    Dim completed as Boolean
    
    while completed = false
    colon% = InStr(colon% + 1, str, ":") 
    If colon% > 0 Then
    value$ = Mid$(str, colon + 1, InStr(colon% + 2, str, Chr(34)) - colon%) 
    ' ... do whatever with value$ here...
    Else
    completed = true
    End If
    
    Wend
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多