![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-25 07:33 |
共 47,813 主题排行 / 349,918 发帖 / 今日 1 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 文本"纵列"如何转换为"横行"? |
| 可打印版本 2,666 / 19 |
| 第1楼 xycoordinate | 发表于 2007-03-02 08:33 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
文本"纵列"如何转换为"横行"? 看第5楼
![]() 现有txt文件,是由findstr命令得到的
|
|
| 第2楼 slore | 发表于 2007-03-02 11:04 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
你着色有问题……
如果你: 20070101.txt: MEQ 6228770015000025335 20070102.txt: MEQ 62232754000308918 20070102.txt: 10:48 MEQ ACCEPTED 20070102.txt:AMOUNT=50.00 20070102.txt: MTR 62232754000308918 20070102.txt: 10:48 MTR ACCEPTED 20070104.txt: MEQ 6228790915000000566 20070104.txt: 09:26 MEQ ACCEPTED 20070104.txt:AMOUNT=100.00 20070104.txt: MTR 6228790915000000566 20070104.txt: 09:26 MTR ACCEPTED 20070104.txt: MEQ 6228790915000000566 20070104.txt: 09:27 MEQ ACCEPTED 20070105.txt: MEQ 6228791915000000110 20070105.txt: 09:04 MEQ ACCEPTED 20070105.txt:AMOUNT=11.20 20070105.txt: MTR 6228791915000000110 20070105.txt: 09:05 MTR ACCEPTED 你看到什么规律了么? for 分割后,AMOUNT存在那么后2行的数据就有用。 |
|
| 第3楼 namejm | 发表于 2007-03-02 12:24 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
可以试试下面的代码:
精简了一下代码。 [ Last edited by namejm on 2007-3-2 at 09:08 AM ] |
|
| 第4楼 xycoordinate | 发表于 2007-03-02 21:43 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
Originally posted by namejm at 2007-3-1 11:24 PM: |
|
| 第5楼 xycoordinate | 发表于 2007-03-02 21:45 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
findstr命令导出的文本,现在改变了一点:
总共有6个交易TYPE UNI MOBILE COM MOBILE TELEPHONE GAS WATER ELEC 只有UNI MOBILE后面冒号(:)与CUSTOM_NO之间有空格! DATE TYPE CUSTOM_NO CARD AMOUNT 20070102 COM MOBILE 13855573825 62232754000312918 50.00 20070104 UNI MOBILE 13305555353 6228790915001200566 100.00 。。。。。。 [ Last edited by xycoordinate on 2007-3-3 at 09:04 PM ] |
|
| 第6楼 ccwan | 发表于 2007-03-02 22:01 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
应该没有什么问题吧,namejm的代码能够完成你的目的。修改一下好了。
|
|
| 第7楼 xycoordinate | 发表于 2007-03-02 22:05 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
Originally posted by ccwan at 2007-3-2 09:01 AM: |
|
| 第8楼 ccwan | 发表于 2007-03-02 23:22 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
你的要求怎么一直在改变啊?我刚刚完成了你的上一个要求你又更新了。
|
|
| 第9楼 ccwan | 发表于 2007-03-02 23:28 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
希望你不会再改变要求了。^_^
不行,格式有些偏差,等我再改改。 你的COM MOBILE:13855513825,冒号后没有空格, UNI MOBILE: 13335555353,冒号后有空格,容易错误,不知是否你的疏忽? [ Last edited by ccwan on 2007-3-2 at 11:33 PM ] |
|
| 第10楼 xycoordinate | 发表于 2007-03-02 23:48 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
Originally posted by ccwan at 2007-3-2 10:28: 这是ATM的流水日志,我用findstr命令过滤生成的就是这样! 可能是ATM厂家在编写程序时的疏忽!! 谢谢DG! 好眼力呀! |
|
| 第11楼 ccwan | 发表于 2007-03-02 23:53 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
这次的代码一定行了。代码如下
考虑到格式可能不整齐,附上附件 附件 test.rar (417 bytes) |
|
| 第12楼 xycoordinate | 发表于 2007-03-03 00:46 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
@echo off
setlocal enabledelayedexpansion echo DATE TYPE CUSTOM_NO CARD AMOUNT for /f "tokens=1,2,3 delims== " %%i in (test.txt) do ( if !flag! equ 2 ( echo !name! !TYPE! !CUSTOM_NO! !CARD! !AMOUNT! set flag= ) if !flag! equ 1 ( set CARD=%%k set CARD=!CARD:~0,19! set flag=2 ) set str=%%i set var=%%j if "!var:~0,3!"=="MOB" ( set TYPE=!str:~-3,3! !var:~0,6! set CUSTOM_NO=!var:~-11,11! if "!TYPE:~0,3!"=="UNI" set CUSTOM_NO=%%k ) if "!var:~-3,1!"=="." ( set name=%%~ni set AMOUNT=%%j set flag=1 ) ) 红色的地方需要修改, 总共有6个交易TYPE UNI MOBILE COM MOBILE TELEPHONE GAS WATER ELEC 只有UNI MOBILE后面冒号(:)与CUSTOM_NO之间有空格! 呜呜呜。。。。。。 我又犯错了! ncrlog\15615\20070112.txt:WATER:10213809 ncrlog\15615\20070112.txt:AMOUNT=9.60 ncrlog\15615\20070112.txt: MTR 6228791915000011011 ncrlog\15615\20070112.txt: 10:34 MTR ACCEPTED ncrlog\15615\20070112.txt:GAS: 2009218582 ncrlog\15615\20070112.txt:AMOUNT=21.0 ncrlog\15615\20070112.txt: MTR 6228791915000011011 ncrlog\15615\20070112.txt: 10:36 MTR ACCEPTED ncrlog\15615\20070126.txt:TELEPHONE:2761779 ncrlog\15615\20070126.txt:AMOUNT=29.00 ncrlog\15615\20070126.txt: MTR 6228770015000121461 ncrlog\15615\20070126.txt: 13:42 MTR ACCEPTED ncrlog\15606\20070130.txt:ELEC: 40103644 ncrlog\15606\20070130.txt:AMOUNT=214.81 ncrlog\15606\20070130.txt: MTR 62232754000121168 ncrlog\15606\20070130.txt: 16:41 MTR ACCEPTED 这次不好麻烦DX了,我只好自己更改了! [ Last edited by xycoordinate on 2007-3-3 at 09:04 PM ] |
|
| 第13楼 xycoordinate | 发表于 2007-03-03 04:06 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
165.txt
test.bat
CMD: E:\>test.bat 156.txt DATE TYPE CUSTOM_NO CARD AMOUNT 20070111 COM MOBILE 13785553216 62232754000719668 100.00 20070104 UNI MOBILE 13305555353 6228790915000000566 100.00 20070109 TELEPHONE 2212834 6228790915012002760 73.00 20070112 WATER 10213809 6228791915000110011 9.60 20070130 ELEC 40103644 62232754000623168 214.81 为什么呀? 就GAS项目不显示??? 大家能帮我看看吗? [ Last edited by xycoordinate on 2007-3-3 at 10:01 PM ] |
|
| 第14楼 xycoordinate | 发表于 2007-03-03 05:36 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
靠!
原来GAS的AMOUNT格式都是“**.*” ncrlog\15615\20070112.txt:GAS: 2009218582 ncrlog\15615\20070112.txt:AMOUNT=21.0 ncrlog\15615\20070112.txt: MTR 6228791915000000011 ncrlog\15615\20070112.txt: 10:36 MTR ACCEPTED 只要在test.bat里加一点,就OK了! if "!var:~-2,1!"=="." ( set name=%%~ni set AMOUNT=%%j set flag=1 ) 万分感谢: namejm ccwan ![]() [ Last edited by xycoordinate on 2007-3-2 at 04:38 PM ] |
|
| 第15楼 xycoordinate | 发表于 2007-03-03 10:07 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
探讨1 test.bat
111.txt
E:\>testmiddle.bat 111.txt >111new.txt 111new.txt
111new.txt显示的顺序与111.txt的一致. for命令是一行一行扫描文本! 现在探讨一下,执行test.bat时的步骤: 第1步: if "!var:~0,6!"=="MOBILE" ( set TYPE=!str:~-3,3! MOBILE set CUSTOM_NO=!var:~-11! ) 第2步: if "!var:~-3,1!"=="." ( set name=%%~ni set AMOUNT=%%j set flag=1 ) 第3步: if !flag! equ 1 ( set CARD=%%k set flag=2 ) 第4步: if !flag! equ 2 ( echo !name! !TYPE! !CUSTOM_NO! !CARD! !AMOUNT! set flag= ) [ Last edited by xycoordinate on 2007-3-3 at 10:43 AM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |