我有大约6GB的各种文本文件,这些文件有很多行,但每条记录都缺少逗号,因此所有数据都在1条记录中。我想创建一个批处理文件,我可以在每个"记录"的适当位置添加逗号。我希望添加逗号,然后将其导入数据库。
例如,文件的结构将如下所示。
IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc
每个字段都有一个我知道的唯一长度,并且它在所有文件之间是静态的。 例如
ID - 10 characters
NAME - 40 characters
ADDRESS - 30 characters
etc
这需要在新文件进入时持续运行,因此我希望能够为非技术人员提供他们可以运行的东西。 有什么快速的方法在bat文件中执行此操作?
答案 0 :(得分:1)
使用上面的示例。注意我们计算从0开始的字符,然后告诉集合使用从某个计数开始的字母,从那里计算字长。请参见底部的布局。
@echo off
setlocal enabledelayedexpansion
for /F "tokens=* delims=" %%a in (filename.txt) do (
set str=%%a
set id=!str:~0,2!
set na=!str:~2,4!
set add=!str:~6,7!
set ph=!str:~13,5!
set em=!str:~18,5!
set etc=!str:~23,3!
echo !id!,!na!,!add!,!ph!,!em!,!etc!
)
字符串中指定的字符为:
I D n a m e A D D R E S S p h o n e E M A I L e t c
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
ID从字符0开始,是2个字符,包括自身:~0,2
名称从字符2开始,长度为4个字符:~2,4
等。
对于许多文件,只需添加另一个循环作为主循环或提供文件列表。
答案 1 :(得分:1)
根据您提供的示例,这是一个快速的PowerShell命令,(尽管没有标记):
(GC 'Report.txt' | Select -First 1).Insert(10,',').Insert(51,',').Insert(82,',') > 'Fixed.txt'
需要Report.txt
的第一行......
10
个字符后插入,
40
个字符后插入,
30
个字符后插入,
...然后将完成的行输出到Fixed.txt
只需继续执行其他固定宽度列尺寸的.Insert(<number>,',')
序列,并确保您已根据具体情况更改了文件名。
修改强>
以下作为评论和后续编辑的更新应适用于文件中的所有行。
GC 'Report.txt' | % {($_).Insert(10,',').Insert(51,',').Insert(82,',')} | Out-File 'Fixed.txt'