如何按批处理文件中的字符数拆分字符串?

时间:2017-11-29 20:16:04

标签: windows batch-file split batch-processing

我有大约6GB的各种文本文件,这些文件有很多行,但每条记录都缺少逗号,因此所有数据都在1条记录中。我想创建一个批处理文件,我可以在每个"记录"的适当位置添加逗号。我希望添加逗号,然后将其导入数据库。

例如,文件的结构将如下所示。

IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc

每个字段都有一个我知道的唯一长度,并且它在所有文件之间是静态的。 例如

ID - 10 characters
NAME - 40 characters
ADDRESS - 30 characters
etc  

这需要在新文件进入时持续运行,因此我希望能够为非技术人员提供他们可以运行的东西。 有什么快速的方法在bat文件中执行此操作?

2 个答案:

答案 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的第一行......

  1. 10个字符后插入,
    (0 + 10 = 10)+ 1
  2. 在另外40个字符后插入,
    (11 + 40 = 51)+ 1
  3. 在另外30个字符后插入,
    (52 + 30 = 82)+ 1
  4. ...然后将完成的行输出到Fixed.txt

    只需继续执行其他固定宽度列尺寸的.Insert(<number>,',')序列,并确保您已根据具体情况更改了文件名。

    修改

    以下作为评论和后续编辑的更新应适用于文件中的所有行。

    GC 'Report.txt' | % {($_).Insert(10,',').Insert(51,',').Insert(82,',')} | Out-File 'Fixed.txt'