我有两个文本文件,其中包含以下内容:
FILE1.TXT:
Windows 1.36
Linux 2.78
MacOS 3.45
Ubuntu 4.12
FreePhysicalMemory 30.12
TotalVisibleMemorySize 48.00
FILE2.TXT:
MacOS 6.39
Windows 4.42
Linux 5.76
Android 3.46
FreePhysicalMemory 31.65
TotalVisibleMemorySize 48.00
output.xls:
OPERATING SYSTEM SERVER1 SERVER2
Windows 1.36 4.42
Linux 2.78 5.76
MacOS 3.45 6.39
Ubuntu 4.12 0.00
Android 0.00 3.46
FreePhysicalMemory 30.12 31.65
TotalVisibleMemorySize 48.00 48.00
我希望在VBScript程序或其他任何程序中实现以下两项操作,这些操作适合在Windows服务器上运行:
我认为,Point2正在使用下面的代码实现,但没有得到如何在同一个程序中实现Point1。
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const FileToBeUsed = "c:\output.xls"
Dim objCDO1
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(FileToBeUsed, ForReading)
Set objCDO1 = CreateObject("CDO.Message")
objCDO1.Textbody = f.ReadAll
f.Close
objCDO1.TO ="sunny@abc.com"
objCDO1.From = "dontreply@abc.com"
objCDO1.Subject = "Server Memory"
objCDO1.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration /sendusing") = 2
objCDO1.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtpb.intra.abc.com"
objCDO1.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration /smtpserverport") = 25
objCDO1.Configuration.Fields.Update
objCDO1.Send
Set f = Nothing
Set fso = Nothing
任何建议都受到高度赞赏。
注意:我的目的是发送包含格式正确且对齐的数据的电子邮件。
EDIT1:
对于第1,2,3点,这是我所能做的。 不知道如何在HTML电子邮件正文格式中整合所有这些.. :(
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fso,f,objFSO,objFile,objRE, FileName
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
const strFileName1 = "D:\file1.txt"
const strFileName2 = "D:\file2.txt"
Set objFile = objFSO.OpenTextFile(strFileName1, fsoForReading) + objFSO.OpenTextFile(strFileName2, fsoForReading)
objobjFile.Close
Set objFile = Nothing
Set objFSO = Nothing
Set objRE = New RegExp
With objRE
.Pattern = "[A-Z][0-9]"
.IgnoreCase = False
.Global = False
End With
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
const strFileName1 = "D:\file1.txt"
const strFileName2 = "D:\file2.txt"
Set objFile = objFSO.OpenTextFile(strFileName1, fsoForReading) + objFSO.OpenTextFile(strFileName2, fsoForReading)
Do Until objFile.AtEndOfStream
strSearchString = objFile.ReadLine
Set colMatches = objRegEx.Execute(strSearchString)
If colMatches.Count > 0 Then
For Each strMatch in colMatches
Wscript.Echo strSearchString
Next
End If
Loop
objFile.Close
Class memory1class
Public operatingsystem, memory
End Class
Dim memory1dict: Set memory1 = CreateObject("Scripting.Dictionary")
Dim memory2dict: Set memory2 = CreateObject("Scripting.Dictionary")
Dim memory1: Set memory1 = new memory1class
With memory1
.operatingsystem = "?"
.memory = "?"
End With
memory1dict.Add "1", memory1
Dim memory1details: Set memory1details = memory1dict.Item("1")
WScript.StdOut.WriteLine("operatingsystem:" & memory1details.first & " " & memory1details.memory & " )
答案 0 :(得分:1)
我不想直接给你代码,因为这是一个很好的机会让你了解更多关于你自己解决问题的不同选项,但我可以给你一个粗略的概述做。
打开两个文本文件进行阅读。 Windows提供了一个“脚本”库,其中包含FileSystemObject
。您可以在下面声明它的实例,并且您可以谷歌了解如何使用它打开文本文件的具体信息:
Set fso = CreateObject("Scripting.FileSystemObject")
一次读取一行中的每个文件。解析每一行以获得“名称”部分和“数字”部分作为不同的值。您可以通过组合InStr
,InStrRev
和Mid
函数来执行此操作,也可以使用功能更强大的RegExp库(VBScript的正则表达式类)。
Set re = New RegExp
将每个“名称”和“值”存储到数据结构中供以后使用 - 我推荐了一个关联数组,例如VBScript的Dictionary类。对每个文本文件使用单独的文件将允许您稍后交叉引用它们。
Set dictStats1 = CreateObject("Scripting.Dictionary")
要在电子邮件中正确显示格式正确的数据,我建议使用HTML表格。除了TextBody
之外,CDO.Message
对象还具有HTMLBody
属性,允许您为电子邮件提供结构化格式,而不仅仅是原始文本。从w3school.com上的简单示例推断,您可以构造一个函数,该函数将接受两个字典并使用它们构造HTML表并将其作为字符串返回,以通过HTMLBody
加载到电子邮件中属性。
我希望有所帮助!如果您对具体细节有任何疑问,请与我们联系。