#include<array.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 449, 192, 114)
$Input1 = GUICtrlCreateInput("啊嗄哀", 72, 24, 121, 21)
$Input2 = GUICtrlCreateInput("", 72, 56, 121, 21)
$Button1 = GUICtrlCreateButton("查询", 72, 96, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_ld() ;;;载入码表
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$code = query(GUICtrlRead($Input1))
If $code Then
GUICtrlSetData($Input2,$code)
Else
GUICtrlSetData($Input2,"未找到")
EndIf
EndSwitch
WEnd
GUISetState()
Func _ld()
Local $aArray1
If Not _FileReadToArray(@ScriptDir & "\去一简.txt", $aArray1) Then
MsgBox(4096, "错误", "读取文件失败 error:" & @error)
Exit
EndIf
Global $aArray2[$aArray1[0] + 1][2] ;;;定义一个全局二维数组用以存放编码文件
$aArray2[0][0] = $aArray1[0] ;;总行数
For $i = 1 To $aArray1[0]
$str = StringSplit($aArray1[$i], " ")
If $str[0] = 2 Then
$aArray2[$i][0] = $str[1] ;;;第一维存字
$aArray2[$i][1] = $str[2] ;;;第二维存编码
EndIf
Next
EndFunc
Func query($word)
If StringLen($word) < 2 Or StringLen($word) > 20 Then ;;不足两字
Return "单词太短或太长"
ElseIf StringLen($word) = 2 Then ;;2字
$one = StringLeft($word,1) ;;第一个字
$two = StringRight($word,1) ;;第二个字
Local $oneCode = "" ,$twoCode = ""
For $i = 1 To $aArray2[0][0]
If $one = $aArray2[$i][0] Then $oneCode = $aArray2[$i][1] ;;第一个字的编码
If $two = $aArray2[$i][0] Then $twoCode = $aArray2[$i][1] ;;第二个字的编码
;~ If $oneCode And $twoCode Then ExitLoop ;;;如果找到了就退出循环,避免一直循环到尾部
Next
If $oneCode <> "" And $twoCode <> "" Then ;;如果查到了就返回编码,未查到返回0
Return $oneCode & $twoCode
Else
Return 0
EndIf
Else ;;;3字和3字以上
$one = StringLeft($word,1) ;;第一个字
$two = StringMid($word,2,1) ;;;第二个字
$three = StringRight($word,1) ;;;最后一个字
Local $oneCode = "" ,$twoCode = "",$threeCode = ""
For $i = 1 To $aArray2[0][0]
If $one = $aArray2[$i][0] Then $oneCode = StringLeft($aArray2[$i][1],1) ;;第一个字的编码
If $two = $aArray2[$i][0] Then $twoCode = StringLeft($aArray2[$i][1],1) ;;第二个字的编码
If $three = $aArray2[$i][0] Then $threeCode = $aArray2[$i][1] ;;第三个字的编码
If $oneCode And $twoCode And $threeCode Then ExitLoop ;;;如果找到了就退出循环,避免一直循环到尾部
Next
If $oneCode <> "" And $twoCode <> "" And $threeCode <> "" Then ;;如果查到了就返回编码,未查到返回0
Return $oneCode & $twoCode & $threeCode
Else
Return 0
EndIf
EndIf
EndFunc
几千行的文本文件处理起来还是没问题的。 |