急!急!急!批处理(或vb语句)删除当前文件夹所有文本文档的每一行的前n个字符串

用批处理做。注意是删除字符窜,不是文件哦。(比如“粤B000H6”)删除当前文件夹所有文本文档的每一行的前n个字符串。另外,能不能删除每行特定的列的呢(比如“2011/0... 用批处理做。注意是删除字符窜,不是文件哦。(比如“粤B000H6”)
删除当前文件夹所有文本文档的每一行的前n个字符串。
另外,能不能删除每行特定的列的呢(比如“2011/04/18 00:07:53”)?
最好是写批处理,或者就vb代码也行。
文本内容如下:
粤B000H6,2011/04/18 00:07:53,114.118347,22.574850,0,0,0,
粤B000H6,2011/04/18 00:08:01,114.118347,22.574850,0,0,0,
粤B000H6,2011/04/18 00:08:03,114.118347,22.574850,0,2,0,
粤B000H6,2011/04/18 00:08:33,114.118301,22.574301,0,25,4,
粤B000H6,2011/04/18 00:08:39,114.118286,22.573967,0,22,3,
粤B000H6,2011/04/18 00:09:03,114.119698,22.573833,0,28,1,
粤B000H6,2011/04/18 00:09:33,114.121696,22.573650,0,25,3,
粤B000H6,2011/04/18 00:10:03,114.122498,22.571751,0,31,1,
粤B000H6,2011/04/18 00:10:09,114.123032,22.571867,0,35,1,
'先引用excel *.0 object library

Public ex As Excel.Application
Public wb As Excel.Workbook
Public sh As Excel.Worksheet
Private Sub Command3_Click()
Dim i As Long, A As Long
Dim arr() As String, str As String, Count As Long
Dim Result As String
Set ex = CreateObject("Excel.Application")
'Set wb = ex.Workbooks.Add '新建excel
Set wb = ex.Workbooks.Open("c:\file.csv") ' 你的A文件 ?????此处如何实现 变量 控制文件名???????????
Set sh = wb.Sheets(1) '第一个工作表

sh.Columns("C:C").Select '第三列
ex.Selection.Delete Shift:=xlToLeft

wb.Close SaveChanges:=True '直接关闭
ex.Quit
MsgBox "删除完毕"
'ex.Visible = True
Set ex = Nothing
Set wb = Nothing
Set sh = Nothing
End Sub
展开
 我来答
匿名用户
2011-05-14
展开全部
可以啊,而且如果你的文本都是那个格式,用bat就很容易。
其实你的是两个要求,只给你第二个的答案吧。因为第二个的答案就可以胜任第一个的要求了。
代码中的nn=2是去掉第2列,改成你自己的需要。
(这个只可以去除前3列中的,多了我看也没必要)
重要注意:每次运行都会删除指定的列,所以别运行多了。或者备份源文件。
@echo off
set nn=2
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
set b=%%~fa&set h=%%~nxa&echo 0>tem>nul
for /f "tokens=1,2,3* delims=," %%m in ('type "!b!"') do (
if %nn%==1 (echo %%n,%%o,%%p>>tem)
if %nn%==2 (echo %%m,%%o,%%p>>tem)
if %nn%==3 (echo %%m,%%n,%%p>>tem))
del "!b!"
ren "tem" "!h!")
exit
追问
我试了试这个可行。但是有个有个问题,我的数据有13798个文档,每个文档大概1兆,这个批处理的速度太慢了,处理一个文件就要好几分钟啊。所以能不能用别的方法呢。这里有两个vb的代码引用excel的方法我试了试,缺点是不能实现批量处理,它引用文件路径的代码中不能用变量(我想把文件名批量改为递增的数字,然后用循环变量控制处理文件的文件名,使用变量是个问题。)代码我放在问题补充里了,你看看能不能改进啊?
追答
哦,不会vb,(且没装excel)还是看楼下的吧。
匿名用户
2011-05-14
展开全部
下面代码改一下,应该能提高很多的效率。

@echo off
set nn=2
setlocal enabledelayedexpansion
for /r %%a in (*.txt) do (
set b=%%~fa&set h=%%~nxa&echo 0>tem>nul
for /f "usebackq tokens=1,2,3* delims=," %%m in ("!b!") do (
if %nn%==1 (echo %%n,%%o,%%p>>tem)
if %nn%==2 (echo %%m,%%o,%%p>>tem)
if %nn%==3 (echo %%m,%%n,%%p>>tem))
del "!b!"
ren "tem" "!h!")
exit
更多追问追答
追问
不行啊,这个速度还是不太理想,提速不是很多,主要还是因为我的文件太多,记录太多了,得选用能整列处理的算法,不能逐条记录修改呀!
追答
那就用下面的VBS来做吧,把这个VBS放到CSV文件夹下, 也可以更改getfolder 目录。
不过你这么多数据,怎么不用SQL来做呢?

Set FSO = CreateObject("Scripting.FileSystemObject")

set FF=FSO.getfolder(".") '当前文件夹

set FC=FF.files

dim objXl,objWork,sh

Set objXl=CreateObject("Excel.Application")

objXl.DisplayAlerts=FALSE

objXl.visible=FALSE

for each fl in FC
ext=Lcase(fso.GetExtensionName(fl))

if ext="csv" then

Set objWork=objXl.Workbooks.Open(fl,3,False)

Set sh = objWork.Sheets(1)

sh.Columns(3).Delete '删除第3行

objXl.Workbooks(1).Save

objWork.Close

end if

Next

objxl.quit

Set objXl=Nothing
Set objWork=Nothing
set sh=Nothing
set FC=nothing
set FF=nothing
Set FSO=nothing
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式