![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 11:54 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请求高手解答 我的 难题(文本拆分) |
| 可打印版本 4,427 / 24 |
| 第1楼 wusongccb | 发表于 2008-10-22 10:36 |
| 新手上路 发帖 6 积分 6 | |
|
请求高手解答 我的 难题(文本拆分) 按照版主要求,现将详细需求整理在此:
现有16G的文本文件,有130个字段,需要拆分成若干文件。 拆分规则: 按照 第117个字段的前三位命名并拆分。 我已研究出一个半成品代码,代码如下: @echo off sed.exe -f sed.txt aaa.txt > temp.txt for /f "tokens=1,2* delims=|" %%a in (temp.txt) do ( for /f "tokens=25* delims=|" %%d in ("%%c") do ( for /f "tokens=25* delims=|" %%f in ("%%e") do ( for /f "tokens=25* delims=|" %%h in ("%%g") do ( for /f "tokens=25* delims=|" %%j in ("%%i") do ( for /f "tokens=15 delims=|" %%l in ("%%k") do ( set "str=%%l" setlocal enabledelayedexpansion for %%z in (110 210 310) do ( if "!str:~,3!"=="%%z" ( >>%%z.txt echo %%a^|%%b^|%%c ) ) endlocal ) ) ) ) ) ) 但是该代码有个缺陷,%%z 并不止上述“110 210 310”三个,因此不能如此枚举出来,而是能否直接用第117个字段的前三位来命名。 同时目前还发现另外一个问题: 文本文件中,有字段值为空,即两个管道符在一起(如:||),如此,FOR会认为所指定的字段并不在117位,程序默认空字段值不能赋值给一个变量,导致锁定第117个字段不准,因此我使用了个蠢办法,利用SED.EXE做一个全文本替换,将管道符“|”替换成空格+管道符(如:“ |”),如此就能锁定第117个字段,但是这样就会多一次I/O读写,效率大大降低。 论坛高手如云,且不吝赐教,感激不尽!! [ Last edited by wusongccb on 2008-10-27 at 10:55 ] |
|
| 第2楼 moniuming | 发表于 2008-10-22 11:02 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
| 第3楼 tireless | 发表于 2008-10-22 13:29 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
有个疑问是,为什么: set str=%%b & set filename=!str:~,3! echo %%a^|%%b^|%%c>>!filename!.txt 不能换成: set str=%%b echo %%a^|%%b^|%%c>>!str:~,3!.txt |
|
| 第4楼 HAT | 发表于 2008-10-22 14:00 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 2楼 这样是不是要好些?
|
|
| 第5楼 moniuming | 发表于 2008-10-22 14:12 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
回3楼 经测试,确实不行...
[ Last edited by moniuming on 2008-10-22 at 14:23 ] |
|
| 第6楼 26933062 | 发表于 2008-10-22 14:37 |
| 银牌会员 发帖 879 积分 2,268 | |
|
这样是否更好
: |
|
| 第7楼 tireless | 发表于 2008-10-22 14:46 |
| 银牌会员 发帖 1,122 积分 2,025 | |
Re 4 楼@echo off 蓝色部分是不是放在 for 循环的外面好些?放在 for 循环里面的话,每套一次 for 循环,都进行 打开/关闭变量延迟扩展... |
|
| 第8楼 HAT | 发表于 2008-10-22 14:54 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 3楼 看完这篇文章,不知是否有所启发:
|
|
| 第9楼 HAT | 发表于 2008-10-22 14:55 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 6楼 1. 这个方法3楼已经对提出疑问了。
2. 为何要坚持用type呢? |
|
| 第10楼 moniuming | 发表于 2008-10-22 14:57 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
回6楼 不行,你试过了吗?
'3.txt' 不是内部或外部命令,也不是可运行的程序 |
|
| 第11楼 HAT | 发表于 2008-10-22 14:59 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 7楼 放在哪里更好呢?嗯,还是各取所需吧^_^
|
|
| 第12楼 wusongccb | 发表于 2008-10-22 18:29 |
| 新手上路 发帖 6 积分 6 | |
|
非常感谢各位高手 输入的文本是追加式的,能改成替换方式的吗
|
|
| 第13楼 wusongccb | 发表于 2008-10-22 18:32 |
| 新手上路 发帖 6 积分 6 | |
|
还有我处理的 aaa.txt有 16个G这么大,用2楼的脚本可以吗?
|
|
| 第14楼 wusongccb | 发表于 2008-10-22 18:34 |
| 新手上路 发帖 6 积分 6 | |
|
高手如云,真是个好论坛
|
|
| 第15楼 wusongccb | 发表于 2008-10-22 18:51 |
| 新手上路 发帖 6 积分 6 | |
|
还有个巨大的困难,各位高手
实际情况是 分隔符的 第 117个字段(例子是第2个字段),发掘26个字段后不知道用什么字母来代替 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |