如何将文本行转换为变量?
How to convert text lines to variables?
查看 this list。我需要每一个都变成一个变量并设置为0。示例:
;1-Methyoxy-2-Propanol would be:
$OneMethoxyTwoPropanol = 0
;and 1,2-BUTADIENE would be:
$OneTwoButadiene = 0
将它们分配给一个变量不会有问题,但它们有 1500 个。
如果我必须做这项工作,我会这样做:
- 我会改变每个单词的大小写:
Regex to change to sentence case
制作 "SearchAndReplace" :
1 -> One
2 -> Two
...
{underscore} -> ''
{space} -> ''
...
然后在像 SublimeText 这样的软件中,我将在每行前面添加一个 $
,在末尾添加一个 = 0
。在 Ctrl+Shift+L
的帮助下
也许您可以使用正则表达式来帮助您解决 "SearchAndReplace" 问题。
是这样的吗?
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。
您可以根据需要使用正则表达式重命名每个文件。
创建的数组是一个二维数组。需要存储变量的名称和值。
我正在使用 Notepad++,所以我不确定这是否适用于任何其他 IDEs/Notepads。我将在下面的示例中使用 1-Methoxy-2-Propanol
。
我学会了不要以数字开头变量,所以我需要用单词替换它们。 1-Methoxy-2-Propanol
包含一个 1
和一个 2
,我们需要将它们更改为 One
和 Two
。
起始产品:
1-Methoxy-2-Propanol
按 Ctrl + F 并移动到替换选项卡。在 "Find what:" 框中,键入 1
。在 "Replace with:" 框中,键入 One
,然后按 "replace all"(不仅仅是 "replace")。对数字零 (0) 到九 (9) 执行此操作。现在,您的产品将如下所示:
One-Methoxy-Two-Propanol
接下来我们需要去掉破折号。在“替换”选项卡中,在 "Find what:" 框内,键入 -
并在 "Replace With:" 框中,完全返回 space 以便那里没有任何内容,然后按 "Replace All".现在,您的产品将如下所示:
OneMethoxyTwoPropanol
还有其他包含逗号和括号的产品,所以只需像上面一样找到并替换它们。
我们需要在每个单词的开头添加$
。再次按 Ctrl + F 并转到“替换”选项卡。在 "Find what:" 框中,键入 ^
,它表示新行的开始。在 "Replace with:" 框中,键入 $
并按 "Replace All"。这将使您的产品看起来像:
$OneMethoxyTwoPropanol
我们需要将所有这些变量设置为零!返回到替换选项卡。在 "Find what:" 框中键入 \r
。在 "Replace with:" 框中,键入 = 0
。注意等号前的 space。按 "Replace All"。您的产品将如下所示:
$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
I simply need to turn them into a variable and set them equal to 0.
根据Documentation - Intro - Arrays:
An Array is a variable containing a series of data elements. Each element in this variable can be accessed by an index number which relates to the position of the element within the Array - in AutoIt the first element of an Array is always element [0]. Arrays elements are stored in a defined order and can be sorted.
删除包含列表名称(; 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
Returns:
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()
添加额外的列。
... as there are 1500 of them.
考虑使用 . Related。
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"))
查看 this list。我需要每一个都变成一个变量并设置为0。示例:
;1-Methyoxy-2-Propanol would be:
$OneMethoxyTwoPropanol = 0
;and 1,2-BUTADIENE would be:
$OneTwoButadiene = 0
将它们分配给一个变量不会有问题,但它们有 1500 个。
如果我必须做这项工作,我会这样做:
- 我会改变每个单词的大小写:
Regex to change to sentence case
制作 "SearchAndReplace" :
1 -> One
2 -> Two
...
{underscore} -> ''
{space} -> ''
...
然后在像 SublimeText 这样的软件中,我将在每行前面添加一个
$
,在末尾添加一个= 0
。在Ctrl+Shift+L
的帮助下
也许您可以使用正则表达式来帮助您解决 "SearchAndReplace" 问题。
是这样的吗?
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。
您可以根据需要使用正则表达式重命名每个文件。 创建的数组是一个二维数组。需要存储变量的名称和值。
我正在使用 Notepad++,所以我不确定这是否适用于任何其他 IDEs/Notepads。我将在下面的示例中使用 1-Methoxy-2-Propanol
。
我学会了不要以数字开头变量,所以我需要用单词替换它们。
1-Methoxy-2-Propanol
包含一个1
和一个2
,我们需要将它们更改为One
和Two
。 起始产品:1-Methoxy-2-Propanol
按 Ctrl + F 并移动到替换选项卡。在 "Find what:" 框中,键入
1
。在 "Replace with:" 框中,键入One
,然后按 "replace all"(不仅仅是 "replace")。对数字零 (0) 到九 (9) 执行此操作。现在,您的产品将如下所示:One-Methoxy-Two-Propanol
接下来我们需要去掉破折号。在“替换”选项卡中,在 "Find what:" 框内,键入
-
并在 "Replace With:" 框中,完全返回 space 以便那里没有任何内容,然后按 "Replace All".现在,您的产品将如下所示:OneMethoxyTwoPropanol
还有其他包含逗号和括号的产品,所以只需像上面一样找到并替换它们。
我们需要在每个单词的开头添加
$
。再次按 Ctrl + F 并转到“替换”选项卡。在 "Find what:" 框中,键入^
,它表示新行的开始。在 "Replace with:" 框中,键入$
并按 "Replace All"。这将使您的产品看起来像:$OneMethoxyTwoPropanol
我们需要将所有这些变量设置为零!返回到替换选项卡。在 "Find what:" 框中键入
\r
。在 "Replace with:" 框中,键入= 0
。注意等号前的 space。按 "Replace All"。您的产品将如下所示:$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
I simply need to turn them into a variable and set them equal to 0.
根据Documentation - Intro - Arrays:
An Array is a variable containing a series of data elements. Each element in this variable can be accessed by an index number which relates to the position of the element within the Array - in AutoIt the first element of an Array is always element [0]. Arrays elements are stored in a defined order and can be sorted.
删除包含列表名称(; 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
Returns:
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()
添加额外的列。
... as there are 1500 of them.
考虑使用
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"))