|
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
状态 离线
|
|
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 |
|