Board logo

标题: [问题求助] VBS随机读取单数行,并让读到的单数行加1,输出这2行到剪贴板 [打印本页]

作者: 我来了    时间: 2014-4-15 09:22     标题: VBS随机读取单数行,并让读到的单数行加1,输出这2行到剪贴板

本帖最后由 我来了 于 2014-4-15 22:14 编辑
I have not failed. I’ve just found 10,000 ways that won’t work. – Thomas Edison
我并没有失败。我只是找到了1万个不成功的方法。——托马斯·爱迪生

Failure defeats losers, failure inspires winners. – Robert T. Kiyosaki
失败可以打击输家,也可以启发赢家。——罗伯特·T·清崎

Some people dream of great accomplishments, while others stay awake and do them. – Anonymous
有人梦想伟大的成就,但有人一直清清楚楚地在做。——无名氏

I cannot give you the formula for success, but I can give you the formula for failure, which is: Try to please everybody. - Herbert B. Swope
我不能给你成功的计算公式,但我可以给你失败的计算公式,那就是:试着取悦每个人。——赫伯特·B·斯沃普
If you have always done it that way, it is probably wrong. - Charles Kettering
如果你一直用这种方法做事,那它很可能是错误的。——查尔斯·凯特宁
Being different is one of the most beautiful things on earth. - Anonymous
与众不同是世界上最美好的事情之一。——无名氏
Creativity is intelligence having fun. – Albert Einsten
创造力是智力的乐趣。——艾尔伯特·爱因斯坦

randomize
set fso = CreateObject("Scripting.Filesystemobject")
set a = CreateObject("Scripting.Dictionary")
set file = fso.OpenTextFile("D:\OperaZ_Y\英语谚语.txt")
do until file.AtendofStream
   m = m + 1
   a.add m,file.readline
loop
file.close
h=int(rnd * m + 1)
if h = m then h = m - 1
if h = 1 then h = 2
for i = h-1 to h
   str = str & a(i) & vbCrLf
Next
'msgbox str
CreateObject("WScript.Shell").Run "G:\PowerPro_4.9n7\配置文件夹\nircmd.exe clipboard set "&chr(34)&str&chr(34)
WScript.Sleep 1000
Set WshShell= WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "^v"
WshShell.SendKeys "^{ENTER}"


配对! 我也不知如何表达,叠加一起大家应该懂了吧
就是一次读取  2行,并且这两行表达的的一个英语谚语~~

必须:

1,随机读取到的是单数行,
2,并外加它的下一行到剪贴板)

永远是形如:AAA+BBB,或CCC+DDD,
而不是BBB+CCC,就是文搭义(所在行跟所配的英文是对搭的~~)
AAA
BBB
CCC
DDD


作者: CrLf    时间: 2014-4-15 13:35

vbs:
  1. Randomize()
  2. For i=1 To 2
  3. r = Rnd*a.count\1
  4.         msgbox ((a.Items())(r))
  5. a.Remove(r)
  6. Next
复制代码
话说 js 操作数组元素或者对象属性比起 vbs 方便得多...

我更喜欢用 gnu,不过 sort 的 -R 选项得看版本:
  1. gnu_sort -R "D:\OperaZ_Y\英语谚语.txt" | sed "1,2!d"
复制代码
powershell 也是很好的选择,尽管它的设计用途并不是处理文本:
  1. get-content "D:\OperaZ_Y\英语谚语.txt" | get-random -count 2
复制代码

作者: 我来了    时间: 2014-4-15 14:58

本帖最后由 我来了 于 2014-4-15 15:08 编辑

回复 2# CrLf


    师兄,俺比较瓜,麻烦您给我组合到我上边的VBS里边去,多谢。
唉。。。实在搞这方面大菜瓜一个~~
那样,我就能用opera中定义的ctrl+shift+v直接使用了


PowerShell的确实是省事,可我不知如何弄成脚本到opera中调用啊。那个更一窍不通啊~~
作者: 我来了    时间: 2014-4-15 15:13

我要把PowerShell编译成exe就更费劲了,还得要.net环境,
就不能在PE环境下使用了,还是VBS的生存能力好一些
当然思路好是好的
作者: CrLf    时间: 2014-4-15 15:40

噢,发现理解错了....................
作者: CrLf    时间: 2014-4-15 16:44

本帖最后由 CrLf 于 2014-4-15 17:49 编辑

