问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急求编一个batch用于批量提取文本中指定行及指定列的内容,并输出到新的文本中?

发布网友 发布时间:2022-04-22 08:36

我来回答

4个回答

热心网友 时间:2022-04-22 10:05

用vbs也比较好做 。我写了一个,你把代码拷贝下来,保存到txt文档中,再将文档的后缀名改成vbs,双击运行就可以了

我按你那个问题中要求又改了,肯定能满足要求

option explicit
dim iswrite
iswrite=0
call main
function main()
dim posinfo,pos,filestr
filestr=getfilestr()
posinfo=getpos("f:\pos.txt")
for each pos in posinfo
call showinfo(filestr,pos)
next
end function
function getfilestr()
dim fso,fread,str,linestr,userstr
set fso=createobject("scripting.filesystemobject")
dim filestr
filestr=inputbox("请输入文件绝对路径","获取文件路径","f:\a.txt")
set fread=fso.opentextfile(filestr,1)
str=fread.readall
fread.close
if str="" then
wscript.echo "文件为空"
wscript.quit
end if
set fso=nothing
getfilestr=str
end function

function showinfo(sourcestr,userinput)
dim userinfo,linenum,querystr,strarry,linestr
strarry=split(sourcestr,vbcrlf)
linenum=0
userinfo=split(userinput,",")
for each linestr in strarry
if linenum=cint(userinfo(0))-1 then
querystr="第"+userinfo(0)+"行,第"+userinfo(1)+"至"+userinfo(2)+"字符是 "+mid(linestr,cint(userinfo(1)),cint(userinfo(2))-cint(userinfo(1)))+vbcrlf
if iswrite=0 then
writedata("----------------------------------")
end if
call writedata(querystr)
end if
linenum=linenum+1
next
iswrite=1
end function

function writedata(querydata)
Dim fsobj, MyFile
Set fsobj = CreateObject("Scripting.FileSystemObject")
if fsobj.FileExists("f:\data.txt") then
set MyFile=fsobj.opentextfile("f:\data.txt",8)
else
Set MyFile = fsobj.CreateTextFile("f:\data.txt", false)
end if
MyFile.WriteLine(querydata)
MyFile.Close
end function

function getpos(path)
dim fsobj,posfile,posstr,posarry
set fsobj=CreateObject("Scripting.FileSystemObject")
if fsobj.fileexists(path) then
set posfile=fsobj.opentextfile(path,1)
else
set posfile=fsobj.createtextfile(path,false)
end if
posstr=posfile.readall
posarry=split(posstr,vbcrlf)
getpos=posarry
end function

说明:
1、脚本中用的是绝对路径
2、查找到的数据保存在f:\data.txt文档中,如果你想保存在其他文档或位置,直接改脚本就行,如果想通过对话框来做,可以改脚本
3、查询坐标保存在f:\pos.txt文件中,你把坐标写到pos.txt中就行了,坐标形式是例如
第一行 第13到19的字符
应该写成
1,13,19
每个坐标写在一行上
多个坐标就写成
1,13,19
2,13,19
3,13,19
4,13,19
就行了追问太好了,不过我还有最后几点要求:
1. 把输入文件路径的对话框去掉,程序执行中不应有任何对话框中断运行;
2. 输出文件的格式是:
数据1,数据2,数据3,...,数据n
3. 每次执行程序后把输出数据另起一行写入data.txt,也就是不应把先前data.txt中的数据替换掉,这个功能现在就有,直接换行就行,不需要----------------------------------。

追答option explicit
call main
function main()
dim posinfo,pos,filestr
filestr=getfilestr()
posinfo=getpos("f:\pos.txt")
for each pos in posinfo
call showinfo(filestr,pos)
next
call writedata(vbcrlf)
end function
function getfilestr()
dim fso,fread,str,linestr,userstr
set fso=createobject("scripting.filesystemobject")
set fread=fso.opentextfile("f:\a.txt",1)
str=fread.readall
fread.close
if str="" then
wscript.echo "文件为空"
wscript.quit
end if
set fso=nothing
getfilestr=str
end function

function showinfo(sourcestr,userinput)
dim userinfo,linenum,querystr,strarry,linestr
strarry=split(sourcestr,vbcrlf)
linenum=0
userinfo=split(userinput,",")
for each linestr in strarry
if linenum=cint(userinfo(0))-1 then
querystr=mid(linestr,cint(userinfo(1)),cint(userinfo(2))-cint(userinfo(1)))+","
call writedata(querystr)
end if
linenum=linenum+1
next
end function

