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

2023-12-01

我想将一些地址存储在文本文件中,然后根据组成员身份读取文件的特定部分。我已经完成了所有小组成员资格的工作,所以我不需要任何帮助。

但我不确定是否应该使用纯文本文件或 INI 文件?
问题是,帖子地址分为两行或三行,我需要换行。
我尝试使用纯文本文件,但无法正确换行。

那么 INI 文件会更好吗?

INI 文件可能如下所示:



[London]
Address 1
Postbox 3245
58348 London

[Copenhagen]
Address 2
Postbox 2455
5478347 Copenhagen
  

我不太确定这在 INI 文件中是否可行,也许我还需要命名每一行。或者,我可以使用纯文本文件并搜索单词 [london],然后读取每一行,直到出现换行符。然后将所有这些行存储在我将传递的变量中?

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


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



[section_name]
key1 = value1
key2 = value2
  

该类的代码是:

Class IniFileObject
    Private m_Data

    Private Sub Class_Initialize
        Set m_Data = Server.CreateObject("Scripting.Dictionary")
    End Sub

    Private Sub Class_Terminate
        Dim key
        If IsObject(m_Data) Then
            For Each key In m_Data
                m_Data(key).RemoveAll
                Set m_Data(key) = Nothing
            Next
            m_Data.RemoveAll
            Set m_Data = Nothing
        End If
    End Sub

    Public Function Init(sFilePath)
        Dim arrLines, sLine, x
        Dim sCurSection, oSectionDict
        Set Init = Me
        arrLines = GetFileLines(sFilePath)
        If Not(IsArray(arrLines)) Then Exit Function
        sCurSection = ""
        For x = 0 To UBound(arrLines)
            sLine = Trim(arrLines(x))
            If Len(sLine)>0 Then
                If Left(sLine, 1)="[" Then
                    If Not(HandleSectionLine(sLine, sCurSection)) Then Exit Function
                Else  
                    If Len(sCurSection)=0 Then
                        Err.Raise 1005, "IniFileObject init", "Found value outside any section (" & Server.HTMLEncode(sLine) & ")"
                        Exit Function
                    End If

                    Set oSectionDict = m_Data(sCurSection)
                    If Not(ParseOneLine(sLine, oSectionDict)) Then Exit Function
                    Set m_Data(sCurSection) = oSectionDict
                End If
            End If
        Next
    End Function

    Public Property Get ReadValue(section, key)
        Dim oSectionDict
        ReadValue = ""
        If m_Data.Exists(section) Then
            Set oSectionDict = m_Data(section)
            If oSectionDict.Exists(key) Then ReadValue = oSectionDict(key)
        End If
    End Property

    Private Function ParseOneLine(ByVal sLine, ByRef oSectionDict)
        Dim arrTemp, sErrorMsg, sKey
        sErrorMsg = ""
        ParseOneLine = True
        If Left(sLine, 2)="//" Or Left(sLine, 1)="'" Or Left(sLine, 1)="{" Then Exit Function
        arrTemp = Split(sLine, "=")
        If UBound(arrTemp)=1 Then
            sKey = Trim(arrTemp(0))
            If (Len(sKey)>0) And (Len(arrTemp(1))>0) Then
                If Not(oSectionDict.Exists(sKey)) Then
                    oSectionDict.Add sKey, Trim(arrTemp(1))
                Else  
                    sErrorMsg = "Key already exists"
                End If
            Else  
                sErrorMsg = "Empty key or value"
            End If
        Else  
            sErrorMsg = "Missing or too much '=' characters"
        End If
        Erase arrTemp
        If Len(sErrorMsg)>0 Then
            ParseOneLine = False
            Err.Raise 1006, "IniFileObject Init", "Failed to parse single line (" & Server.HTMLEncode(sLine) & "): " & sErrorMsg
        End If
    End Function

    Private Function HandleSectionLine(ByVal sLine, ByRef sCurSection)
        HandleSectionLine = False
        If (Len(sLine)<3) Or (Right(sLine, 1)<>"]") Then
            Err.Raise 1002, "IniFileObject init", "Invalid line found: " & Server.HTMLEncode(sLine)
            Exit Function
        End If

        sCurSection = Mid(sLine, 2, Len(sLine) - 2)
        If m_Data.Exists(sCurSection) Then
            Err.Raise 1003, "IniFileObject init", "Section exists more than once: " & Server.HTMLEncode(sCurSection)
            Exit Function
        End If

        m_Data.Add sCurSection, Server.CreateObject("Scripting.Dictionary")
        HandleSectionLine = True
    End Function

    Private Function GetFileLines(sFilePath)
        Dim objFSO, oFile
        Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
        If Not(objFSO.FileExists(sFilePath)) Then
            Set objFSO = Nothing
            Err.Raise 1001, "IniFileObject init", "file path '" & Server.HTMLEncode(sFilePath) & "' does not exist, check permissions"
            Exit Function
        End If
        Set oFile = objFSO.OpenTextFile(sFilePath)
        GetFileLines = Split(oFile.ReadAll, VBCrLf)
        oFile.Close
        Set oFile = Nothing
        Set objFSO = Nothing
    End Function
