Vbscript-读取特定节的ini或文本文件

Vbscript-读取特定节的ini或文本文件,vbscript,ini,Vbscript,Ini,我想在文本文件中存储一些地址,然后根据组成员身份读取文件的特定部分。我已经做了所有的团体成员的事情,所以我不需要任何帮助 但我不确定是应该使用纯文本文件还是INI文件? 问题是,邮寄地址有两三行,我需要换行。 我尝试使用纯文本文件,但无法正确获得换行符 那么INI文件会更好吗 INI文件可能如下所示: [London] Address 1 Postbox 3245 58348 London [Copenhagen] Address 2 Postbox 2455 5478347 Copenhag

我想在文本文件中存储一些地址,然后根据组成员身份读取文件的特定部分。我已经做了所有的团体成员的事情,所以我不需要任何帮助

但我不确定是应该使用纯文本文件还是INI文件?
问题是,邮寄地址有两三行,我需要换行。
我尝试使用纯文本文件,但无法正确获得换行符

那么INI文件会更好吗

INI文件可能如下所示:

[London] Address 1 Postbox 3245 58348 London [Copenhagen] Address 2 Postbox 2455 5478347 Copenhagen [伦敦] 地址1 邮政信箱3245 伦敦58348 [哥本哈根] 地址2 信箱2455 5478347哥本哈根 不过,我不太确定这在INI文件中是否可行,也许我还需要为每一行命名。或者,我可以使用纯文本文件搜索单词[london],然后阅读每一行,直到出现换行符。然后将所有这些行存储在我要传递的变量中


你们怎么解决这个问题呢?

你们可以将地址存储在一行中,并使用一个特殊字符,例如下划线来表示换行符。读取地址时,只需将特殊字符替换为换行符

[伦敦]
地址=“邮箱3245\u 58348 伦敦“

[哥本哈根]
地址=“邮箱 2455_5478347哥本哈根”


这使您可以使用更多行或不使用邮箱行来存储地址。根据我的经验,像“我们的地址总是有两行,第一行是一个邮箱”这样的信息通常是不正确的…

我可能会使用CSV文件,而不是每行代表一个国家

Country,Address1,Address2,Address3,Address4
London,Address 1,Postbox 3245,58348 London
Copenhagen,Address 2,Postbox 2455,5478347,Copenhagen
如果您可以轻松识别数据,那么您可能会有更多描述性的列名(即Street1、Street2、Town、Postcode等)

这种文件格式也很容易读取,因为您一次只读取输入文件的一行,并使用类似于

aAddress = split(sLine, ",")
为了更方便地使用,您可以使用dictionary对象,并使用country作为键,使用array作为值

'sLine should be read from input file'
sLine = "Copenhagen,Address 2,Postbox 2455,5478347,Copenhagen"

'Create dictionary for addresses'
Set dic = CreateObject("Scripting.Dictionary")

'Split line into array'
aAddressParts = Split(sLine, ",") 

'Remove the first element of the array'
sValues = Mid(sLine, InStr(sLine, ",")+1)
aValues = Split(sValues, ",")

'Add new entry into dictionary'
dic.Add aAddressParts(0), aValues

'Usage'
MsgBox "Address for Copenhagen: " & vbNewLine & _
    Join(dic("Copenhagen"), "," & vbNewLine)
谢谢,
Maciej

我编写了一个小的VBScript类,用于处理以这种格式编写的“真实”ini文件:

[section_name] key1 = value1 key2 = value2 [组别名称] 键1=值1 键2=值2 该类的代码为:

类IniFileObject
私有m_数据
私有子类_初始化
设置m_Data=Server.CreateObject(“Scripting.Dictionary”)
端接头
私有子类
暗键
如果是IsObject(m_数据),则
对于m_数据中的每个键
m_数据(键)。移除所有
设置m_数据(键)=无
下一个
m_Data.RemoveAll
设置m_数据=无
如果结束
端接头
公共函数初始化(sFilePath)
暗棱线,斜线,x
暗切面
Set Init=Me
arrLines=GetFileLines(sFilePath)
如果不是(IsArray(arrLines)),则退出函数
sCurSection=“”
对于x=0到UBound(arrLines)
直线=修剪(棱线(x))
如果Len(sLine)>0,则
如果左(sLine,1)=“[”则
如果不是(扶手分段线(sLine、sCurSection)),则退出该功能
其他的
如果Len(sCurSection)=0,则
错误:Raise 1005,“IniFileObject init”,“在任何部分(&Server.HTMLEncode(sLine)&
退出功能
如果结束
设置OSECONDICT=m_数据(sCurSection)
如果不是(ParseOneLine(sLine,oSectionDict)),则退出函数
设置m_数据(sCurSection)=OSECIONDICT
如果结束
如果结束
下一个
端函数
公共属性Get ReadValue(节,键)
模糊词典
ReadValue=“”
如果m_数据存在(第节),则
设置oSectionDict=m_数据(部分)
如果存在oSectionDict(键),则ReadValue=oSectionDict(键)
如果结束
端属性
专用函数ParseOneLine(ByVal sLine、ByRef oSectionDict)
Dim arrTemp、sErrorMsg、sKey
sErrorMsg=“”
ParseOneLine=True
如果左(sLine,2)=“//”或左(sLine,1)=“'”或左(sLine,1)=“{”,则退出函数
ARRTTEMP=拆分(sLine,“=”)
如果UBound(arrTemp)=1,则
sKey=微调(arrTemp(0))
如果(Len(sKey)>0)和(Len(arrTemp(1))>0),则
如果没有(oSectionDict.Exists(sKey)),则
操作指令添加sKey,修剪(arrTemp(1))
其他的
sErrorMsg=“密钥已存在”
如果结束
其他的
sErrorMsg=“空键或值”
如果结束
其他的
sErrorMsg=“缺少或过多的“=”字符”
如果结束
擦除arrTemp
如果Len(sErrorMsg)>0,则
ParseOneLine=False
错误。Raise 1006,“IniFileObject Init”,“未能分析单行(&Server.HTMLEncode(sLine)&”):”&serrormg
如果结束
端函数
专用功能手柄剖面线(ByVal sLine、ByRef sCurSection)
HandleSectionLine=False

If(Len(sLine)我使用一个启动本机api的小可执行文件:and

可执行文件的调用方式如下:

另见

这是可执行文件的代码:

#包括
#包括
无效用法()
{
看跌期权(“ini/”);
出口(1);
}
内部主管道(内部管道,管道**aszArg)
{
int-iFile=2;
区间=3;
int-iKey=4;
int-iValue=5;
if(cArg<5)用法();
if(strcmp(aszArg[1],“get”)!=0和strcmp(aszArg[1],“set”)!=0)用法();
if(strcmp(aszArg[1],“set”)==0&&cArgOn Error Resume Next
    Set ini = New IniFileObject.Init(filePath)
    If Err.Number<>0 Then
        Response.Write("Error reading ini file")
    End If
On Error Goto 0
If IsObject(ini) Then
    Response.Write("Value for 'IP001': " & ini.ReadValue("IPaddress", "IP001") & "<br />")
    Set ini = Nothing
End If
Set sh = CreateObject("WScript.Shell")
Set exec = sh.Exec("ini.exe get %APPDATA%\sth\file.ini ""Section name"" key")
sFirma1 = exec.StdOut.ReadLine
Call sh.Run("ini.exe set %APPDATA%\sth\file.ini ""Section name"" key set_value", 0)