AutoHotkey:搜索3个特定字符,然后从右侧为该列中的每个有效实例修剪8个字符

时间:2015-10-20 20:46:11

标签: string replace autohotkey trim

如果我无法用简单的术语解释这一点,我表示歉意。

我拥有的是: 用于从中获取数据的syslistview。需要修改Column1数据。

我们所知道的是: 我们正在寻找的3个字符将始终是column1中最右边的文本,如果它们存在的话。(这3个字符是" FUT")

我们需要的是: 如果" FUT"在column1 row1中找到,然后从右边TRIM 8个字符。 (包括修剪" FUT"以及)。然后向下移动并重复直到该列的最后一个值。

以下是我到目前为止开发的代码。需要帮助删除" xxxxxFUT"如果" FUT"发现:

SELECT * 
INTO #NEWTABLE
FROM YOURVIEW

3 个答案:

答案 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个字符,并用空字符串替换它们。如果没有找到,它什么都不做。