如果我无法用简单的术语解释这一点,我表示歉意。
我拥有的是: 用于从中获取数据的syslistview。需要修改Column1数据。
我们所知道的是: 我们正在寻找的3个字符将始终是column1中最右边的文本,如果它们存在的话。(这3个字符是" FUT")
我们需要的是: 如果" FUT"在column1 row1中找到,然后从右边TRIM 8个字符。 (包括修剪" FUT"以及)。然后向下移动并重复直到该列的最后一个值。
以下是我到目前为止开发的代码。需要帮助删除" xxxxxFUT"如果" FUT"发现:
SELECT *
INTO #NEWTABLE
FROM YOURVIEW
答案 0 :(得分:1)
编辑:
更好的答案是
dato := RegExReplace(dato, ".{5}FUT", "").
无需检查它是否在字符串中,因为如果它不是,它将不会做任何事情。 - 提供者 - > Elliot DeNolf
在其他地方得到答案,所以也可以在这里发布。
创建字符串模式,然后使用regexreplace删除所有此类字符串。
以下是实现该目标的代码:
regex_patten = \d{2}[a-zA-Z]{3}FUT
if RegExMatch(string, regex_patten)
newstring := RegExReplace(string, regex_patten, "")
msgbox % "old string:`n`n" string "`n`nnew string`n`n" newstring
答案 1 :(得分:0)
在这种情况下,我会使用正则表达式match“FUT”而不是SubStr()来删除8个字符。
下面是一个例子:
var = any amount of data can be here and xxxxxFUT as you can see FUT is removed!
; ~= is shorthand for RegExMatach
MsgBox % SubStr(var, 1, (var ~= "FUT") - 6) SubStr(var, (var ~= "FUT") + 3)
编辑:上面编辑了代码以更好地反映您的问题,因为您对其进行了扩展。
现在将其应用于您的代码:
#Persistent
#Include %A_ScriptDir%
#SingleInstance force
#NoEnv
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 1
SetKeyDelay, 150, 150, Play
SetControlDelay,0
iffut:="FUT"
SetTimer,datos,10
return
datos:
IfWinExist,DataTable ahk_class #32770
{
WinGetTitle,winname,DataTable
StringTrimLeft,winname,winname,11
IfInString,winname,%iffut%
{
StringTrimRight,winname,winname,8
}
ControlGet,dato,List,,SysListView321,DataTable
StringReplace, dato, dato, %A_Tab%, `,, All
StringReplace, dato, dato, %A_Space%, `,, All
Loop, parse, dato, `n, `r
{
IfInString, A_LoopField, %iffut%
Results .= SubStr(A_LoopField, 1, (A_LoopField ~= "FUT") - 6) SubStr(A_LoopField, (A_LoopField ~= "FUT") + 3) "`n"
Else
Results .= A_LoopField "`n"
}
FormatTime, mydttm, , ddMMyy_HHmmss
FileAppend,%Results%,%winname%_%mydttm%.txt
return
}
答案 2 :(得分:0)
RegExReplace
是最快捷,最简单的方式:
str := "before15NOVFUTsomeotherstring"
newStr := RegExReplace(str, ".{5}FUT", "")
msgbox % newStr
模式匹配" FUT"以及随后的任意5个字符,并用空字符串替换它们。如果没有找到,它什么都不做。