【问题标题】:How to convert text lines to variables?如何将文本行转换为变量?
【发布时间】:2016-03-16 23:42:38
【问题描述】:

查看this list。我需要将每一个都变成一个变量并设置为0。示例:

;1-Methyoxy-2-Propanol would be:
$OneMethoxyTwoPropanol = 0

;and 1,2-BUTADIENE would be:
$OneTwoButadiene = 0

将它们分配给变量不会有问题,但有 1500 个。

【问题讨论】:

    标签: variables variable-assignment autoit bulk


    【解决方案1】:

    如果我必须做这项工作,我会这样做:

    • 我将更改每个单词的大小写:

    Regex to change to sentence case

    • 做一个“SearchAndReplace”:

      1 -> 一个

      2 -> 两个

      ...

      {下划线} -> ''

      {空格} -> ''

      ...

    • 然后在像 SublimeText 这样的软件中,我将在每行前面添加一个 $,在末尾添加一个 = 0。在Ctrl+Shift+L

    • 的帮助下

    也许您可以使用正则表达式来帮助您解决“SearchAndReplace”问题。

    【讨论】:

      【解决方案2】:

      这样的?

      Local $sFilePath = @DesktopDir & "\test.ini"
      Local $aArray = IniReadSection($sFilePath, "Variables")
      Local $aVariablesArray[UBound($aArray)][2]
      
      For $i = 1 To $aArray[0][0]
          $aVariablesArray[$i][0] = $aArray[$i][0]
          $aVariablesArray[$i][1] = $aArray[$i][1]
      Next
      
      For $i = 1 To UBound($aVariablesArray) -1
          MsgBox(0, "", "Variable: " & $aVariablesArray[$i][0] & @CRLF & "Value: " & $aVariablesArray[$i][1])
      Next
      

      您的 ini 文件应如下所示

      [Variables]
      firstvariable=0
      secondvariable=0
      etc...=0
      

      要创建 ini 文件,只需打开记事本,记下文件,然后将其保存为 .ini。

      您可以根据需要使用 RegEx 重命名每个文件。 创建的数组是一个二维数组。需要存储变量的名称和值。

      【讨论】:

      • 替代但几乎等效的方法包括使用地图(一些最新测试版的功能)或 Scripting.Dictionary 对象,而不是二维数组。
      【解决方案3】:

      stringreplace 和 assign 将完成这项工作。如果单词替换的数量变得太大,您可以考虑存储这些而不是嵌套替换函数。

      $sStr = "1-Methyoxy-2-Propanol" & @LF & "1,2-BUTADIENE"
      
      $sStr = stringreplace(stringreplace(stringreplace(stringreplace($sStr , "," , "-") , "1-" , "One") , "2-" , "Two") , "-" , "")
      
      $aStr = stringsplit($sStr , @LF , 2)
      
          For $i = 0 to ubound($aStr) - 1
              Assign($aStr[$i] , 0)
          Next
      
      msgbox(0, '' , Eval("OneMethyoxyTwoPropanol") & @LF & Eval("OneTwoBUTADIENE"))
      

      【讨论】:

        【解决方案4】:

        我只需要将它们变成一个变量并将它们设置为 0。

        根据Documentation - Intro - Arrays

        数组是包含一系列数据元素的变量。此变量中的每个元素都可以通过与数组中元素的位置相关的索引号访问 - 在 AutoIt 中,数组的第一个元素始终是元素 [0]。数组元素按定义的顺序存储并且可以排序。

        删除包含列表名称(; List I 等)的行和空(或少于三个字符)行(根据 $g_sRegexFilter)。将剩余的行存储到二维数组元素。示例:

        #include <StringConstants.au3>
        #include <FileConstants.au3>
        #include <Array.au3>
        
        Global Enum  $ITEM_NAME, _
                     $ITEM_VALUE
        
        Global Const $g_sFilePath    = 'C:\list.txt'
        Global Const $g_sFileNewline = @CRLF
        Global Const $g_sRegexFilter = '(?m)^(.{0,2}\v)|(;.*\v)$'
        Global Const $g_sItemHeader  = 'name|value'
        
        Global       $g_sFileText    = ''
        Global       $g_aFileItems
        
        $g_sFileText  = _TextFromFile($g_sFilePath)
        $g_sFileText  = StringRegExpReplace($g_sFileText, $g_sRegexFilter, '')
        $g_aFileItems = StringSplit($g_sFileText, $g_sFileNewline, $STR_ENTIRESPLIT + $STR_NOCOUNT)
        _ArrayColInsert($g_aFileItems, $ITEM_VALUE)
        
        For $i1 = 0 To UBound($g_aFileItems) - 1
            $g_aFileItems[$i1][$ITEM_VALUE] = 0
        Next
        
        _ArrayDisplay($g_aFileItems, '$g_aFileItems', '', 0, Default, $g_sItemHeader)
        
        Func _TextFromFile(Const $sFile)
            Local       $hFile = FileOpen($sFile, $FO_READ + $FO_UTF8_NOBOM)
            Local Const $sData = FileRead($hFile)
        
            FileClose($hFile)
            Return $sData
        EndFunc
        

        返回:

        1-Methoxy-2-Propanol      | 0
        1,2-BUTADIENE             | 0
        2-Diethyl aminoethanol    | 0
        2-ETHYL HEXANOL           | 0
        2-ETHYL HEXYL ACRYLATE    | 0
        2-Ethyl hexyl lights      | 0
        2-Ethyl phenol            | 0
        2-Ethylsuccionitrile      | 0
        2-Methyl piperidine       | 0
        2-Methyl-2-Butene nitrile | 0
        2-Methyl-2-Pentenal       | 0
        2-Methyl-3-Butene nitrile | 0
        2-Methylglutaronitrile    | 0
        ...
        

        作为:

        $g_aFileItems[ x ][$ITEM_NAME]
        $g_aFileItems[ x ][$ITEM_VALUE]
        

        使用_ArrayColInsert() 添加其他列。

        ...因为有 1500 个。

        考虑使用SQLiteRelated.

        【讨论】:

          【解决方案5】:

          我正在使用 Notepad++,所以我不确定这是否适用于任何其他 IDE/记事本。我将在下面的示例中使用1-Methoxy-2-Propanol

          1. 我学会了不要以数字开头变量,所以我需要用单词替换它们。 1-Methoxy-2-Propanol 包含 12,我们需要将它们更改为 OneTwo。 起始产品:

            1-Methoxy-2-Propanol
            
          2. Ctrl + F 并移动到替换选项卡。在“查找内容:”框中,输入 1。在“替换为:”框中,输入One,然后按“全部替换”(不仅仅是“替换”)。对数字零 (0) 到九 (9) 执行此操作。现在,您的产品将如下所示:

            One-Methoxy-Two-Propanol
            
          3. 接下来我们需要去掉破折号。在“替换”选项卡的“查找内容:”框中,键入-,然后在“替换为:”框中完全退格,这样那里就没有任何内容,然后按“全部替换”。现在,您的产品将如下所示:

            OneMethoxyTwoPropanol
            
          4. 还有其他产品包括逗号和括号,所以只需像上面一样查找并替换它们。

          5. 我们需要在每个单词的开头添加$。再次按 Ctrl + F 并转到“替换”选项卡。在“查找内容:”框中,键入 ^,它表示新行的开始。在“替换为:”框中,键入$,然后按“全部替换”。这将使您的产品看起来像:

            $OneMethoxyTwoPropanol
            
          6. 我们需要将所有这些变量设置为零!返回替换选项卡。在“查找内容:”框中键入 \r。在“替换为:”框中,键入 = 0。注意等号前的空格。按“全部替换”。您的产品将如下所示:

            $OneMethoxyTwoPropanol = 0
            

          你的文件应该是这样开始的:

          1-Methoxy-2-Propanol
          1,2-BUTADIENE
          2-Diethyl aminoethanol
          2-ETHYL HEXANOL
          2-ETHYL HEXYL ACRYLATE
          2-Ethyl hexyl lights
          2-Ethyl phenol
          2-Ethylsuccionitrile
          2-Methyl piperidine
          2-Methyl-2-Butene nitrile
          2-Methyl-2-Pentenal
          2-Methyl-3-Butene nitrile
          2-Methylglutaronitrile
          2-Pentene nitrile
          2,4,7,9-Tetramethyl-5-decyne-4
          

          结果是这样的:

          $OneMethoxyTwoPropanol = 0
          $OneTwoBUTADIENE = 0
          $TwoDiethylaminoethanol = 0
          $TwoETHYLHEXANOL = 0
          $TwoETHYLHEXYLACRYLATE = 0
          $TwoEthylhexyllights = 0
          $TwoEthylphenol = 0
          $TwoEthylsuccionitrile = 0
          $TwoMethylpiperidine = 0
          $TwoMethylTwoButenenitrile = 0
          $TwoMethylTwoPentenal = 0
          $TwoMethylThreeButenenitrile = 0
          $TwoMethylglutaronitrile = 0
          $TwoPentenenitrile = 0
          $TwoFourSevenNineTetramethylFivedecyneFour = 0
          

          【讨论】:

            猜你喜欢
            • 2019-11-26
            • 1970-01-01
            • 1970-01-01
            • 2013-06-07
            • 1970-01-01
            • 1970-01-01
            • 2015-01-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多