|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
16 楼』:
各位大大加油啊。。。人名问题及最后一行汇总行问题谁能帮我处理一下啊。。。
小妹急切盼望中。。。。
|
|
2008-1-30 00:54 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
17 楼』:
因为中英文空格 人名问题没解决
@echo off
set m=0
set psrc=0
setlocal enabledelayedexpansion
for /f "tokens=2,3,5" %%i in (a01.txt) do (
set/a n+=1
set src1=%%i
set src2=%%j
set src3=%%k
set var=00000!n!
set var=!var:~-6!
set vcr=00000000!m!
set vcr=!vcr:~-9!
for /f "delims=0 tokens=*" %%a in ("!src2!") do set/a psrc=!psrc!+%%a
>>14080005022%date:~2,2%%date:~5,2%%date:~8,2%.txt echo.140800050202!src1!3!var!00!src2!000000000000000011 !vcr!!src3!
set/a m+=1
)
set psrc=000000000000000%psrc%
set scr=00000000000000000%n%2
set/a n+=1
set var=00000%n%
>>14080005022%date:~2,2%%date:~5,2%%date:~8,2%.txt echo.114080005020214080100112003624143%var:~-6%%psrc:~-16%%scr:~-19%
pause
[ Last edited by terse on 2008-1-30 at 03:05 AM ]
|
简单!简单!再简单! |
|
2008-1-30 02:33 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
18 楼』:
先感谢terse大虾的大力帮助,我还没试,只不过一回来就看见大大给我回了帖就感激万分!
在人名问题上如果先不考虑外国人名的问题,就是说全部都是中文的情况可以解决吗?——因为在实际操作中,我还没碰上要外国人名操作的,只是我自己想的。——如果仅中文人名可以操作的话,还请大大先把代码发上来给我。
再次感谢terse大大!!!
|
|
2008-1-30 13:45 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
19 楼』:
terse大大上面的编码,我稍微按照我的需求做了一些细节的修正:
1.第五行a01.txt,改成了a.txt
2.第十五行14080005022%date:~2,2%%date:~5,2%%date:~8,2%.txt,改成了140800050%date:~0,4%%date:~5,2%%date:~8,2%001.txt。改这个最不好意思的,这个是我自己弄错了文件命名规则。
3.同样是第十五行echo.140800050202!,改成了echo.2140800050202!
4.同第十五行一致,第二十一行的14080005022%date:~2,2%%date:~5,2%%date:~8,2%.txt,改成了140800050%date:~0,4%%date:~5,2%%date:~8,2%001.txt。
改完后的代码全部如下:
@echo off
set m=0
set psrc=0
setlocal enabledelayedexpansion
for /f "tokens=2,3,5" %%i in (a.txt) do (
set/a n+=1
set src1=%%i
set src2=%%j
set src3=%%k
set var=00000!n!
set var=!var:~-6!
set vcr=00000000!m!
set vcr=!vcr:~-9!
for /f "delims=0 tokens=*" %%a in ("!src2!") do set/a psrc=!psrc!+%%a
>>140800050%date:~0,4%%date:~5,2%%date:~8,2%001.txt echo.2140800050202!src1!3!var!00!src2!000000000000000011 !vcr!!src3!
set/a m+=1
)
set psrc=000000000000000%psrc%
set scr=00000000000000000%n%2
set/a n+=1
set var=00000%n%
>>140800050%date:~0,4%%date:~5,2%%date:~8,2%001.txt echo.114080005020214080100112003624143%var:~-6%%psrc:~-16%%scr:~-19%
pause
经过试验,主要产生以下两个问题:
1.“名字+后面的空白”字节数不够,需要的是这样的结果:“名字+后面的空白”全部选中,然后把它复制粘贴到Excel的单元格中,用函数len来验证,如果名字是两个字的,“名字+后面的空白”len的返回值是51;如果名字是三位数的,“名字+后面的空白”len的返回值是50;如果名字是四位数的,“名字+后面的空白”len的返回值是49
。而用大大的代码,名字是两位数的,“名字+后面的空白”len的返回值是16;名字是三位数的,“名字+后面的空白”len的返回值是17。相差较大。
2.最后一行汇总行,最后一个数据2后面所需的空白数,用Excel的len函数返回值来表示是需要82个字节。而大大代码所产生空白数仅47。也是相差较大。
最后还有名字的处理问题帮助多多改善。
上面的细节全部处理后,所产生的文件用Ctrl+A全选后,蓝色的光幕是填满每一行,每一行没有任何的空白。
还请大大继续帮我改善这个代码!
在此万分感谢!!!
|
|
2008-1-30 14:44 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
20 楼』:
重新改一下 不知有效果否?
@echo off
set m=0
set psrc=0
set len=
setlocal enabledelayedexpansion
for /f "tokens=2,3,5" %%i in (a.txt) do (
set/a n+=1
set src1=%%i
set src2=%%j
set src3=%%k
set var=00000!n!
set var=!var:~-6!
set vcr=00000000!m!
set vcr=!vcr:~-9!
for /f "delims=0 tokens=*" %%a in ("!src2!") do set/a psrc=!psrc!+%%a
for /f "skip=1 delims=:" %%x in ('^(echo "!src3!"^&echo.^)^|findstr /o ".*"') do set/a l=63-%%x-5
call :loop !l!
>>140800050%date:~0,4%%date:~5,2%%date:~8,2%001.txt echo.2140800050202!src1!3!var!00!src2!000000000000000011 !vcr!!src3!
set/a m+=1
)
set psrc=000000000000000%psrc%
set scr=00000000000000000%n%2
set/a n+=1
set var=00000%n%
>>140800050%date:~0,4%%date:~5,2%%date:~8,2%001.txt echo.114080005020214080100112003624143%var:~-6%%psrc:~-16%%scr:~-19%%len:~0,35%
pause
:loop
set/a mn+=1
set src3=%src3%
if %1 neq %mn% goto loop
set mn=
|
简单!简单!再简单! |
|
2008-1-30 21:17 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
21 楼』:
哇。。。。耶耶耶。。。。
terse大大,我爱死你了!——耶耶耶。。。。。
什么没得说,就一句话感谢。。。我有得说。。。。非常感谢。。。고 맙 습 니 다 !
太好了。。。我对你的景仰真得如涛涛江水,绵绵不绝。。。如雷贯耳。。。哇噻。。。简直太棒了。。。。丫丫丫。。。。
——不过不知道会不会乐极生悲,明天拿到公司去试一下手。。。嘿嘿。。。每天都会要处理这样的东东。。好多丫。。。。我真是太感谢了!。。。大大万岁。。。。!!!!
|
|
2008-1-30 21:32 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
22 楼』:
哇噻,如果明天一下子双击一秒钟搞定,不知道那些人会拿什么眼光看我,会不会也对我景仰得如涛涛江水、绵绵不绝啊。。。想得都流口水了。。。。嘿嘿。。。terse大大,你不介意我在我的同事面前小秀一把吧。。。呵呵。。当然在论坛上我可不敢乱说。。。呵呵。。。耶耶耶。。。。成功。。成功。。。今天可以好好吃点东西。。睡个好觉。。。逛个好街了。。。大大的功劳最大!
同样也要感谢所有关注本帖的各位大虾,고 맙 습 니 다 !(谢谢!)。。。
啦啦啦。。。。。。
|
|
2008-1-30 21:39 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
|
2008-1-30 21:44 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
24 楼』:
天哪,乐得没边没谱了,忘了问一句:terse大大,你的代码支持外国名字不?
|
|
2008-1-30 21:51 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
25 楼』:
Quote: | Originally posted by dhlmdsnw at 2008-1-30 21:51:
天哪,乐得没边没谱了,忘了问一句:terse大大,你的代码支持外国名字不? |
|
你试一下吧 应该可以
|
简单!简单!再简单! |
|
2008-1-30 21:55 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
26 楼』:
说真的大大,我只学了一些最容易的VBA,都写好代码了,但是要经过Excel转换,我后来一想,为什么我不能直接一点呢,到后面翻了好多资料才约略懂得可以通过批处理进行直接转换。。。可是看了一些批处理的教学资料。。。感觉如果要解决还需要很多的时间。。。因此就上了这个论坛。。。通过学习你的代码。。。特别是一步一步解决我的问题。。。让我学到了许多有用的东西。。。我会进一步学习的。。。谢谢大大的支持!!!
|
|
2008-1-30 21:57 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
27 楼』:
terse大大:经过测试:测试样本如:潘迪特·辛格、Tom Marvolo Riddle、特里帕蒂·辛格。中文的名字都没问题,如果是外国的名字,转换后就变成Tom了,后面的都没了,成空白了。。。没关系。。。以后我通过努力学习会把terse大大的这个模型给完善的,大大不用操心了。。。。总得留一点作业让我这后辈有一点东西可做嘛。。。什么事都让你亲自出马,那多不好啊。。。高手总得用在刀刃上。。嘿嘿。。。。大大休息完有空了,可要到我的另一张帖子上看看啊。。。谢了先!。。。呵呵。。。
|
|
2008-1-30 22:20 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
28 楼』:
大大,太奇怪了。。。。我用了你的代码双击完。。。什么反应都没有?也没生成:14080005020080131001.txt文件,真是太奇怪了,什么事情都没发生?是不是我的电脑有问题啊。。。在家我是用XP,在公司是用2000。——我是先通过一个批处理,里面代码:copy *.txt /b a.txt /b。汇总生成一个a.txt文件,然后再用大大的代码,双击完就什么都没发生了?——大大再帮助看看啊。。。。
|
|
2008-1-31 12:27 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
29 楼』:
我终于懂了。。。。原来是我原始文件行数较多,它要处理将近15秒呢。。。最后才生成的。。。。唉,真晕,我这没基础的人。。。
不过大大,还是出现了一个变数,还请帮助我解决一下。。。。
问题是:b文件中每一行(除了最后一行)前面的:140800050202是固定的,后面1407002601001238877是变动的,来源于a文件,但a文件中这个地方数字的最后如果出现非数字符号如*号(像这样1407002601001238877*),请帮助去掉,不是用空白来替换,也不是后面的空白往前整。而是实实在在的删除一个字节的意思。可以吗?——先谢了!!——还请大大们也继续关注啊。。。
期待中。。。。
|
|
2008-1-31 22:12 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
30 楼』:
本来打算睡觉,还是写完算了(有Example.vbs,改改就删除了,不然桌面好乱),基本结构套了上个脚本。
Example2.vbs:
Quote: | Const ForReading = 1 '设定打开文本方式为读取
Const ForWriting = 2 '设定打开文本方式为写入
Const ForAppending = 8 '设定打开文本方式为追加
Const InFile = "a.txt" '设定打开的文本
Dim i
Dim StrLine,OutStr
i = 1
'On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject") '引用FSO对象,读写文件要用到的
Set objFile = objFSO.OpenTextFile(InFile, ForReading) '以读取方式打开InFile
Do Until objFile.AtEndOfStream
StrLine = objFile.ReadLine '读取一行
If Len(StrLine) Then '如果不是空行
StrLine = FixStr(StrLine)
NeedData = Split(StrLine," ")
If Right(NeedData(1),1) = "*" Then NeedData(1) = Left(NeedData(1),Len(NeedData(1)) - 1)
OutLine = "2140800050202" & NeedData(1) & "3" & AddZero(i,6) & "00" & NeedData(2)
OutLine = OutLine & "000000000000000011 " & AddZero(i - 1,9) & NeedData(4)
OutStr = OutStr & OutLine & vbCrLf
i = i + 1
End If
Loop
OutStr = OutStr & "14080005020214080100112003624143" & AddZero(i,6)
OutStr = OutStr & "00000000001775000000000000000000072 " '你上面是不是写漏了2? 2的含义不清。
objFile.Close '关闭文件对象
OutFile = "140820" & FormatDate(Date) & "001.txt"
Set objFile = objFSO.OpenTextFile(OutFile, ForWriting,True) '以写入方式打开OutFile
objFile.Write OutStr
objFile.Close '关闭文件对象
Set objFile = Nothing
Set objFSO = Nothing
Function FixStr(StrExp)
Do While InStr(StrExp," ")
StrExp = Replace(StrExp," "," ")
Loop
FixStr = StrExp
End Function
Function FormatDate(tDate)
FormatDate = Right(Year(tDate),2) & AddZero(Month(tDate),2) & AddZero(Day(tDate),2)
End Function
Function AddZero(sNum,iLen)
Addzero = Right("000000000" & sNum,iLen)
End Function |
|
把quote写成code了... -。-
|
|
2008-2-1 03:24 |
|