[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 【已解决】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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

哦 所以你的意思就是把行给颠倒了,而不是把每个字符颠倒啊

TOP

回复 2# jyswjjgdwtdtj
感谢!没能解决问题

TOP

回复 3# 思想之翼


    那你想要啥呢?
那你读出来,颠倒,再放到其他的一个txt里
在读取行不?

TOP

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

回复 4# jyswjjgdwtdtj
理解您的想法。文本个数多,折腾数据费时。

TOP

这语言描述,ChapGPT也未必能解读

TOP

回复 5# 思想之翼


    不是,那你用xml格式啊?
就算是xml也是吧文档放在内存里解析的
你用文本文档,怎么可能有在磁盘里就能从后往前读的?

TOP

回复 7# jyswjjgdwtdtj


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

TOP

本帖最后由 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)
复制代码
你是不是这个意思?有些好奇为啥要从后往前读

TOP

回复  523066680


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



    咋滴,这口气,要战吗?

TOP

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


      include <stdio.h>

      include <stdlib.h>

      int main(int argc, char *argv[] )
      {
          FILE *fp = fopen("tmp.txt", "rb");
          char c;
          int size;
          int offset = -1;

          //定位到文件末尾
          fseek( fp, 0, SEEK_END );
         
          //末尾的offset
          size = ftell(fp);

          int count = 0;
          //只捕获除换行符以外的倒数3个字符
          while ( count < 3 && abs(offset) <= size )
          {
              fseek( fp, offset--, SEEK_END );
              c = getc( fp );  
              if ( c != 13 && c != 10 )
              {
                  count++;
                  printf("%c\n", c);
              }
          }
          return 0;
      }
1

评分人数

TOP

@老刘1号    1号你好,我是洞洞拐

TOP

回复 2# jyswjjgdwtdtj


仔细阅读才能理解楼主的需求:
http://bbs.bathome.net/thread-23404-1-1.html
哪怕错误一个字都可能无法解决真实的问题。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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
复制代码
1

评分人数


QQ 20147578

TOP

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

回复 14# czjt1234
非常感谢!代码运行结果正确。
VBScript 代码运行速度上不去,转换为 Javascript 或其他脚本语言,是否明显加速?恳望指点!

TOP

返回列表