求助:已知一段字符串,在文本文件中查到含有这段字符串的那一行提取出来。(已解决)
本帖最后由 WSZYJ 于 2012-9-27 21:18 编辑遇到一个问题,已知一段代码如长江电力
需要在代码表中查到含有长江电力的那一行并提取出来。
虽然我使用AU3编出了不错的自动交易程序,但是这个问题没有解决,求教大师帮助,谢了。
代码表是文本文件:SH.SNT
其中字符串是分行排列的。
600000 浦发银行
600004 白云机场
600005 武钢股份
600006 东风汽车
600007 中国国贸
600008 首创股份
600009 上海机场
600010 包钢股份
600011 华能国际
600012 皖通高速
600015 华夏银行
600016 民生银行
600017 日照港
600018 上港集团
600019 宝钢股份
600020 中原高速
600021 上海电力
600022 山东钢铁
600026 中海发展
下面是我使用AU3编的程序中的一个。
为答谢朋友的鼎力支持提供AU3编辑股票自动交易软件下载,一年免费期,喜欢用单独联系继续免费。 建议楼主论坛搜索一下正则~~
有和你的问题非常相似的~~ 编这么复杂的程序没有用到字符串函数?这个程序的数据和交易接口都来自于哪里??
字符串函数可以实现或用正则。 用正则表达式 真不好意思,草莽出身,真的不懂正则,编出程序仅凭VBVC一点浅薄的知识,居然能用见笑了。哪位给指点一下感谢了,搜过论坛有一帖相似但是看不懂,哪位给个方向? #include <Array.au3>
$file=@ScriptDir & "\test.txt"
$txt=FileRead($file)
MsgBox(0,"代码表文件内容",$txt)
$array=StringRegExp($txt,'(.+上海电力)',3)
_ArrayDisplay($array)举例是“长江电力”,可提供的代码表中竟然没有“长江电力”。害人啊 举例是“长江电力”,可提供的代码表中竟然没有“长江电力”。害人啊
shqf 发表于 2012-9-22 13:22 http://www.autoitx.com/images/common/back.gif
真是谢谢了,举例中没有长江电力我的错,只是想说一下排列顺序。希望多联系。 朋友的帮助使我弄明白了在这个问题上的正则表达方法,现在的困难是如何以字符串不是列表的方式提取出我要使用的股票代码,说明了我就是想通过股票的中文名倒查并取得股票代码。因为很多股票软件现在都隐去了股票代码而只提供可提取的中文名,使第三方编辑自动下单工具失去机会。提取列表框中的文本增加很多道工序,朋友有没有直接提取的方法,求教了。
标题
回复 8# WSZYJ晕!你直接说这个不就行啦??手机发帖,不方便发代码
你可以用字符串函数来做,把行内容拆分放到数组里,查询的时候,循环比较,相同就返回对应的代码 谢楼上指点,我试试做一下。 回复 10# WSZYJ
无聊写了下
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include'FILE.AU3'
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 253, 76, 192, 124,-1,$WS_EX_ACCEPTFILES)
$Label1 = GUICtrlCreateLabel("请输入股票名称:", 0, 24, 91, 17)
$Input1 = GUICtrlCreateInput("", 0, 0, 177, 21)
GUICtrlSetState(-1,$GUI_DROPACCEPTED)
GUICtrlSetTip(-1,'输入路径或者拖放文件!')
$Input2 = GUICtrlCreateInput("", 88, 24, 89, 21)
GUICtrlSetTip(-1,'输入后直接回车查询!')
$Button1 = GUICtrlCreateButton("OK", 184, 0, 65, 73,1)
$Label2 = GUICtrlCreateLabel("对应股票代码:", 0, 48, 79, 17)
$Label3 = GUICtrlCreateLabel("", 88, 48, 92, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
If GUICtrlRead($Input1)='' Then
MsgBox(16,'错误!','未选择文件!!',3)
elseIf GUICtrlRead($Input2)='' Then
MsgBox(16,'错误!','查询内容不能为空!',3)
Else
GUICtrlSetData($Label3,_find())
EndIf
EndSwitch
WEnd
Func _find()
For $i=1 To _FileCountLines(GUICtrlRead($Input1))
$temp=StringSplit(FileReadLine(GUICtrlRead($Input1),$i),' ',1)
If GUICtrlRead($Input2)=$temp Then
Return $temp
EndIf
Next
Return('木有找到!')
EndFunc
代码很垃圾,将就看下吧,俺的水平也只能这样了~~{:face (52):} 谢谢!!!!!!!!!!!!!! #include <File.au3>
#include <Array.au3>
Local $Array,$Stock_Code
_FileReadToArray(@ScriptDir&"\SH.SNT", $Array)
_ArrayDisplay($Array)
For $i = 1 To 19
If StringRegExp($Array[$i],"中海发展",0) Then
$Stock_Code = StringRegExp($Array[$i],'(\d{6})',3)
If Not @error Then MsgBox(0,"中海发展",$Stock_Code)
ExitLoop
EndIf
Next回复 8# WSZYJ 本帖最后由 shqf 于 2012-9-24 12:46 编辑
StringRegExp()函数会将返回的结果存入给一个数组变量,既然是变量,只要用变量名就可获得它的字符串值了:#include <Array.au3>
$file = @ScriptDir & "\SH.SNT"
$txt = FileRead($file)
$gpmc="上海电力"
$array = StringRegExp($txt, '(\d{6})\h+'&$gpmc, 3)
If @error Then
MsgBox(0, "提示", "没有匹配项目")
Else
MsgBox(0, "股票代码查询", "股票名称:"&$gpmc&@CRLF&"股票代码:"&$array)
EndIf
本帖最后由 WSZYJ 于 2012-9-24 23:48 编辑
在以上几位朋友真诚帮助下我的问题已经获得比较圆满的解决方法,再次表示感谢,尤其是shqf的源代码最接近我的需求,一并表示感谢。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 417, 93, 192, 232,-1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore")
$Input1 = GUICtrlCreateInput("", 16, 16, 249, 21)
GUICtrlSetOnEvent(-1, "Input1Change")
$Input2 = GUICtrlCreateInput("", 16, 48, 249, 60)
GUICtrlSetOnEvent(-1, "Input2Change")
$Button1 = GUICtrlCreateButton("Button1", 328, 16, 65, 17, $WS_GROUP)
GUICtrlSetOnEvent(-1, "Button1Click")
$Button2 = GUICtrlCreateButton("Button2", 328, 70, 65, 17, $WS_GROUP)
GUICtrlSetOnEvent(-1, "Button2Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Button1Click()
$file = @ScriptDir & "\SH.SNT"
$txt = FileRead($file)
$gpmc="上海电力"
$array = StringRegExp($txt, '(\d{6})\h+'&$gpmc, 3)
ControlSetText ( "Form1" , "","Edit1",$array)
EndFunc
Func Button2Click()
EndFunc
Func Form1Close()
Exit
EndFunc
Func Form1Maximize()
EndFunc
Func Form1Minimize()
EndFunc
Func Form1Restore()
EndFunc
Func Input1Change()
EndFunc
Func Input2Change()
EndFunc
页:
[1]
2