当前位置: 首页 > 面试题库 >

在VBA中将带双引号的字符串添加到文件

夔桐
2023-03-14
问题内容

我正在从中国的AQI API中获取数据,正在将某些数据放入SQL
Server数据库中,但效果很好。我还决定将API返回的所有内容添加到JSON文件中,以便以后使用。

每当我尝试将API返回的字符串附加到文件中时,都会收到“无效的过程调用或参数”错误

到目前为止,这是我所做的:

Public Sub AddToJson(Jsonline As String)
     Dim strfile As String
     Dim fso As New FileSystemObject
     Dim fsoStream As TextStream
     Dim iexist As String
     Dim stradd As String

     strfile = "c:\JSON_AQI.json"
     stradd = Replace(Jsonline, Chr(34), Chr(34) & Chr(34) & Chr(34) & Chr(34))
     Debug.Print stradd
     iexist = Dir(strfile)

     'check if the file exists
     If iexist = "" Then
         'if it exists, open it and add the line
         Set fsoStream = fso.CreateTextFile(strfile)
     Else
         'if it doesn't exist, create it and add the line
         Set fsoStream = fso.OpenTextFile(strfile, ForAppending)
     End If

     fsoStream.WriteLine stradd

     fsoStream.Close

     Set fsoStream = Nothing
     Set fso = Nothing


 End Sub

这就是我作为Jsonline参数传递的内容:

 {"status":"ok","data":{"aqi":164,"idx":7130,"attributions":[{"name":"Hunan Environmental Protection Agency (????????)"},{"name":"China National Urban air quality real-time publishing platform (??????????????)"}],"city":{"geo":[33.8561,115.7831],"name":"sanguó lanshèng gong, Bozhou"},"dominentpol":"pm25","iaqi":{"co":{"v":14.8},"no2":{"v":24.7},"o3":{"v":45.9},"pm10":{"v":97},"pm25":{"v":164},"so2":{"v":5.1}},"time":{"s":"2017-04-06 04:00:00","tz":"+08:00","v":1491451200}}}

如您所见,我尝试在字符串上添加多余的双引号无济于事,还有其他我想念的东西吗?


问题答案:

实际上,接收到的JSON包含中文字符而不是?您发布的字符,应如下所示:

{
    "status": "ok",
    "data": {
        "aqi": 164,
        "idx": 7130,
        "attributions": [
            {
                "name": "Hunan Environmental Protection Agency (湖南省环境保护厅)"
            },
            {
                "name": "China National Urban air quality real-time publishing platform (全国城市空气质量实时发布平台)"
            }
        ],
        "city": {
            "geo": [
                33.8561,
                115.7831
            ],
            "name": "sanguó lanshèng gong, Bozhou"
        },
        "dominentpol": "pm25",
        "iaqi": {
            "co": {
                "v": 14.8
            },
            "no2": {
                "v": 24.7
            },
            "o3": {
                "v": 45.9
            },
            "pm10": {
                "v": 97
            },
            "pm25": {
                "v": 164
            },
            "so2": {
                "v": 5.1
            }
        },
        "time": {
            "s": "2017-04-06 04:00:00",
            "tz": "+08:00",
            "v": 1491451200
        }
    }
}

因此,您必须设置要明确附加为Unicode的代码片段的编码。我建议使用以下简单功能通过以下方式读取,写入和附加文本文件Scripting.FileSystemObject

Function ReadTextFile(sPath As String, lFormat As Long) As String
    ' lFormat -2 - System default, -1 - Unicode, 0 - ASCII
    With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 1, False, lFormat)
        ReadTextFile = ""
        If Not .AtEndOfStream Then ReadTextFile = .ReadAll
        .Close
    End With
End Function

Sub WriteTextFile(sContent As String, sPath As String, lFormat As Long)
    With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 2, True, lFormat)
        .Write sContent
        .Close
    End With
End Sub

Sub AppendTextFile(sContent As String, sPath As String, lFormat As Long)
    With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 8, True, lFormat)
        .Write sContent
        .Close
    End With
End Sub

因此,您可以通过调用附加字符串:

AppendTextFile Jsonline & vbCrLf, "C:\JSON_AQI.json", -1


 类似资料:
  • 问题内容: 如何在浏览器中显示的JavaScript字符串中包含双引号? 我正在做JavaScript作业,我必须在列表中间加上双引号,如下所示: 问题答案: 使用单引号。 或转义双引号。

  • 问题内容: 使用Python v2,我在程序中运行一个值,该值末尾将一个数字四舍五入到小数点后两位: 像这样: 有没有办法在小数点后每三位插入一个逗号值? 即:10000.00变成10,000.00或1000000.00变成1,000,000.00 谢谢你的帮助。 问题答案: 在Python 2.7和3.x中,可以使用格式语法 这是在记录PEP 378 -格式说明千位分隔符 并且在一个例子官方文档

  • 问题内容: 我正在尝试在“ ABCXYZ123”位置更新“ hi”。但不粘贴“ hi”,而是粘贴“ Marsha”。 问题答案: 尝试:

  • 问题内容: 我想从字符串中删除一个双引号(“)开头和结尾。 如何在Java中实现呢?谢谢! 问题答案: 您可以为此使用模式。 例如 要了解有关正则表达式的更多信息,请访问http://regular-expression.info。 也就是说,这有点像您要发明CSV解析器的味道。如果是这样,我建议您四处看看现有的库,例如OpenCSV。

  • 问题内容: 使用正则表达式的python中的代码可以执行类似这样的操作 谢谢 问题答案: 这是您需要做的所有事情: 正如叶立昂指出:(我几乎引用) 是的“非贪婪”版本。它使正则表达式匹配的字符数最少,而不是最多。贪婪的版本会给出字符串;非贪婪版本‘String 1,String 2,String3’ 另外(再次使用Johan,),如果您想接受空字符串,请更改为。星号表示零个或多个-加号表示至少一个

  • 我有一个dataframe,它包含一列和多个字符串。以下是数据的外观: 数据帧中几乎有100000个这样的行。我想把这些数据写入一个文本文件。 为此,我尝试了以下方法: 但是当我这样做的时候,我得到了整个字符串的引号。我得到的输出是: 但我想要的是: 我也试过这个: 但是,我得到一个错误,需要escapechar。如果我将escapechar='/'添加到代码中,我会在多个地方得到'/'(但没有引