加快我的批处理文件解析速度

2024-03-11

我有一个批处理文件,它从一个 txt 文件中获取输入,如下所示。

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.


Server name lak-print01
Printer name Microsoft XPS Document Writer
Share name 
Driver name Microsoft XPS Document Writer
Port name XPSPort:
Comment 
Location 
Print processor WinPrint
Data type RAW
Parameters 
Attributes 64
Priority 1
Default priority 1
Average pages per minute 0
Printer status Idle 
Extended printer status Unknown 
Detected error state Unknown 
Extended detected error state Unknown 

Server name lak-print01
Printer name 4250_Q1
Share name 4250_Q1
Driver name Canon iR5055/iR5065 PCL5e
Port name IP_192.168.202.84
Comment Audit Department in Lakewood Operations
Location Operations Center
Print processor WinPrint
Data type RAW
Parameters 
Attributes 10826
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle 
Extended printer status Unknown 
Detected error state Unknown 
Extended detected error state Unknown 

Server name lak-print01
Printer name 3130_Q1
Share name 3130_Q1
Driver name Canon iR1020/1024/1025 PCL5e
Port name IP_192.168.202.11
Comment Canon iR1025 
Location Operations Center
Print processor WinPrint
Data type RAW
Parameters 
Attributes 10824
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle 
Extended printer status Unknown 
Detected error state Unknown 
Extended detected error state Unknown 

并解析它以获取列表中的某些内容,例如服务器名称、打印机名称、驱动程序名称等,然后将每个块条目放入其自己的逗号分隔行中。所以我可以有多行,每一行代表一个文本块,每一列都有特定的信息。其中一些 txt 文件有 100 多个条目。当开始解析时,我尝试解析的每个文件都需要 5-10 分钟

解析代码如下。

:Parselak-print01
SETLOCAL enabledelayedexpansion
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
(FOR /f "delims=" %%a IN (lak-print01.txt) DO CALL :analyse "%%a")>lak-print01.csv
attrib +h lak-print01.csv
GOTO :EOF

:analyse
SET "line=%~1"
SET /a fieldnum=0
FOR %%s IN ("Server name" "Printer name" "Driver name"
            "Port name" "Location" "Comment" "Printer status" 
        "Extended detected error state") DO CALL :setfield %%~s
GOTO :eof

:setfield
SET /a fieldnum+=1
SET "linem=!line:*%* =!"
SET "linet=%* %linem%"
IF "%linet%" neq "%line%" GOTO :EOF 
IF "%linem%"=="%line%" GOTO :EOF
SET "$%fieldnum%=%linem%"
IF NOT DEFINED $8 GOTO :EOF 
SET "line="
FOR /l %%q IN (1,1,7) DO SET "line=!line!,!$%%q!"
ECHO !line:~1!
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
GOTO :eof

我得到的输出是

lak-print01,Microsoft XPS Document Writer,Microsoft XPS Document Writer,XPSPort:,,,Idle 
lak-print01,4250_Q1,Canon iR5055/iR5065 PCL5e,IP_192.168.202.84,Operations Center,Audit Department in Lakewood Operations,Idle 
lak-print01,3130_Q1,Canon iR1020/1024/1025 PCL5e,IP_192.168.202.11,Operations Center,Canon iR1025 ,Idle 
lak-print01,1106_TRN,HP LaserJet P2050 Series PCL6,IP_172.16.10.97,Monroe,HP P2055DN,Idle 
lak-print01,1101_TRN,HP LaserJet P2050 Series PCL6,IP_10.3.3.22,Burlington,Training Room printer,Idle 
lak-print01,1096_Q3,Canon iR1020/1024/1025 PCL5e,IP_192.168.96.248,Silverdale,Canon iR 1025,Idle 
lak-print01,1096_Q2,Kyocera Mita KM-5035 KX,IP_192.168.96.13,Silverdale,Kyocera CS-5035 all in one,Idle 
lak-print01,1096_Q1,HP LaserJet P4010_P4510 Series PCL 6,IP_192.168.96.12,Silverdale,HP 4015,Idle 
lak-print01,1095_Q3,HP LaserJet P4010_P4510 Series PCL 6,IP_192.168.95.247,Sequim,HP LaserJet 4015x,Idle 

一切都很完美,代码按预期工作......但它只是超级慢!

我如何加快速度?问题是没有真正的 delim 并且标记各不相同..例如注释需要标记 2,但打印机名称需要标记 3。

任何有助于提高解析速度的帮助......该程序运行完美,但在解析过程中超级慢。


如果你需要速度,我建议Marpa http://savage.net.au/Marpa.html,一个通用的 BNF 解析器,in Perl https://metacpan.org/release/Marpa-R2code https://gist.github.com/rns/eab040af2e9e7336b1f1#file-26107314-pl, output https://gist.github.com/rns/eab040af2e9e7336b1f1#file-output.

这需要一些时间来适应,但可以完成这项工作,并为您提供一个可以轻松使用的非常强大的工具 - 请注意语法与输入的相似程度。

希望这可以帮助。

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