那更简单了:
  1. randomize
  2. set fso = CreateObject("Scripting.Filesystemobject")
  3. set file = fso.OpenTextFile("英语谚语.txt")
  4. text = file.ReadAll
  5. a = Split(text,vbCrLf)
  6. file.Close
  7. h = (rnd*UBound(a)\2)*2
  8. str = a(h) & vbCrLf & a(h+1)
  9. 'msgbox str
  10. setClip str
  11. Set WshShell= WScript.CreateObject("WScript.Shell")
  12. WshShell.SendKeys "^v"
  13. WshShell.SendKeys "^{ENTER}"
  14. Sub setClip(str)
  15. Dim Form, TextBox
  16. Set Form = CreateObject("Forms.Form.1")
  17. Set TextBox = Form.Controls.Add("Forms.TextBox.1").Object
  18. TextBox.MultiLine = True
  19. TextBox.Text = str
  20. TextBox.SelStart = 0
  21. TextBox.SelLength = TextBox.TextLength
  22. TextBox.Copy
  23. End Sub
复制代码
setClip 修改自 demon 的博客里的内容,这样就不需要第三方支持了(如果 com 可以不算的话)
作者: CrLf    时间: 2014-4-15 16:48

话说 opera 不能用 userscript 操作 dom 吗?还要这么复制粘贴
作者: 我来了    时间: 2014-4-15 17:41

回复 6# CrLf


    为什么  我运行 就这个样子呢?

难道是因为setClip 这东东,俺没有?欺负我是外村的?
作者: CrLf    时间: 2014-4-15 17:50

回复 8# 我来了


    多写了个 r,已修改。
    setClip 是 vbs 脚本里写的过程,不是外部命令
作者: 我来了    时间: 2014-4-15 17:51

回复 7# CrLf


    你的PowerShell搞的很精干,赞一个,nice

我的WIN X64 企业版运行很好,搜索了下可以编译成.exe文件(从CSDN下载一个批量编译的,发现运行报错,网上有资料说,又好像编译不了,外行,我也看迷糊了)
那要是再加上
ctrl+v,ctrl+enter呢?


=============================
另外,我就是这么使用的

=================
大哥哥,你看能不能给整合到这里面
作者: 我来了    时间: 2014-4-15 17:55

新版本 还是欺负我啊
作者: CrLf    时间: 2014-4-15 17:57

回复 10# 我来了


    原来以为是随机提取两行,你的意思不是随机提取相邻的中英文各一行吗?
作者: CrLf    时间: 2014-4-15 18:00

回复 11# 我来了


    WIN X64 企业版没有 Forms.Form.1 ?那你还是用 nircmd 吧,或者学一下 au3/autohotkey,实现这个既精确又简单
作者: 我来了    时间: 2014-4-15 18:07

回复 12# CrLf


我最早的意思是那样的,但那样做后,发现有问题
因为给出的英文翻译 和 中文的意思错位了
比如,读到了,第(偶数行)跟它的下一行,这样内容就造成了文不对题
所以,请大神出山弄个进化版
所以,你没发现,我最上面的贴子故意弄成了多色的

能不能生成随机数的种子,只读到奇数行,完事再相邻下一行的?

AHK的,AU3,的就不考虑了,因为又要再占一个软件上阵,
按键精灵的本来是弄出来了,改改就能运行,考虑到在opera中,所以就想只要一个VBS在原有代码上实现,原来有点复杂啊~~
再次感谢~~
作者: 我来了    时间: 2014-4-15 18:11

正确的输出结果是:
1,当在 opera浏览器的论坛回贴框中 ,按下定义的热键ctrl+shift+v时
2,粘贴提交的
正确的内容是
If you have always done it that way, it is probably wrong. - Charles Kettering
如果你一直用这种方法做事,那它很可能是错误的。——查尔斯·凯特宁

====================
而不是
与众不同是世界上最美好的事情之一。——无名氏
Creativity is intelligence having fun. – Albert Einsten

也许这个操作要求有点蛋痛,全怪楼主不好
作者: 我来了    时间: 2014-4-15 18:19

这贴子的题目,实在太纠结了,太不好编了,加了那么多注释,还是没有让人正确的理解,
看来我语文也是体育老师教的,都怪我不好,贴子问题没有编辑明白。
作者: wscript    时间: 2014-4-15 19:44

Forms.Form.1 当然不是系统自带的,属于MS Office。
作者: 我来了    时间: 2014-4-15 22:08

回复 17# wscript


    这位老师,这个问题,您会解不?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2