WSZYJ 发表于 2012-9-21 23:36:40

求助:已知一段字符串,在文本文件中查到含有这段字符串的那一行提取出来。(已解决)

本帖最后由 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编辑股票自动交易软件下载,一年免费期,喜欢用单独联系继续免费。

annybaby 发表于 2012-9-22 01:02:28

建议楼主论坛搜索一下正则~~

有和你的问题非常相似的~~

auto 发表于 2012-9-22 08:32:17

编这么复杂的程序没有用到字符串函数?这个程序的数据和交易接口都来自于哪里??
字符串函数可以实现或用正则。

whitehead 发表于 2012-9-22 09:46:54

用正则表达式

WSZYJ 发表于 2012-9-22 11:10:07

真不好意思,草莽出身,真的不懂正则,编出程序仅凭VBVC一点浅薄的知识,居然能用见笑了。哪位给指点一下感谢了,搜过论坛有一帖相似但是看不懂,哪位给个方向?

shqf 发表于 2012-9-22 13:22:07

#include <Array.au3>
$file=@ScriptDir & "\test.txt"
$txt=FileRead($file)
MsgBox(0,"代码表文件内容",$txt)
$array=StringRegExp($txt,'(.+上海电力)',3)
_ArrayDisplay($array)举例是“长江电力”,可提供的代码表中竟然没有“长江电力”。害人啊

WSZYJ 发表于 2012-9-22 14:30:29

举例是“长江电力”,可提供的代码表中竟然没有“长江电力”。害人啊
shqf 发表于 2012-9-22 13:22 http://www.autoitx.com/images/common/back.gif

真是谢谢了,举例中没有长江电力我的错,只是想说一下排列顺序。希望多联系。

WSZYJ 发表于 2012-9-22 22:39:10

朋友的帮助使我弄明白了在这个问题上的正则表达方法,现在的困难是如何以字符串不是列表的方式提取出我要使用的股票代码,说明了我就是想通过股票的中文名倒查并取得股票代码。因为很多股票软件现在都隐去了股票代码而只提供可提取的中文名,使第三方编辑自动下单工具失去机会。提取列表框中的文本增加很多道工序,朋友有没有直接提取的方法,求教了。

annybaby 发表于 2012-9-23 01:21:32

标题

回复 8# WSZYJ


    晕!你直接说这个不就行啦??手机发帖,不方便发代码




你可以用字符串函数来做,把行内容拆分放到数组里,查询的时候,循环比较,相同就返回对应的代码

WSZYJ 发表于 2012-9-23 06:24:15

谢楼上指点,我试试做一下。

annybaby 发表于 2012-9-23 14:52:58

回复 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):}

WSZYJ 发表于 2012-9-23 17:31:06

谢谢!!!!!!!!!!!!!!

xms77 发表于 2012-9-23 22:34:50

#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 09:30:35

本帖最后由 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 21:03:05

本帖最后由 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
查看完整版本: 求助:已知一段字符串,在文本文件中查到含有这段字符串的那一行提取出来。(已解决)