【问题标题】:Extracting values from text file using autohotkey使用自动热键从文本文件中提取值
【发布时间】:2014-12-02 21:03:18
【问题描述】:

我有一个小文本文件,我想使用自动热键提取一些值。

文本文件内容示例:

  Date: 2014-12-02 12:06:47
 Study: G585.010.411
 Image: 6.24
 Tlbar: 2.60
 Notes: 0.74

我当前的代码:

FileReadLine, datetime, C:\File.txt, 1
datedsp := SubStr(datetime, 7)
Sleep 500
FileReadLine, study, C:\File.txt, 2
studydsp := SubStr(study, 7)
Sleep 500
FileReadLine, image, C:\File.txt, 3
imgdsp := SubStr(image, 7)
Sleep 500
FileReadLine, notes, C:\File.txt, 5
notesdsp := SubStr(notes, 7)
Sleep 500

MsgBox %datedsp%
MsgBox %studydsp%
MsgBox %imgdsp%
MsgBox %notesdsp%

我要做的就是获取每一行的值并将其分配给变量。例如,studydsp 值为 G58500411,imagedsp 值为 6.24,datedsp 值为 2014-12-02 12:06:47 .

有没有更好的方法来实现这一点?

此代码可能存在的问题:

  1. 我无法从日期行获取字符串,可能是因为在 开头(?)
  2. 我无法获得任一日期的 SubStr 值(请参阅第 1 期)或 学习(可能是因为特殊字符?)

【问题讨论】:

    标签: file extract autohotkey readline substr


    【解决方案1】:

    您可以使用FileReadRegExMatch

    var:="
    (
     Date: 2014-12-02 12:06:47
    Study: G585.010.411
    Image: 6.24
    Tlbar: 2.60
    Notes: 0.74
    )"
    
    ;~ FileRead, var, C:\file.txt
    pos:=1
    while pos := RegExMatch(var, "\s?(.*?):(.*?)(\v|\z)", m, pos+StrLen(m))
        %m1% := m2
    
    msgbox % "Date holds " date
        . "`nStudy holds " Study
        . "`nImage holds " Image
        . "`nTlbar holds " Tlbar
        . "`nNotes holds " Notes
    

    只需删除 var 部分并取消注释 fileread 行,至少这是一种方法:)

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      与@blackholyman 的回答基本相同,但通过构建价值图使用基于对象的方法:

      fileCont = 
      (
      Date: 2014-12-02 12:06:47
      Study: G585.010.411
      Image: 6.24
      Tlbar: 2.60
      Notes: 0.74
      )
      
      valueMap := {}
      
      ; Alternatively, use: Loop, Read, C:\file.txt
      Loop, Parse, fileCont, `r`n
      {
          RegExMatch(A_LoopField, "(.*?):(.*)", parts)
          ; Optionally make keys always lower case:
          ; StringLower, parts1, parts1
          valueMap[Trim(parts1)] := Trim(parts2)
      
      }
      
      msgbox %   "Date = "    valueMap["Date"]
               . "`nImage = " valueMap["Image"]
      
      ; We can also iterate over the map
      out := ""
      for key, val in valueMap
      {
          out .= key "`t= " val "`n"
      }
      msgbox % out
      

      【讨论】:

        猜你喜欢
        • 2010-10-19
        • 2013-04-24
        • 2019-02-06
        • 1970-01-01
        • 2019-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多