End Class

使用示例:

Dim filePath, ini
filePath = Server.MapPath("config.ini")
Set ini = New IniFileObject.Init(filePath)
Response.Write("Value for 'Key001': " & ini.ReadValue("MySection", "Key001") & "<br />")
Set ini = Nothing

当文件不存在或包含无效行时,代码会抛出各种错误,这些错误非常明显。可以在使用时使用这样的代码来“抑制”错误并且不显示错误页面:

On 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vbscript - 读取 ini 或文本文件的特定部分 的相关文章

  • 从 .vbs 文件调用 VBA 宏会引发 800A03EC 错误

    我正在尝试通过 VBS 文件 文件名 Check final vbs 运行 VBA 宏 这是代码 Option Explicit run macro Sub run macro Dim xl1 Dim sCurPath Dim xlBook
  • 使用shell脚本修改ini文件

    我有一个ini与此类似的文件 test foo bar 如果我们称之为ini文件为test1 ini 我如何改变的值foo to foobarbaz例如使用shell script 我已经尝试过以下方法 但它对我不起作用 我在 ini 文件
  • 自动打开、更新和保存 Excel 工作簿

    我想在Excel中自动修改列的数字格式 Set excel CreateObject Excel Application Set oWB excel Workbooks Open E Docs Invoice csv Excel Macro
  • ASP/VBScript - Int() 与 CInt()

    ASP VBScript 之间有什么区别Int and CInt Int http www w3schools com Vbscript func int asp Int 函数返回指定数字的整数部分 CInt http www w3scho
  • VBScript 条件短路解决方法

    我有一个必须维护的大型经典 ASP 应用程序 并且我多次发现自己因缺乏短路评估能力而受挫 例如 VBScript 不会让你逃脱 if not isNull Rs myField and Rs myField lt gt 0 then 因为如
  • 暗淡和公共有什么区别?

    今天提出了一个关于范围的问题 这引起了我的思考 我一直了解 VBScript 范围以及如何声明全局和本地 我突然想到我从来没有使用过Public变量但倾向于使用Dim相反 在全局声明时 据我了解Dim是相同的Public 但如果是这样的话
  • 将字符串转换为 UTF-8

    例如 我有一个分配给编码为 ansi 的变量的字符串str 如何将其编码为 UTF 8 你的意思是当它写入文件时 像这样 Set stream CreateObject ADODB Stream stream Open stream Typ
  • 我可以直接从命令行运行 vbscript 命令(即没有 vbs 文件)吗?

    在Python中你没有义务使用文件 你可以指定 c 并通过命令行上的字符串将 Python 命令提供给 Python 解释器 我可以用 vbscript 达到相同的结果吗 我见过需要您使用批处理脚本的解决方案 但是如果我所在的系统具有零写入
  • 使用VBS脚本检查字符串是否包含特定字符

    我的脚本正在做以下几点 检索所有我选择的文件夹文件 按日期对它们进行分类 从最近的到较早的 在窗口中显示它们 这是我的 VBS 脚本 我检索它here http codes sources commentcamarche net sourc
  • 经典的 asp/vbscript - 使用正则表达式修改所有 href

    在经典 ASP VB 脚本 中 我需要通过对当前 url 进行编码并在其前面挂起来修改字符串中包含的多个不同的 href 基本上 我想让所有的 href 都通过我的redirect asp 并将现有的 href 编码传递到新链接中 例如 现
  • 在 VBScript 中导航 XML 节点(对于 Dummy)

    我正在尝试编写一个脚本来为我操作 xml 文件中的一些数据 我对 VBScript 还很陌生 但有 VB NET 和 VBA 背景 所以我觉得我知道自己在做什么 我认为可能有更好的方法来导航文件 而不是对每一行进行大量调用 InStr 或类
  • VBScript 中的对象/类字典

    vbscript 中是否可以有对象 类的字典 例如 Class employeeclass Public first last salary End Class Dim employeedict Set employeedict Creat
  • 将 PHP 7 安装到我的服务器后,PHP 模块无法加载

    我将 PHP 7 安装到我的服务器上 因此 我没有 etc php5 和 etc php 7 0 当我运行我的网络应用程序时 我看不到任何以前的 CURL 或 fork 起初我收到这个错误消息 消息 调用未定义的函数curl init 安装
  • 我对一些小概念感到困惑

    我对 VBscript 非常陌生 正在努力学习所有概念 在我的实践过程中 我一直有一个疑问 dim a b c set a CreateObject scripting filesystemobject initiate the file
  • 尝试绑定到 AD 用户对象时出现错误 2147463168

    我正在 Windows 2012 不是 R2 并且无法升级 AD 环境上工作 当我使用管理员 非管理员 帐户从 vbscript 运行以下代码时 它运行完美 然而 当我以普通用户运行它时 我得到一个 2147463168 这似乎是一个绑定错
  • 使用 VBScript 切换当前活动声音设备?

    我想在连接到我的计算机 Windows 7 32 位 的两个音频设备之间切换 我看了一下question https stackoverflow com questions 35709 change active sound card on
  • 根据用户名获取广告详细信息

    我有一个代码可以从 AD 检索用户的详细信息 例如电子邮件地址 电话号码等 我当前使用的代码是 Set objSysInfo CreateObject ADSystemInfo strUser objSysInfo UserName msg
  • 从 VBS 运行同一目录中的批处理文件

    我有一个 VBScript 应该运行 bat 或 vbs 文件 但它不起作用 它出现一个错误 指出无法找到该文件 无论我是否放入文件路径 我认为这并不重要 因为它位于同一目录中 所以我的问题是 如何从 VBScript 中启动 bat 文件
  • 如何使用 VBScript 读取 .zip 文件的内容而不实际解压文件?

    我有一个以父目录开头的 zip 文件 我需要从文件中读取该目录 然后搜索我的硬盘以查看该目录名称是否已存在 如果存在 我会将其删除并替换为 zip 文件的内容 所有这些我都可以做 除了读取 zip 而不实际解压缩文件 zip 文件的大小可以
  • 读取 .ini 文件 vb.net?

    我有一个具有读取 ini 文件功能的项目 我无法显示我想要的 ini 文件的内容 我的代码读取 ini 文件 Public Function GetSettingItem ByVal File As String ByVal Identif

