Board logo

标题: [问题求助] 求助VBS对文本第一列进行汇总,然后在一行输出 [打印本页]

作者: filippo009    时间: 2020-12-13 23:48     标题: 求助VBS对文本第一列进行汇总,然后在一行输出

假设原有 txt 样式,如下:

ad001|购买1000
ad002|卖出2000
ad003|购买1000
ad004|持平1000
ad005|卖出1500
ad001|卖出1000
ad002|暂无数据

请问VBS 能否按照第一列进行汇总,把第一列相同输出在一行?非常感谢各位老师

ad001|购买1000 & 卖出1000
ad002|卖出2000 & 暂无数据
ad003|购买1000
ad004|持平1000
ad005|卖出1500
作者: WHY    时间: 2020-12-16 15:12

  1. On Error Resume Next
  2. Dim srcFile, dic, fso, objFile, s, arr
  3. srcFile = "1.txt"    '源文件
  4. Set dic = CreateObject("Scripting.Dictionary")
  5. Set fso = CreateObject("Scripting.FileSystemObject")
  6. Set objFile = fso.OpenTextFile(srcFile, 1)
  7. while Not objFile.AtEndOfStream
  8.     s = objFile.ReadLine
  9.     arr = Split(s, "|", 2)
  10.     If Not dic.Exists(arr(0)) Then
  11.         dic.Item(arr(0)) = s
  12.     Else
  13.         dic.Item(arr(0)) = dic.Item(arr(0)) + "&" + arr(1)
  14.     End If
  15. wend
  16. WSH.Echo Join(dic.Items, vbCrLf)
复制代码

作者: filippo009    时间: 2020-12-16 15:30

回复 2# WHY


    感谢,请问用bat 能实现吗.....或者用这个定义成函数,从BAT 里面调用?
作者: WHY    时间: 2020-12-16 17:26

回复 3# filippo009


    bat能实现,纯批、第三方、混编、等等,办法很多。
作者: WHY    时间: 2020-12-16 17:28

本帖最后由 WHY 于 2020-12-17 15:07 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=|" %%i in ('sort 1.txt') do (
  4.     if "!s!" == "%%i" (
  5.         set "out=!out! & %%j"
  6.     ) else (
  7.         if defined out echo;!out!
  8.         set "s=%%i"
  9.         set "out=%%i|%%j"
  10.     )
  11. )
  12. if defined out echo;!out!
  13. pause
复制代码
  1. gawk -F"|" "{ a[$1] = a[$1] ? a[$1]\"^&\"$2 : $0 } END { for(i in a)print a[i] }" 1.txt > 2.txt
复制代码

作者: filippo009    时间: 2020-12-17 12:16

实在有点不解,VBS 和bat 把结果 另存为其他文件,怎么加呢,非常感谢




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