function writedata(querydata)
Dim fsobj, MyFile
Set fsobj = CreateObject("Scripting.FileSystemObject")
if fsobj.FileExists("f:\data.txt") then
set MyFile=fsobj.opentextfile("f:\data.txt",8)
else
Set MyFile = fsobj.CreateTextFile("f:\data.txt", false)
end if
MyFile.Write(querydata)
MyFile.Close
end function

function getpos(path)
dim fsobj,posfile,posstr,posarry
set fsobj=CreateObject("Scripting.FileSystemObject")
if fsobj.fileexists(path) then
set posfile=fsobj.opentextfile(path,1)
else
set posfile=fsobj.createtextfile(path,false)
end if
posstr=posfile.readall
posarry=split(posstr,vbcrlf)
posfile.close
getpos=posarry
end function

按你的要求改完了,不过输出的数据每行会多一个逗号,懒得改了

热心网友 时间:2022-04-22 11:23

建一个二维数组,文本型 A(0,0)
读入每一行再进行文本分割,当前行加入一维数组,当前行的后面列数为二维数组

这样相当于有了坐标,如:
要取第一行第三列的值,即A [1,3]
再输出

热心网友 时间:2022-04-22 12:58

这种东西最好在linux终端下做 用cut 或者head tail 更高级的sed awk都可以很方便的完成。

windows的cmd不擅长这种东西

热心网友 时间:2022-04-22 14:49

你要用什么语言实现啊?追问用批处理就行

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕四个月补钙可以吗 孕妇吃什么时候钙片好 孕妇吃什么钙片最好 怀孕补钙是必须的吗?孕妇钙片品牌哪个好? ...在长高的黄金发育时期,会影响容貌五官的变化吗,不仅没有发育到变... 冬至吃饺子的诗词 立冬吃饺子的暖心诗词 宁波全封闭学校有哪些 宁波市北仑区小港镇会计学校在那? 或红联镇也可以 江南教育集团小港中心幼儿园园况介绍 红联哪里有报暑假班 关于钛管的知识 钛管的重量如何计算? 钛管1.9厘米直径厚0.05厘米每米有多重 直径25毫米壁厚2毫米钛管每米有多重 钛管直径12.7mm 壁厚0.6mm 请问怎么计算每米的重量 计算钛合金管的重量的公式 单元格内的钛管数据如何引用公式计算重量 钛管的理论重量计算公式? 求:钛管的重量计算方法? 石墨烯智能电热毯有什么功效? 请问,冠珠石墨烯智控发热砖是什么材料做的? 石墨烯岩板加热桌子是怎么制作 东鹏的石墨烯智暖岩板有没有人买过?想听听真实评价,感激不尽! 东鹏的石墨烯智暖岩板值得买吗?适合南方用吗? 东鹏的石墨烯智暖岩板怎么样,能发热多久? 九级伤残赔偿计算表 如何批量提取多个文本文件中的某几行到表格(PY或MATLAB)(文件名不连续)(可有现金报酬) AE相片问题 在WORD里面怎么设置英文自动纠错下划线 房屋买卖合同的有效条件是什么 32*3TA2钛管 最大承受压力多少MPa,有没有计算公式,CTRL+C & CTRL+V来的就不要浪费大家表情了 TA2钛管所承受的内压力是多少? 直径12.7mm厚度0.6mm的钛管怎样检验它的材质和辨别方法 25*2*300TA2钛管耐压是多少? 钛管和不锈钢管的区别 事业单位考勤制度领导需要执行吗 行政机关*管理制度 要比较详细的,能和考情制度结合在一起的! 如何完善考勤制度? 舞狮拜年打什么鼓点 我想学舞狮子打鼓 管家婆销售退换货单样式怎么设置出来, 深圳市怎么办理建筑专职安全员c证需要本人培训考试的吗?大概多少钱 地磅年检怎么网上申请 现在的QQ怎么退群 - 信息提示 我的电脑是惠普的,里面自带了一个酷越全程无忧,原装系统是win7,现在我想升win10? 硬质合金机械密封能耐多高温度的热水 360网站安全检测是不是不支持https的网站? 水管道泵正常使用的时候,机械密封能承受的温度在多少度算正常?水的温度在60度左右 水管道泵正常使用的时候,机械密封能承受的温度在多少