- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个 VBScript 来查找和替换位于两个字符串之间的特定字符串。以下是脚本将在其上执行的文件示例:
%
N1 ( POSTED FILE NAME - WORKNC POST )
N2 ( INPUT FILE NAME - _6033_Cavity__01.TBA)
N3 (DATE/TIME: Thu Mar 15 06:36:08 2018)
N4 G0 G40 G80 G90 G98
N5 G17
N6 G57H901
N7 G173W0.0
N8 B0.000
N9 (Tapper 0.250000)
N10 T21
N11 M06
N12 S100
N13 M843
N14 G173 W0.0
N15 (- )
N16 ( Tapping )
N17 G0 G90 X-0.0001 Y8.8135
N18 G43 Z10.0632 H21
N19 G01 F500. X-0.0001 Y8.8135
N20 G01 Z9.7163 F500.
N21 G98 G84 X-0.0001 Y8.8135 Z6.0376 R7.6376 E10.
N22 G80 G01 F500.
N23 X-0.0001 Y8.8135 Z9.7163
N24 X-0.0001 Y8.8135 Z9.7163
N25
N26 M845
N27 G91 G28 Z0
N28 G90
N29 G57H901
N30 G173W0.0
N31 B0.000
N32 (Drill 0.005000)
N33 T19
N34 M06
N35 S5000
N36 M3
N37 G173 W0.0
N38 (- )
N39 ( Contour Chamfer )
N40 G0 G90 X-0.0001 Y8.8135
N41 G43 Z9.7163 H19
N42 Z7.6375
N43 G01 Z9.8376 F500.
N44 X-0.0001 Y8.8135 Z10.0632
N45
N46 M05
N47 G91 G28 Z0
N48 G90
N49 G57H901
N50 G173W0.0
N51 B0.000
N52 (Tapper 0.750000)
N53 T21
N54 M06
N55 S100
N56 M843
N57 G173 W0.0
N58 (- )
N59 ( Tapping )
N60 G0 G90 X-0.0001 Y8.8135
N61 G43 Z10.0632 H21
N62 G01 F500. X-0.0001 Y8.8135
N63 G01 Z9.7163 F500.
N64 G98 G84 X-0.0001 Y8.8135 Z6.0376 R7.6376 E10.
N65 G98 G84 X-0.0001 Y10.8135 Z6.0376 R7.6376 E10.
N66 G80 G01 F500.
N67 X-0.0001 Y8.8135 Z9.7163
N68 X-0.0001 Y8.8135 Z9.7163
N69
N70 M845
N71 G91 G28 Z0
N72 G90
N73 M30
%
所以在这个特定的代码中有两个 Tapping 操作。我正在尝试制作一个看起来介于 Tapper 0.250000
和 M845
之间的脚本,并将 E10.
的所有实例替换为一个将基于的变量Tapper 0.250000
中的数字。
例如,假设有 Tapper 0.250000
和后面的一些 X 行 M845
,E10.
出现在这两者之间需要替换为 E0.250000
。如果还有另一个攻丝操作,例如 Tapper 0.750000
,则 Tapper 和 M845 之间的 E10.
需要替换为 E0.787
.
到目前为止,这是我的 VBScript:
strFileName = Wscript.Arguments(0)
strOutputFile = Wscript.Arguments(0)
Set fso = CreateObject("Scripting.FileSystemObject")
'Variable patterns to search for. There may be 9 of these total
strPattern25 = "(Tapper 0.250000)(.|\s)*(M845)"
strPattern375 = "(Tapper 0.375000)(.|\s)*(M845)"
strPattern5 = "(Tapper 0.500000)(.|\s)*(M845)"
strPattern75 = "(Tapper 0.750000)(.|\s)*(M845)"
strFindString = "E10." 'String to find and then replace each instance of between pattern
'Variables of the replace string
strReplaceString25 = "E0.05"
strReplaceString375 = "E0.0625"
strReplaceString5 = "E0.0769"
strReplaceString75 = "E0.787"
strTestString = fso.OpenTextFile(strFileName, 1).ReadAll 'open and read the file
'Replacing script. Currently replaces all text between the strPattern. Need to create another function in order to only replace the E10.
strNewText25 = fReplaceText(strPattern25, strTestString, strReplaceString25)
strNewText375 = fReplaceText(strPattern375, strTestString, strReplaceString375)
strNewText5 = fReplaceText(strPattern5, strTestString, strReplaceString5)
strNewText75 = fReplaceText(strPattern75, strTestString, strReplaceString75)
fso.OpenTextFile(strOutputFile, 2, True).WriteLine strNewText
MsgBox "Done!"
'Function
Function fReplaceText(sPattern, sStr, sReplStr)
Dim regEx, oMatch, colMatches, temp
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = sPattern ' Set pattern
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability
Set colMatches = regEx.Execute(sStr) ' Execute search
If colMatches.Count = 0 Then
temp = ""
Else
For Each oMatch In colMatches
temp = regEx.Replace(sStr, oMatch.SubMatches(0) & vbCrlf & sReplStr & vbCrlf & oMatch.SubMatches(2))
Next
End If
fReplaceText = temp
End Function
最佳答案
我使用以下方法获得了期望的结果:
Tapper <some digits>
开头的所有子字符串并以 M845
结尾使用正则表达式E10
的实例与 E<some digits>
从这段代码中获取帮助:
Option Explicit
Dim strFilePath, objFso, objFile, strFileContents, objReg, objMatches, i, strTemp, strNew
strFilePath = "C:\Users\gurmansingh\Desktop\Test\inout.txt" 'Give the appropriate file path here or use the arguments, like you are using now
Set objFso = CreateObject("scripting.filesystemobject")
Set objFile = objFso.OpenTextFile(strFilePath,1,False)
strFileContents = objFile.ReadAll 'Reading all the contents of the File. Note that this method of reading will prove to be a bit inefficient when the file size is large
objFile.Close
Set objReg = New RegExp
objReg.Global = True
objReg.Pattern = "Tapper\s*(\d*(?:\.\d+)?)[\s\S]*?M845" 'Pattern Explained later
Set objMatches = objReg.Execute(strFileContents) 'Finds all the substrings in the file that matches the above Regex Pattern
For i=0 To objMatches.Count-1
strTemp = objMatches.Item(i).Submatches.Item(0) 'Grabbing the digits that come after the text 'Tapper '
strNew = Replace(objMatches.Item(i),"E10","E"&strTemp) 'Replacing all the E10's in each match
strFileContents = Replace(strFileContents,objMatches.Item(i),strNew)
Next
Set objFile = objFso.OpenTextFile(strFilePath,2,False)
objFile.Write strFileContents
objFile.Close
Set objFile = Nothing
Set objFso = Nothing
正则表达式解释:
Tapper\s*(\d*(?:\.\d+)?)[\s\S]*?M845
Tapper\s*
- 匹配文本 Tapper
后跟 0+ 个空格(\d*(?:\.\d+)?)
- 匹配并捕获第 1 组中的一系列数字。无论在该组中捕获什么,稍后都将用于替换 E10
[\s\S]*?
- 匹配出现次数超过 0 次的任何字符,尽可能少M845
- 火柴M845
关于vbscript - 替换两个字符串之间的某个字符串的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49319673/
我需要修复 getLineNumberFor 方法,以便如果 lastName 的第一个字符位于 A 和 M 之间,则返回 1;如果它位于 N 和 Z 之间,则返回 2。 在我看来听起来很简单,但我不
您好,感谢您的帮助!我有这个: 0 我必须在每次点击后增加“pinli
Javascript 中是否有一种方法可以在不使用 if 语句的情况下通过 switch case 结构将一个整数与另一个整数进行比较? 例如。 switch(integer) { case
我有一列是“日期”类型的。如何在自定义选项中使用“之间”选项? 最佳答案 请注意,您有2个盒子。 between(在SQL中)包含所有内容,因此将框1设置为:DATE >= startdate,将框2
我有一个表,其中包含年、月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 20
这个问题已经有答案了: Extract a substring between double quotes with regular expression in Java (2 个回答) how to
我有一个带有类别的边栏。正如你在这里看到的:http://kees.een-site-bouwen.nl/ url 中类别的 ID。带有 uri 段(3)当您单击其中一个类别时,例如网页设计。显示了一
这个问题在这里已经有了答案: My regex is matching too much. How do I make it stop? [duplicate] (5 个答案) 关闭 4 年前。 我
我很不会写正则表达式。 我正在尝试获取括号“()”之间的值。像下面这样的东西...... $a = "POLYGON((1 1,2 2,3 3,1 1))"; preg_match_all("/\((
我必须添加一个叠加层 (ImageView),以便它稍微移动到包含布局的左边界的左侧。 执行此操作的最佳方法是什么? 尝试了一些简单的方法,比如将 ImageView 放在布局中并使用负边距 andr
Rx 中是否有一些扩展方法来完成下面的场景? 我有一个开始泵送的值(绿色圆圈)和其他停止泵送的值(簧片圆圈),蓝色圆圈应该是预期值,我不希望这个命令被取消并重新创建(即“TakeUntil”和“Ski
我有一个看起来像这样的数据框(Dataframe X): id number found 1 5225 NA 2 2222 NA 3 3121 NA 我有另一个看起来
所以,我正在尝试制作正则表达式,它将解析存储在对象中的所有全局函数声明,例如,像这样 const a = () => {} 我做了这样的事情: /(?:const|let|var)\s*([A-z0-
我正在尝试从 Intellivision 重新创建 Astro-Smash,我想让桶保持在两个 Angular 之间。我只是想不出在哪里以及如何让这个东西停留在两者之间。 我已经以各种方式交换了函数,
到处检查但找不到答案。 我有这个页面,我使用 INNER JOIN 将两个表连接在一起,获取它们的值并显示它们。我有这个表格,用来获取变量(例如开始日期、结束日期和卡号),这些变量将作为从表中调用值的
我陷入了两个不同的问题/错误之间,无法想出一个合适的解决方案。任何帮助将不胜感激 上下文、FFI 和调用大量 C 函数,并将 C 类型包装在 rust 结构中。 第一个问题是ICE: this pat
我在 MySQL 中有一个用户列表,在订阅时,时间戳是使用 CURRENT_TIMESTAMP 在数据库中设置的。 现在我想从此表中选择订阅日期介于第 X 天和第 Y 天之间的表我尝试了几个查询,但不
我的输入是开始日期和结束日期。我想检查它是在 12 月 1 日到 3 月 31 日之间。(年份可以更改,并且只有在此期间内或之外的日期)。 到目前为止,我还没有找到任何关于 Joda-time 的解决
我正在努力了解线程与 CPU 使用率的关系。有很多关于线程与多处理的讨论(一个很好的概述是 this answer )所以我决定通过在运行 Windows 10、Python 3.4 的 8 CPU
我正在尝试编写 PHP 代码来循环遍历数组以创建 HTML 表格。我一直在尝试做类似的事情: fetchAll(PDO::FETCH_ASSOC); ?>
我是一名优秀的程序员,十分优秀!