找回密码
 加入
搜索
查看: 11318|回复: 18

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

 火.. [复制链接]
发表于 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编辑股票自动交易软件下载,一年免费期,喜欢用单独联系继续免费。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-9-22 01:02:28 | 显示全部楼层
建议楼主论坛搜索一下正则~~

有和你的问题非常相似的~~
发表于 2012-9-22 08:32:17 | 显示全部楼层
编这么复杂的程序没有用到字符串函数?这个程序的数据和交易接口都来自于哪里??
字符串函数可以实现或用正则。

评分

参与人数 1金钱 +10 收起 理由
魔导 + 10

查看全部评分

发表于 2012-9-22 09:46:54 | 显示全部楼层
用正则表达式
 楼主| 发表于 2012-9-22 11:10:07 | 显示全部楼层
真不好意思,草莽出身,真的不懂正则,编出程序仅凭VBVC一点浅薄的知识,居然能用见笑了。哪位给指点一下感谢了,搜过论坛有一帖相似但是看不懂,哪位给个方向?
发表于 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)
举例是“长江电力”,可提供的代码表中竟然没有“长江电力”。害人啊

评分

参与人数 1金钱 +20 收起 理由
WSZYJ + 20 qq:282772440

查看全部评分

 楼主| 发表于 2012-9-22 14:30:29 | 显示全部楼层
举例是“长江电力”,可提供的代码表中竟然没有“长江电力”。害人啊
shqf 发表于 2012-9-22 13:22


真是谢谢了,举例中没有长江电力我的错,只是想说一下排列顺序。希望多联系。
 楼主| 发表于 2012-9-22 22:39:10 | 显示全部楼层
朋友的帮助使我弄明白了在这个问题上的正则表达方法,现在的困难是如何以字符串不是列表的方式提取出我要使用的股票代码,说明了我就是想通过股票的中文名倒查并取得股票代码。因为很多股票软件现在都隐去了股票代码而只提供可提取的中文名,使第三方编辑自动下单工具失去机会。提取列表框中的文本增加很多道工序,朋友有没有直接提取的方法,求教了。
发表于 2012-9-23 01:21:32 | 显示全部楼层

标题

回复 8# WSZYJ


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




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

评分

参与人数 1金钱 +20 收起 理由
WSZYJ + 20 谢谢指导!我的Q号282772440

查看全部评分

 楼主| 发表于 2012-9-23 06:24:15 | 显示全部楼层
谢楼上指点,我试试做一下。
发表于 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[2] Then 
                Return $temp[1]
        EndIf
        Next
        
                Return('木有找到!')
EndFunc


代码很垃圾,将就看下吧,俺的水平也只能这样了~~

评分

参与人数 1金钱 +20 收起 理由
WSZYJ + 20 谢谢

查看全部评分

 楼主| 发表于 2012-9-23 17:31:06 | 显示全部楼层
谢谢!!!!!!!!!!!!!!
发表于 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[0])
                ExitLoop
        EndIf
Next
回复 8# WSZYJ

评分

参与人数 1金钱 +18 收起 理由
WSZYJ + 18 谢谢

查看全部评分

发表于 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[0])
EndIf

评分

参与人数 1金钱 +20 收起 理由
WSZYJ + 20 谢谢

查看全部评分

 楼主| 发表于 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[0])

EndFunc
Func Button2Click()

EndFunc
Func Form1Close()
Exit
EndFunc
Func Form1Maximize()

EndFunc
Func Form1Minimize()

EndFunc
Func Form1Restore()

EndFunc
Func Input1Change()

EndFunc
Func Input2Change()

EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-3 02:01 , Processed in 0.086737 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表