随机推荐

  • 根据季度观察计算年化回报

    我正在尝试从两个回报系列计算年化季度回报 给定一个向量 r a 这相当容易 r a lt c 05 02 03 08 1 04 06 08 r a lt t t r a I just need to transpose the vector
  • 在 RecyclerView 视图上捕获 KeyEvent

    按照以下说明进行操作this博客文章 我能够跟踪垂直列表适配器上的选定项目 但我无法通过按某个键来单击或长单击任何项 目 我创建了这个方法 public static boolean isConfirmButton KeyEvent eve
  • 如何在装配中比较两个浮点数

    我 在装配方面完全是新手 我想比较两个变量 浮点数 并正确跳转到正确的函数 这是一场乒乓球比赛 它是用 FASM 编写的 The right pad P0x dd 0 9 P0y dd 0 05 P1x dd 0 95 P1y dd 0 2
  • 使用提交按钮 AJAX 实时检查可用性

    测试1 php
  • 我们可以在Azure网站或虚拟机中运行windowservice或EXE吗?

    我有使用 Azure 上的云服务 托管服务的经验 然而 关于另一个项目 我对功能的选择感到困惑 我有一个项目 2层asp net应用程序 我需要运行windowservice或exe 它每天都会执行一些功能 如获取数据 所以我的困惑如下 关
  • 按列组合 CSV 文件

    假设我有两个 CSV 文件 名为A and B in Python A s head好像 headerNameA1 headerNameA2 1 12412424 1 1 1 1 1 1 1 B s head好像 headerNameB1
  • 调用 getExtra 时 Boolean 将自身重置为 false

    当我为 isDeleted 布尔值调用 getExtras getBoolean key 时 它不断将自身设置为 false 即使我传递的是 true 关于为什么会发生这种情况的任何见解 我尝试了很多其他方法 但没有成功地保持布尔值 TRU
  • 无法加载从笔尖引用的“my-icon.png”图像(iPhone)

    我收到以下错误消息 2011 02 11 14 47 13 815 myProject 13177 207 Could not load the icon troubleshoot png image referenced from a n
  • Tegra 3 设备上的 OpenGL 扩展

    我想知道新的 Tegra 3 设备上有哪些新的 OpenGL ES 扩展 有人愿意发布他们的设备名称 OpenGL 版本和扩展列表 仅限 Tegra 3 设备 吗 我认为其他开发人员也可以使用它 在 Android 上 您可以执行以下操作
  • JPanel 中的多个动画(线程)

    我正在尝试用 Java 编写棋盘游戏 我有 11 个类 包括主类 Board 类 扩展 JPanel 并绘制棋盘图像和骰子图像 Player 类扩展了 JCoponent 并实现了 Runnable Thread 每个玩家实例都是一个在棋盘
  • 使用 CarrierWave 和 Rails 设置 Froala WYSIWYG 编辑器

    我一直在努力让 Froala 充分利用我的 Rails 设置 我有一种类似博客的应用程序 其中包含与每个帖子相关的帖子和 图像 class Post lt ActiveRecord Base has many images accepts
  • 发现元素何时插入到 std::map

    我的程序正在将一些数据 地址 插入 使用 运算符 到 std map 中 我可以跟踪 137 个元素的插入 它们都插入了有效值 在某个阶段 我迭代地图并尝试对值 地址 进行一些操作 我在开始迭代地图之前设置了一个断点 当我在调试器中检查地图
  • 使用 NSScanner 查找短语的下一个匹配项

    我使用以下代码在 HTML 文件中查找特定代码行 NSURL requestTimetableURL NSURL URLWithString http www dhsb org index phtml d 201435 NSLog Load
  • 当我可以通过引用子类访问所有方法时,为什么还要引用基类呢?

    我正在学习java概念 我对java继承概念有疑问 在继承中 我们可以将子类实例分配给基类引用 这样我们就只能访问基类函数 我们可以将继承层次结构中的任何子类实例分配给基类引用 对于分配给特定基类引用的实例类型 我们只能访问基类函数 我没有
  • 通过手机浏览器检索 IMEI 号码/ SIM 号码/手机号码

    以下是场景 我有一个可通过移动浏览器访问的网络应用程序 每当用户单击可通过网络浏览器访问的应用程序页面中的链接时 我需要检测移动设备 IMEI 和 sim IMSI 这是为了跟踪具有相同 SIM 卡的同一设备并为他 她提供下一级访问权限 无
  • 使用 C# 和 COM 提取 InDesign CS4 图形

    我正在尝试获取 InDesign 文件中图形的详细信息 出于技术原因 我使用 COM 不是我最喜欢的 因为 在 StackOverflow 的其他地方讨论过 你必须花半生的时间来选角 理论上 下面的代码片段应该可以工作 智能感知显示AllG
  • 获取有关操作系统的详细信息

    我认为这很容易 但我无法弄清楚 如何判断使用的是Win7还是WinXP 比如操作系统的详细信息 Linux 应该给出具体信息 Mac 操作系统版本等 我想从中读取用户代理Services appShell hiddenDOMWindow a
  • 如何使用 PHP 检索页面源代码(在 javascript 运行之后)?

    在我的页面上 javascript在页面加载时添加了很多类 取决于页面 我怎样才能等到 javascript 添加这些类 然后使用 Javascript 或 PHP 从不同的文件获取 HTML 当页面加载完成后 使用 Ajax 将渲染的源代
  • 如何删除列表中其字符串包含另一个列表中的子字符串的元素

    我有一个像这样的字符串 var str DAVID CORPORATION 然后我在 str 中有一个我不想要的子字符串列表 var describers new List
  • Vbscript - 读取 ini 或文本文件的特定部分

    我想将一些地址存储在文本文件中 然后根据组成员身份读取文件的特定部分 我已经完成了所有小组成员资格的工作 所以我不需要任何帮助 但我不确定是否应该使用纯文本文件或 INI 文件 问题是 帖子地址分为两行或三行 我需要换行 我尝试使用纯文本文