将SMS消息写入.CSV(VBScript)时获取随机字符

时间:2013-12-23 19:23:21

标签: csv utf-8 vbscript sms format

我正在使用FrontlineSMS程序和一些用VBScript编写的代码来接收传入的SMS消息并将它们记录到CSV文件中。但是,百分比和数字等随机字符最终会出现在CSV文件中,即使它们不在SMS中。以下是我的意思的一个例子:

我将手机短信发送到连接电脑的调制解调器

"07/12/2013 11:29:56 25 Happy Holidays"

调制解调器然后接收消息并将其传递给脚本,该脚本将其输出到.CSV文件。但是,当我打开文件时,它会显示:

"07%2F12%2F2013 | 11%3A29%3A56 | 25 | Happy | Holidays |

每个单词都在自己的单元格中。我需要帮助找出如何摆脱出现的额外字符(如“%2F”),我的猜测是它与转换为.CSV时字符的加密/解密有关但我不知道知道从哪里开始寻求解决这个问题。

编辑:我发现它与ASCII编码有关。 “%2F”是斜线“/”的十六进制,但我仍然不知道如何防止这种情况发生。

谢谢!

以下是整个脚本:

Option Explicit
Dim first, secnd 
Dim fso, outFile 
Dim strFile, strValues, strLine, strInfo
Dim stamp, num, i, identify
Const ForAppending = 8

'error handling/format

    'Settings
   identify = WScript.Arguments(1)
   CStr(identify)
    stamp = MyDate()
    CStr(stamp)
    strFile = "C:\SMScomm\Log\" &identify &" " &stamp & " log.csv"

    'Create the file system object
    Set fso = CreateObject("Scripting.FileSystemObject")

    'Check whether argument were passed
    If WScript.Arguments.Count <> 1 Then
        WScript.Echo "No arguments were passed"
    End If

    strInfo = WScript.Arguments(0)
   'Replace(strInfo, "%2C", ",")
    'Split the argument from FSMS so it reads normally
    strValues = Split(strInfo, "+")

    'Open to append
    Set outFile = fso.OpenTextFile(strFile, ForAppending, True)

    num = UBound(strValues)

    If num = 0 then
        WScript.Echo "Formatting error"
    End If

    Do while i < num + 1
        strValues(i) = strValues(i) & ","
        i = i + 1
    Loop

    'Write to the .csv
    i = 0
    Do while i < num + 1
        outFile.Write(strValues(i) + " ")
        i = i + 1
    Loop

    outFile.WriteBlankLines(1)

    'Close the file
    outFile.Close

    'Clean up
    Set outFile = Nothing     
    Set fso = Nothing


Function MyDate()
    Dim dteCurrent, dteDay, dteMonth, dteYear
     dteCurrent = Date()

     dteDay = Day(dteCurrent)
     dteMonth = Month(dteCurrent)
     dteYear = Year(dteCurrent)

     MyDate = dteMonth & "-" & dteDay & "-" & dteYear
End Function

1 个答案:

答案 0 :(得分:0)

看起来您的脚本或调制解调器正在将特殊字符(如“/”)转换为十六进制格式。

您可以发布将此信息转储为CSV格式的脚本吗?

Option Explicit
Dim first, secnd 
Dim fso, outFile 
Dim strFile, strValues, strLine, strInfo
Dim stamp, num, i, identify
Const ForAppending = 8

'error handling/format

'Settings
    identify = WScript.Arguments(1)
   CStr(identify)
    stamp = MyDate()
    CStr(stamp)
    strFile = "C:\SMScomm\Log\" &identify &" " &stamp & " log.csv"

    'Create the file system object
    Set fso = CreateObject("Scripting.FileSystemObject")

    'Check whether argument were passed
    If WScript.Arguments.Count <> 1 Then
        WScript.Echo "No arguments were passed"
    End If

    strInfo = WScript.Arguments(0)
   'Replace(strInfo, "%2C", ",")
    'Split the argument from FSMS so it reads normally
    strValues = Split(strInfo, "+")

    'Open to append
    Set outFile = fso.OpenTextFile(strFile, ForAppending, True)

    num = UBound(strValues)

    If num = 0 then
        WScript.Echo "Formatting error"
    End If

    Do while i < num + 1
        strValues(i) = strValues(i) & ","
        i = i + 1
    Loop

    'Write to the .csv
    i = 0
    Do while i < num + 1
        Replace(strValues(i), '%2F', '/')
        Replace(strValues(i), '%3A', ':')
        outFile.Write(strValues(i) + " ")
        i = i + 1
    Loop

    outFile.WriteBlankLines(1)

    'Close the file
    outFile.Close

    'Clean up
    Set outFile = Nothing     
    Set fso = Nothing


Function MyDate()
    Dim dteCurrent, dteDay, dteMonth, dteYear
     dteCurrent = Date()

     dteDay = Day(dteCurrent)
     dteMonth = Month(dteCurrent)
     dteYear = Year(dteCurrent)

     MyDate = dteMonth & "-" & dteDay & "-" & dteYear
End Function

我确信有一种更优雅的方式可以解决您的问题。