标题: [问题求助] 求助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
- On Error Resume Next
- Dim srcFile, dic, fso, objFile, s, arr
- srcFile = "1.txt" '源文件
-
- Set dic = CreateObject("Scripting.Dictionary")
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set objFile = fso.OpenTextFile(srcFile, 1)
-
- while Not objFile.AtEndOfStream
- s = objFile.ReadLine
- arr = Split(s, "|", 2)
- If Not dic.Exists(arr(0)) Then
- dic.Item(arr(0)) = s
- Else
- dic.Item(arr(0)) = dic.Item(arr(0)) + "&" + arr(1)
- End If
- wend
-
- 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 编辑
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims=|" %%i in ('sort 1.txt') do (
- if "!s!" == "%%i" (
- set "out=!out! & %%j"
- ) else (
- if defined out echo;!out!
- set "s=%%i"
- set "out=%%i|%%j"
- )
- )
- if defined out echo;!out!
- pause
复制代码
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |