![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 11:58 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 通过固定标志将文本内容分别导入两个不同的文本文件 |
| 可打印版本 2,592 / 18 |
| 第1楼 dhlmdsnw | 发表于 2008-01-31 22:35 |
| 初级用户 发帖 59 积分 127 | |
|
通过固定标志将文本内容分别导入两个不同的文本文件 我有一个原始文件,简称:a文件。文件内容如下:
1203145 1406604301101852880 000000000166000 352101196106237411 康万梓 20080131000106501080001621 797422 01090600 1203271 1406049801101094958 000000004321800 350702196305151378 郑荣华 20080131000106501080000133 797422 01090600 1204272 13900100460040248 000000000250000 35210119670919422X 杨小兰 20080131000106501080001974 797422 02090600 固定标志很简单,先看第一行的数字末尾是01090600 (我为什么拉这长的空白呢?因为空白不能没有,在分别导入的时候也要有空白,也就是说每一行的内容、格式都不能改变),第二行也是01090600 而第三行是02090600 (相信大大们已经看出固定标志是什么了,没错就是1和2!),现在希望大大们能够帮我把出现1标志的所在行一整行全部导入a1文本文件。而出现2标志的所在行一整行全部导入a2文本文件。 实在是麻烦大家了,可能问题对大大们来说很简单,可是对于我来说真是头痛死了,因为以前都是学VBA的,虽然用代码能够解决,但我想大大跟我想的是一样的,我们要想成为一个高手,就应该用更直接的方法,一步到位,所以我现在也在很努力的学批处理。。。但还只是刚入门而已,希望大大们多多帮我啊。。。。고 맙 습 니 다 !(谢谢!)。。。 [ Last edited by dhlmdsnw on 2008-1-31 at 11:04 PM ] |
|
| 第2楼 slore | 发表于 2008-01-31 23:04 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
@echo off
for /f "tokens=1-7,8,*" %%i in (a.txt) do ( if %%p==01090600 (echo %%i %%j %%k %%l %%m %%n %%o %%p >>a1.txt) else (echo %%i %%j %%k %%l %%m %%n %%o %%p >>a2.txt) ) pause>nul 空格太多没有办法。。。 VBA多好用。。。非要用BAT? BAT的处理字符没有那个强。 |
|
| 第3楼 junchen2 | 发表于 2008-01-31 23:20 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
C:\Documents and Settings\wjc\桌面>awk "{if($8 == 01090600){print $0 >> \"1.txt\
"} else {if($8 == 02090600){print $0 >> \"2.txt\"}}}" test.txt |
|
| 第4楼 dhlmdsnw | 发表于 2008-01-31 23:29 |
| 初级用户 发帖 59 积分 127 | |
|
二楼的大大,我的原始文本(a文本文件)是有规则的,就算是空白也是有规则的,规则如下:
序号 数据类型(字节) 名称 备注 累计字节 1 Char(25) 标志1 左对齐,右补空格 25 2 Char(30) 标志2 左对齐,右补空格 55 3 Char(15) 标志3 例如13.2(去掉小数点),右对齐,左补0 70 4 Char(6) 标志4 固定六个空格 76 5 Char(20) 标志5 左对齐,右补空格 96 6 Char(20) 标志6 左对齐,右补空格 116 7 Char(8) 标志7 YYYYMMDD 124 8 Char(1) 标志8 0-代收,1-代付 125 9 Char(1) 标志9 0-首期,1-续期 126 10 Char(20) 标志10 左对齐,右补空格 146 11 Char(20) 标志11 左对齐,右补空格 166 12 Char(20) 标志12 左对齐,右补空格 186 13 Char(40) 标志13 左对齐,右补空格 226 你在帮助看看啊。。。 你说得没错,VBA在日常办公中特别是Excel、Word、PowerPoint等方面可以取得很好的效果,但对处理文本文件之间的转换毕竟稍弱,简单的说我还得打开一个Excel或者Word才能处理,虽然我是一女子,但我也很享受那种秒杀的快乐。。。呵呵。。。轻轻双击一下,一切搞定啊! 还请大大们多多帮忙看看啊。。。。 谢了先! [ Last edited by dhlmdsnw on 2008-2-1 at 12:14 AM ] |
|
| 第5楼 dhlmdsnw | 发表于 2008-01-31 23:34 |
| 初级用户 发帖 59 积分 127 | |
|
三楼的大大,你那个代码怎么用啊?
能完整的写一个给我吗? ——唉。。。可怜我这超级新手啊。。。。。 拜托了。。。 |
|
| 第6楼 3742668 | 发表于 2008-01-31 23:39 |
| 荣誉版主 发帖 718 积分 2,013 | |
| 第7楼 dhlmdsnw | 发表于 2008-02-01 00:06 |
| 初级用户 发帖 59 积分 127 | |
|
六楼的版主。。。你的代码我用了一下,是生成了a1和a2,但里面空空的什么都没有啊。。。而且我看了你的代码:你应该是用"01090600"和"02090600"为标志来区分的吧,可是我在实际应用中只能以它们的第二位数"1"和"2"来做为标志来区分啊。。。因为090600还属于会变动的数据。。。还会出现090400、090500等等。。。能不能再帮我想想啊。。。大虾。。。拜托了。。。
在此先要感谢各位大大们的关注,请继续给予新人支持啊。。。谢了先! 期待中。。。 |
|
| 第8楼 3742668 | 发表于 2008-02-01 00:28 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
要想更精确,可以用:
|
|
| 第9楼 junchen2 | 发表于 2008-02-01 00:31 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
@echo off
findstr "\<01090600\>" test.txt>>a1.txt findstr "\<02090600\>" test.txt>>a2.txt start a1.txt start a2.txt goto :eof |
|
| 第10楼 slore | 发表于 2008-02-01 00:39 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
那你可以使用VBS脚本…… 思路一样。。。 你会VBA的话,下面的代码能看懂吧? If Mid(linestr,165,1) = "1" Then append2file(linestr,"a1.txt") Else append2file(linestr,"a2.txt") End If '其中append2file是一个追加到文本的函数。 |
|
| 第11楼 slore | 发表于 2008-02-01 00:45 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
如果你其他数据有01,02的话,用我的代码
只要你的其他数据没有01,02开头的用3742668的代码,用findstr的确简单不少。。 |
|
| 第12楼 dhlmdsnw | 发表于 2008-02-01 00:57 |
| 初级用户 发帖 59 积分 127 | |
|
哇噻。。。感谢8楼、10楼、11楼的大大门,真的是条条道路通罗马啊。。。又学了很多,特别感谢9楼和11楼的大大,8楼大大给予了很大的关注。。。并最终给出了解决方案。。。11楼的大大写的VBA代码比我要精练的多,又学了一招。。。这个终于解决了。。。非常感谢。。。。Thanks!。。。以后多多努力学习,不辜负大大们的努力栽培。。。。
我这边还有个不情之请,我在论坛上还有两个帖子没有解决,也请帮我看看啊。。。 标题分别为:通过原始文本文件转换成另一种格式的文本文件。还有:删除文本文件中的特殊字符但保持格式不变。 http://www.cn-dos.net/forum/viewthread.php?tid=37424&fpage=1&highlight= http://www.cn-dos.net/forum/viewthread.php?tid=37402&fpage=1&highlight= 所使用的a文件的规则跟本帖是一样的! 고 맙 습 니 다 ! [ Last edited by dhlmdsnw on 2008-2-1 at 01:10 AM ] |
|
| 第13楼 slore | 发表于 2008-02-01 03:40 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
감사합니다
貌似意思差不多。。。汗~下次说中文。。。 不是韩文的系统吧? |
|
| 第14楼 dhlmdsnw | 发表于 2008-02-02 00:13 |
| 初级用户 发帖 59 积分 127 | |
|
出现新情况了:还是中文捣的鬼。。。如果不是出现三个字名字而是出现两个字或者四个字或者e文字或者中英混合,那个1标志就不在第164位了。——给个通用版批处理吧。。。。因为我刚才试了好多方法就是达不到效果,可不是懒啊。。。。谢了先!大大原来的代码如下:
::那代码就简单多了……只要判断第165字符是不是1就可以了。 ::因为是从0开始算字符起点,所以下面代码出现的是164 @echo off for /f "delims=" %%i in (a.txt) do ( Set LineStr=%%i Call :WriteStr ) echo 处理完毕! pause>nul exit :WriteStr if %LineStr:~164,1%==1 (echo %LineStr%>>a1.txt) else (echo %LineStr%>>a2.txt) 对了,韩文的谢谢有多种说法,我的是带敬语的说法啦!——偶也是超级韩迷。。。嘿嘿。。。。 [ Last edited by dhlmdsnw on 2008-2-2 at 12:14 AM ] |
|
| 第15楼 dhlmdsnw | 发表于 2008-02-02 00:18 |
| 初级用户 发帖 59 积分 127 | |
|
如果方便slore大大也给个vbs完整版的吧。。。让我能够学得更多一点啊。。。因为毕竟VBA我才刚对Excel的平台上操作有点熟悉而已啊。。。还很初级的。。고 맙 습 니 다 !
[ Last edited by dhlmdsnw on 2008-2-2 at 12:19 AM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |