【已解决】 txt文本读取问题,请教。。谢谢
本帖最后由 pingfan5888 于 2015-7-11 18:30 编辑想要弄个词组构词查询。txt读取请教 大大。。谢谢。。
条件:
词组,大于等于,两个字。小于20个字。
两个字,取每个字的两个编码组成。
三个,取前两个字,第一个编码,最后一个字,前两个编码。
三个以上,取前三个字,第一个编码,最后一个字,第一个编码。组成。
如:
输入:哀唉 显示 wkky
输入:哀唉埃 显示 wkty
输入:哀唉埃哀 显示 wktw
是用 数组 吗,还是用 正则表达式 来从 去一简.txt完成检测。读取编码。
如何修改,
特请教各位老大。。万分感谢。
#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 ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_ld()
EndSwitch
WEnd
GUISetState()
Func _ld()
; _GUICtrlListView_DeleteAllItems($ListView1)
Local $str, $i, $dt, $aArray1, $aArray2
Global $bm
Global $dt
$ct = GUICtrlRead($Input1)
_FileReadToArray(@ScriptDir & "\去一简.txt", $aArray1)
For $i = 1 To UBound($aArray1) - 1
$str = StringSplit($aArray1[$i], " ")
$wz = $str
$bm = $str
$dt = $wz & '|' & $bm
If $ct = $wz Then
;MsgBox(0, '记录:' & $wz, $dt)
GUICtrlSetData($Input2, $bm)
Else
EndIf
; GUICtrlCreateListViewItem($dt, $ListView1)
Next
EndFunc ;==>_ld
去一简.txt
哎 kh
哀 wk
唉 ky
埃 ty
挨 jy
欸 yr
溾 vx
锿 qw
啀 kg
捱 jg
皑 xc
凒 dc
嵦 cc
溰 vc
嘊 kc格式:汉字 + tab键 + 编码 完全没有看明白你在说什么。 本帖最后由 pingfan5888 于 2015-6-21 21:53 编辑
完全没有看明白你在说什么。
luren666 发表于 2015-6-21 18:47 http://www.autoitx.com/images/common/back.gif
抱歉,编辑时没有注意到
如:
输入:哀唉 显示 wkky
输入:哀唉埃 显示 wkty
输入:哀唉埃哀 显示 wktw
是用 数组 吗,还是用 正则表达式 来从 “去一简.txt ” 完成检测。读取编码。
如何修改,请教了,谢谢。。 这个工程量很大,应该会用到正则一类的! #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 + 1] ;;;定义一个全局二维数组用以存放编码文件
$aArray2 = $aArray1 ;;总行数
For $i = 1 To $aArray1
$str = StringSplit($aArray1[$i], " ")
If $str = 2 Then
$aArray2[$i] = $str ;;;第一维存字
$aArray2[$i] = $str ;;;第二维存编码
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
If $one = $aArray2[$i] Then $oneCode = $aArray2[$i];;第一个字的编码
If $two = $aArray2[$i] Then $twoCode = $aArray2[$i];;第二个字的编码
;~ 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
If $one = $aArray2[$i] Then $oneCode = StringLeft($aArray2[$i],1) ;;第一个字的编码
If $two = $aArray2[$i] Then $twoCode = StringLeft($aArray2[$i],1) ;;第二个字的编码
If $three = $aArray2[$i] Then $threeCode = $aArray2[$i] ;;第三个字的编码
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几千行的文本文件处理起来还是没问题的。 抱歉,刚才没有注意看您的要求,三个字以上的都按照三个字来处理了,您自己改一下吧,也算给您自己留个作业练习一下。 有点高深的问题。。 不错的,例子,很好 几千行的文本文件处理起来还是没问题的。
luren666 发表于 2015-7-9 23:11 http://www.autoitx.com/images/common/back.gif
非常感谢啊,自己尝试写了,不成功,能力不够。
网站打开有点慢,没注意,现在才看到。。万分感谢。弄这个的目的,是因为自己平时经常要添加,修改五笔词组,不方便,就想弄一个。。 抱歉,刚才没有注意看您的要求,三个字以上的都按照三个字来处理了,您自己改一下吧,也算给您自己留个作业 ...
luren666 发表于 2015-7-9 23:14 http://www.autoitx.com/images/common/back.gif
好的,谢谢了啊。
页:
[1]