加快我的批处理文件解析速度 的相关文章

  • 构建一个简单的解析器,能够使用 PyParse 解析不同的日期格式

    我正在构建一个简单的解析器 它接受如下查询 显示 fizi 从 2010 年 1 月 1 日到 2006 年 2 月 11 日的提交 到目前为止我有 class QueryParser object def parser self stmn
  • 已安装全局 NPM 包但未找到命令

    我已经全局安装了两个 npm 包 下载 https www npmjs com package download and 谜虚拟盒 https www npmjs com package enigmavirtualbox通过命令行 npm
  • 使用变量更改批处理文件中的目录

    这是问题 set Pathname C Program Files cd Pathname pause 正如我所期望的 上面的内容不会更改目录 有人可以告诉我为什么吗 The set语句不会按照您期望的方式处理空格 你的变量确实被命名了Pa
  • 使用 R 读取和转换二进制原始数据

    我有一个file https drive google com file d 0BxMpk0nhnJy6SFhxd2xuMzJYYlk edit usp sharing其中包含原始 二进制数据和 ascii 它包含一个时间戳和一个代表速度的
  • VBscript 以提升的权限运行 bat 文件

    这是我的bat文件 REG DELETE HKLM Software Microsoft Windows CurrentVersion WindowsUpdate v SusClientId f REG DELETE HKLM Softwa
  • 使用 FoldLine 解析多个块

    对于这个简化的问题 我试图解析一个如下所示的输入 foo bar baz quux woo hoo xyzzy glulx into foo bar baz quux woo hoo xyzzy glulx 我尝试过的代码如下 import
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • 用于遇到 [...] 的 Haskell Parsec 解析器

    我正在尝试使用 Parsec 在 Haskell 中编写一个解析器 目前我有一个可以解析的程序 test x 1 2 3 end 执行此操作的代码如下 testParser do reserved test v lt identifier
  • 批处理文件删除目录中除指定列表之外的所有文件夹

    我正在寻找一个批处理文件 该文件将进入 C Documents and Settings 并删除除我想保留的几个文件夹之外的所有文件夹 这是一个破解方法 D 如果您在folders txt 中有一个文件夹路径列表 如下所示 C Docume
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 如何使用 BeautifulSoup 从表中选择特定行?

    So I have a question related to a previous question but I realized I needed to go one level more to get an 11 digit NDC
  • 我可以从命令行或 MS-Dos 启用/禁用网络连接吗?

    我想从 Windows 8 中的命令行启用 禁用网络连接 netsh interface set interface Local Area Connection DISABLED 要启用该接口 您需要运行 netsh interface s
  • 正则表达式,如果模式在引号中则忽略模式

    编写一个非常简单的脚本解析器作为学校项目的一部分 虽然这不是必需的 但我很好奇是否可以仅使用正则表达式来完成 语法类似于 ASP 其中脚本以 结尾 它只支持一个命令 pr 与echo或Response Write相同 现在我正在使用这个正则
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 如何批量获取子字符串在字符串中的位置

    获取子串的位置 Set str1 This is Test string Set sstr Test 这里我需要获取 Test 8 的位置 谢谢 echo OFF SETLOCAL Set str1 This is Test string
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO
  • 自动将 JSON 对象映射到 Ruby 中的实例变量

    我希望能够自动将 JSON 对象解析为实例变量 例如 使用此 JSON require httparty json HTTParty get http api dribbble com players simplebits gt shots
  • 用 C/C++ 编写的通用代码补全框架

    有没有用 C C C 11 编写的框架用于编写代码补全工具 或者也许有一些库允许 Java 或 C 的代码完成 也是用 C 编写的 我正在用 C 编写我的自定义 IDE 用于 Java 而不仅仅是 Java 开发 我想以最好的方式为其添加代
  • 在 Julia 中保存和检索字典的正确方法是什么?

    我已经看到 Julia 充分解释了 MAT 文件 这些文件中的结构可以毫无问题地作为字典读取 现在我创建了自己的字典 其结构如下 String String gt Int Int Int 在每个条目上 我可以保存它writedlm它产生了一
  • 为什么 C# ProcessStartInfoRedirectStandardOutput 会导致 xcopy 进程失败

    这有点痛苦 因为我现在没有代码 但我会尽力解释 我有一个简单的 C 应用程序 它启动 Ruby 脚本 它还执行一些其他操作 因此它生成一个批处理文件并执行该文件 我正在使用 C 进程对象并设置以下内容 重定向标准输出 true 重定向标准错

