中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 通过固定标志将文本内容分别导入两个不同的文本文件
« [1] [2] »
作者:
标题: 通过固定标志将文本内容分别导入两个不同的文本文件 上一主题 | 下一主题
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『楼 主』:  通过固定标志将文本内容分别导入两个不同的文本文件

我有一个原始文件,简称: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 ]

2008-1-31 22:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

@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的处理字符没有那个强。

2008-1-31 23:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 3 楼』:  

C:\Documents and Settings\wjc\桌面>awk "{if($8 == 01090600){print $0 >> \"1.txt\
"} else {if($8 == 02090600){print $0 >> \"2.txt\"}}}" test.txt

2008-1-31 23:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 4 楼』:  

二楼的大大,我的原始文本(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 ]

2008-1-31 23:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 5 楼』:  

三楼的大大,你那个代码怎么用啊?
能完整的写一个给我吗?
——唉。。。可怜我这超级新手啊。。。。。
拜托了。。。

2008-1-31 23:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 6 楼』:  


@echo off
    findstr /c:" 01090600 " test.txt>>a1.txt
    findstr /c:" 02090600 " test.txt>>a2.txt
    start a1.txt
    start a2.txt
goto :eof


2008-1-31 23:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 7 楼』:  

六楼的版主。。。你的代码我用了一下,是生成了a1和a2,但里面空空的什么都没有啊。。。而且我看了你的代码:你应该是用"01090600"和"02090600"为标志来区分的吧,可是我在实际应用中只能以它们的第二位数"1"和"2"来做为标志来区分啊。。。因为090600还属于会变动的数据。。。还会出现090400、090500等等。。。能不能再帮我想想啊。。。大虾。。。拜托了。。。

在此先要感谢各位大大们的关注,请继续给予新人支持啊。。。谢了先!
期待中。。。

2008-2-1 00:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  

要想更精确,可以用:
@echo off
    del a1.txt a2.txt 2>nul
    findstr /rc:" 01...... " test.txt>>a1.txt
    findstr /rc:" 02...... " test.txt>>a2.txt
    start a1.txt
    start a2.txt
goto :eof


2008-2-1 00:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 9 楼』:  

@echo off
        findstr "\<01090600\>" test.txt>>a1.txt
        findstr "\<02090600\>" test.txt>>a2.txt
        start a1.txt
        start a2.txt
    goto :eof

2008-2-1 00:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  


::那代码就简单多了……只要判断第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)
那你可以使用VBS脚本……
思路一样。。。

你会VBA的话,下面的代码能看懂吧?

If  Mid(linestr,165,1) = "1" Then
   
append2file(linestr,"a1.txt")
Else
   
append2file(linestr,"a2.txt")
End If

'其中append2file是一个追加到文本的函数。

2008-2-1 00:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 11 楼』:  

如果你其他数据有01,02的话,用我的代码

只要你的其他数据没有01,02开头的用3742668的代码,用findstr的确简单不少。。

2008-2-1 00:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 12 楼』:  

哇噻。。。感谢8楼、10楼、11楼的大大门,真的是条条道路通罗马啊。。。又学了很多,特别感谢9楼和11楼的大大,8楼大大给予了很大的关注。。。并最终给出了解决方案。。。11楼的大大写的VBA代码比我要精练的多,又学了一招。。。这个终于解决了。。。非常感谢。。。。Thanks!。。。以后多多努力学习,不辜负大大们的努力栽培。。。。

我这边还有个不情之请,我在论坛上还有两个帖子没有解决,也请帮我看看啊。。。
标题分别为:通过原始文本文件转换成另一种格式的文本文件。还有:删除文本文件中的特殊字符但保持格式不变。
http://www.cn-dos.net/forum/view ... ge=1&highlight=

http://www.cn-dos.net/forum/view ... ge=1&highlight=
所使用的a文件的规则跟本帖是一样的!

고 맙 습 니 다 !

[ Last edited by dhlmdsnw on 2008-2-1 at 01:10 AM ]

2008-2-1 00:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  

감사합니다
貌似意思差不多。。。汗~下次说中文。。。
不是韩文的系统吧?

2008-2-1 03:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 14 楼』:  

出现新情况了:还是中文捣的鬼。。。如果不是出现三个字名字而是出现两个字或者四个字或者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 ]

2008-2-2 00:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 15 楼』:  

如果方便slore大大也给个vbs完整版的吧。。。让我能够学得更多一点啊。。。因为毕竟VBA我才刚对Excel的平台上操作有点熟悉而已啊。。。还很初级的。。고 맙 습 니 다 !

[ Last edited by dhlmdsnw on 2008-2-2 at 12:19 AM ]

2008-2-2 00:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: