Board logo

标题: [问题求助] 【已解决】VBS:若读入数据产生首尾颠倒的改变,VBS代码如何进行相应修改 [打印本页]

作者: 思想之翼    时间: 2023-3-1 12:27     标题: 【已解决】VBS:若读入数据产生首尾颠倒的改变,VBS代码如何进行相应修改

本帖最后由 思想之翼 于 2023-3-2 21:43 编辑

原题:http://www.bathome.net/viewthread.php?tid=23404&highlight=
问题:
下列VBS代码读入a.txt的数据,由于记录方式变更,产生首尾颠倒的变化,欲得到相同的运算结果,VBS代码该如何相应修改?恳望得到指点。
示例:
【a.txt 原始记录的数据】
9
0
X
Y
Z
9
0
【a.txt 首尾颠倒后的数据】
0
9
Z
Y
X
0
9
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. set file = fso.OpenTextFile("a.txt")
  3. Do Until file.AtEndOfStream
  4.    strLine = file.ReadLine
  5.    If strLine <> "" Then
  6.       ReDim PreServe ar(n)
  7.       strIn = strIn & "$" & strLine & " "
  8.       ar(n) = strIn : n = n + 1
  9.    End If
  10. Loop
  11. For i = CLng(UBound(ar)/2) to 0 step -1
  12.    ar1 = Split(strIn,ar(i))
  13.    If UBound(ar1) > 1 Then
  14.       For j = 1 to UBound(ar1) - 1
  15.          WriteToFile Split(ar1(j)),Split(ar(i))
  16.       Next
  17.       Exit For
  18.    End If
  19. Next
  20. MsgBox "OK"
  21. Sub WriteToFile(ar2,ar3)
  22.    If UBound(ar2) >= 1 Then
  23.       strOut = Mid(ar2(UBound(ar2)-1),2)
  24.    Else
  25.       strOut = Mid(ar3(UBound(ar3)-1),2)
  26.    End If
  27.    fso.OpenTextFile("b.txt",8,True).WriteLine strOut
  28. End Sub
复制代码

作者: jyswjjgdwtdtj    时间: 2023-3-1 17:25

本帖最后由 jyswjjgdwtdtj 于 2023-3-2 21:59 编辑

哦 所以你的意思就是把行给颠倒了,而不是把每个字符颠倒啊
作者: 思想之翼    时间: 2023-3-1 17:57

回复 2# jyswjjgdwtdtj
感谢!没能解决问题
作者: jyswjjgdwtdtj    时间: 2023-3-1 19:04

回复 3# 思想之翼


    那你想要啥呢?
那你读出来,颠倒,再放到其他的一个txt里
在读取行不?
作者: 思想之翼    时间: 2023-3-1 19:14

本帖最后由 思想之翼 于 2023-3-2 10:39 编辑

回复 4# jyswjjgdwtdtj
理解您的想法。文本个数多,折腾数据费时。
作者: 523066680    时间: 2023-3-1 19:38

这语言描述,ChapGPT也未必能解读
作者: jyswjjgdwtdtj    时间: 2023-3-1 20:56

回复 5# 思想之翼


    不是,那你用xml格式啊?
就算是xml也是吧文档放在内存里解析的
你用文本文档,怎么可能有在磁盘里就能从后往前读的?
作者: 523066680    时间: 2023-3-1 21:01

回复 7# jyswjjgdwtdtj


    获取文件大小,类似 seek 操作直接定位到末尾,offset递减 倒着读咯。如果只是 ASCII 范围内的字符,就不用考虑编码问题。
作者: jyswjjgdwtdtj    时间: 2023-3-1 21:44

本帖最后由 jyswjjgdwtdtj 于 2023-3-2 21:57 编辑

回复 8# 523066680


    啊 那就
  1. 'f是打开的文本
  2. a=len(f.readall)
  3. f.skip(a-1)
  4. msgbox f.read(1)
复制代码
你是不是这个意思?有些好奇为啥要从后往前读
作者: 523066680    时间: 2023-3-1 21:50

回复  523066680


    啊 那就你是不是这个意思?有意思吗
jyswjjgdwtdtj 发表于 2023-3-1 21:44



    咋滴,这口气,要战吗?
作者: 523066680    时间: 2023-3-1 23:26

回复 9# jyswjjgdwtdtj
    年轻人C语言没接触过吗
本以为吕布已经天下无敌了,没想到有人比他还要勇猛,这是谁的部将?


作者: 523066680    时间: 2023-3-1 23:48

@老刘1号    1号你好,我是洞洞拐
作者: Batcher    时间: 2023-3-2 09:10

回复 2# jyswjjgdwtdtj


仔细阅读才能理解楼主的需求:
http://bbs.bathome.net/thread-23404-1-1.html
哪怕错误一个字都可能无法解决真实的问题。
作者: czjt1234    时间: 2023-3-2 20:44

本帖最后由 czjt1234 于 2023-3-2 20:46 编辑
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. set file = fso.OpenTextFile("a.txt")
  3. Do Until file.AtEndOfStream
  4.    strLine = file.ReadLine
  5.    If strLine <> "" Then
  6.       ReDim PreServe br(n)
  7.       strIn = strIn & "$" & strLine & " "
  8.       br(n) = strIn
  9.       n = n + 1
  10.    End If
  11. Loop
  12. n = n - 1
  13. cr = Split(strIn)
  14. strIn = ""
  15. ReDim ar(n)
  16. For i = 0 To n
  17.     j = cr(n - i)
  18.     strIn = strIn & j & " "
  19.     ar(i) = strIn
  20. Next
  21. For i = CLng(UBound(ar) / 2) to 0 step -1
  22.    ar1 = Split(strIn, ar(i))
  23.    If UBound(ar1) > 1 Then
  24.       For j = 1 to UBound(ar1) - 1
  25.          WriteToFile Split(ar1(j)), Split(ar(i))
  26.       Next
  27.       Exit For
  28.    End If
  29. Next
  30. MsgBox "OK"
  31. Sub WriteToFile(ar2, ar3)
  32.    If UBound(ar2) >= 1 Then
  33.       strOut = Mid(ar2(UBound(ar2) - 1), 2)
  34.    Else
  35.       strOut = Mid(ar3(UBound(ar3) - 1), 2)
  36.    End If
  37.    fso.OpenTextFile("b.txt",8,True).WriteLine strOut
  38. End Sub
复制代码

作者: 思想之翼    时间: 2023-3-13 15:00

本帖最后由 思想之翼 于 2023-3-13 16:53 编辑

回复 14# czjt1234
非常感谢!代码运行结果正确。
VBScript 代码运行速度上不去,转换为 Javascript 或其他脚本语言,是否明显加速?恳望指点!
作者: jyswjjgdwtdtj    时间: 2023-3-13 17:16

回复 15# 思想之翼


    显然能咯 援引老刘一号的话
“随便换个编译型语言效率就可以薄纱vbs”
作者: czjt1234    时间: 2023-3-13 21:13

用第三方吧,批处理第三方命令行
大型文本必须批处理第三方命令行,gwak什么的,不过我没研究过,不会
你到批处理板块问吧




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