随机推荐

  • 当您有多个闹钟时取消单个闹钟

    我使用相同的pendingIntent来设置多个警报 每个警报使用不同的intentId 警报正在工作 现在我想取消一个特定的闹钟 如果我使用 cancel 方法 我最终会取消所有警报 我只想删除特定的一个 此外 即使在第二次或第三次启动期
  • 在我的代码而不是库代码中出现异常时停止

    我正在使用 Python 库开发一个应用程序urllib有时由于无法访问 URL 会出现异常情况 然而 异常在标准库堆栈中被提升了近 6 个级别 home user Workspace application main py in call
  • 功能规格和视图规格之间有什么区别吗?

    我有一个关于水豚干燥度的问题here https stackoverflow com questions 35255786 what is the correct usage of within method in capybara 352
  • DRF多对一反向查找

    我有一个返回宠物及其主人的 API 端点 每个所有者都有一个名字和一个或多个 pets 每只宠物都有一个名字和one owner Django 模型示例 class Owner models Model name models CharFi
  • 为什么控制器响应将模型字段名称设置为小写?

    在我的 NET Core 项目中 在所有控制器的响应中 对象字段均以小写形式出现在字段名称的前一个或两个字母中 iD PARAM foo cD PROM bar txT OFFICER lorem cN NEW PARAM fub iD S
  • 链接器错误,静态常量似乎没有被 odr 使用

    当您了解细节时 odr used 标准中的定义非常令人困惑 至少对我来说是这样 我通常依赖 如果引用 的非正式定义 except当左值到右值的转换可用时 对于整型常量 它们应该被视为右值 这似乎应该将其排除在引用规则之外 这是我无法链接的示
  • 如果总是与同一事物进行比较,是否有办法缩短条件?

    当我需要编写一个反复比较同一项目的条件时 我总是觉得很烦人 因为我会多次输入该项目 string x textBox1 Text if x apple x orange x banana 我想要这样的东西 但这当然不是正确的语法 if x
  • solveJsonModule 无法与 Angular 10 一起运行?

    我的全新 Angular 10 项目的资产文件夹中有一个基本的 JSON 文件 角度 CLI 10 0 1 节点 14 5 0 操作系统 win32 x64 TSC 版本 3 9 5 在我的 tsconfig json 中我有 compil
  • 从 Nib 或 Storyboard 设置 WKWebView 上的 WKWebViewConfiguration

    在 iOS 11 中 Apple 添加了在笔尖和情节提要上添加 WKWebViews 出口的功能集 使用自动设置的默认 WKWebViewConfiguration 时 它似乎工作正常 但是 我希望能够使用自定义 WKWebViewConf
  • 如何从高图表中删除“值”和“系列”?

    I m using highcharts on my website which looks great but I now want to remove these two labels from the chart 我尝试禁用各种标签
  • 如何获取google地图上的平均交通数据

    我想像这样在谷歌地图上显示平均流量层 但是 这张地图显示的是实时流量数据 而不是我想在谷歌地图上显示一段时间内的平均流量 这可能吗 或者任何其他地图 API 可以提供帮助吗 请为该问题加注星标问题跟踪器链接 https issuetrack
  • 如何在com.google.android.material.chip.Chip上设置chipText?

    我正在调查以下提供的材料成分 implementation group com google android material name material version 1 0 0 alpha3 namely com google and
  • PHP 彗星 usleep 阻塞 apache mpm?

    我那里有一颗彗星我以这种方式运行 while 循环 items statement gt fetchAll statement is a PDO Statement iteration 0 while count items 0 itera
  • 使用复制的 git 存储库安全吗?

    如果我使用以下命令复制跟踪文件夹rsync a or cp R 然后我可以像使用 git 克隆一样使用该副本吗 或者这会导致各种奇怪的问题吗 这一切都在我的计算机上运行 因此没有其他人访问该存储库 显然 git cloned 目录知道它是从
  • 动态计算 Pandas 中公式的表达式

    我想使用一个或多个数据帧列执行算术pd eval 具体来说 我想移植以下计算公式的代码 x 5 df2 D df1 A df1 B x 使用代码pd eval 使用理由pd eval是我想自动化许多工作流程 因此动态创建它们对我很有用 我的
  • 在 Linux 上以汇编形式输出整数

    这需要在纯汇编中完成 即没有库或对 C 的调用 我理解问题的本质 需要将整数除以 10 将一位数余数转换为 ASCII 输出 然后用商重复该过程 但由于某种原因 它不起作用 我在 x86 上使用 NASM 这是我到目前为止所拥有的 不输出任
  • UICollectionView 的单元格消失

    发生了什么 目前我有一个应用程序使用两个UICollectionViews里面一个UITableView 通过这种方式 我创建了一个看起来像 Pulse News 的应用程序 我的问题是 有时第 6 行和第 11 行完全消失 在本应是单元格
  • 我想通过 graph api 分享朋友的帖子

    我想通过 graph api 在 facebook 上分享一些帖子 但是没有这样的api 只有 饲料 存在 我尝试使用 me feed 图形 API 操作来分享我朋友的帖子 以及页面中的帖子 但它和我在 Facebook 网站上分享的不一样
  • 开发 BlackBerry OS6 需要哪个版本的 Blackberry JRE

    我下载了适用于 BlackBerry 的 Eclipse 插件 默认情况下具有 BlackBerry OS 7 运行时 我需要定位 BlackBerry OS 6 和 OS 7 设备 这也适用于 BlackBerry OS 6 还是我需要更
  • 加快我的批处理文件解析速度

    我有一个批处理文件 它从一个 txt 文件中获取输入 如下所示 Microsoft R Windows Script Host Version 5 8 Copyright C Microsoft Corporation All rights