我有一些固定行大小的文件,固定字段大小,我需要从中提取信息.Nornmally,我会使用Cygwin(cut等人),但在这种情况下,由于(骨头)管理策略我无法改变,因此不是一个选项.它具有使用包含在Windows XP的标准工具集来完成.
我需要在偏移22(从零开始)提取偏移7和4个字符的10个字符,并将它们输出到文件但稍微扭曲:
例如:
1 2 3 <- ignore (these lines not in file,)
0123456789012345678901234567890123456789 <- ignore ( here only for info.)
xxxxxxx 15.22-yyyyyABCDzzzzzzzzzzz...
xxxxxxx 122.00+yyyyy XX zzzzzzzzzzz...
xxxxxxx 9yyyyyYYY zzzzzzzzzzz...
Run Code Online (Sandbox Code Playgroud)
应该产生(<表示行尾):
-15.22,ABCD<
122.00,XX<
9,YYY<
Run Code Online (Sandbox Code Playgroud)
如果您使用现代窗口,本机不限于cmd.exe命令,您可以使用vbscript.如果您的政策也不使用vbscript,那么我想你应该解雇你的管理:)
Set objFS=CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file"
Set objFile = objFS.OpenTextFile(strFile)
strFirstLine = objFile.ReadLine
Do Until objFile.AtEndOfStream
strLine= objFile.ReadLine
var1 = Mid(strLine,10) ' do substring from position 10 onwards
' var2 = Mid (strLine,<pos>,<length>) ' get next offset and save to var2
WScript.Echo var1 & var2 ' print them out.
Loop
Run Code Online (Sandbox Code Playgroud)
基本上,要"剪切"字符串的字符,可以使用Mid()函数.请查看vbscript文档以了解更多信息.
将上面保存为test.vbs,并在命令行上执行
c:\test> cscript /nologo test.vbs > newfile
Run Code Online (Sandbox Code Playgroud)
当然,"substring"也可以用纯cmd.exe完成,但我会留给其他人来指导你.
由Pax更新:根据这个答案,我提出了以下这将是一个良好的开端:
option explicit
dim objFs, objFile, strLine, value1, value2
if wscript.arguments.count < 1 then
wscript.echo "Usage: process <input-file>"
wscript.quit
end if
set objFs=createObject("Scripting.FileSystemObject")
set objFile = objFs.openTextFile(wscript.arguments.item(0))
do until objFile.atEndOfStream
strLine= objFile.readLine
value1 = trim(mid(strLine, 8, 10))
value2 = trim(mid(strLine, 23, 4))
if right(value1,1) = "-" then value1 = "-" & left(value1,len(value1)-1)
if right(value1,1) = "+" then value1 = left(value1,len(value1)-1)
if left(value1,1) = "+" then value1 = mid(value1,2)
wscript.echo value1 & "," & value2
loop
Run Code Online (Sandbox Code Playgroud)
这符合我们的所有要求.我们可以稍后将偏移量和长度转换为命令行参数.
结束更新.
这个站点有一些关于如何在cmd.exe中提取子串的指针:http://www.dostips.com/DtTipsStringManipulation.php
该网站建议您可以使用
%varname:~2,3%
Run Code Online (Sandbox Code Playgroud)
下标一个变量.这似乎可以满足您的需求,除非您现在必须将每一行都放入变量中.
接下来,您要查看可怕的for循环语法if和分支(您可以:labels批量转到).
这些东西都很难看,但如果你真的要去那里......
这是SO中的一个页面,用于循环遍历文件并对它们执行操作:如何使用Windows批处理文件循环文本文件中的每一行?
| 归档时间: |
|
| 查看次数: |
28349 次 |
| 最近记录: |