【问题标题】:How to split a string by amount of characters in a batch file?如何按批处理文件中的字符数拆分字符串?
【发布时间】:2018-05-13 15:36:59
【问题描述】:

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

例如,文件的结构是这样的。

IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc

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

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

随着新文件的出现,这需要持续运行,所以我希望我可以为非技术人员提供一些他们可以运行的东西。 有什么快速的方法可以在 bat 文件中执行此操作吗?

【问题讨论】:

  • 您可以使用SET 命令执行此操作。打开 cmd 提示符并输入:SET /? 以阅读用法。

标签: windows batch-file split batch-processing


【解决方案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 条记录,我的意思是每个文件都有很多没有逗号的记录。
  • @MrLahey 然后 xoncept 保持不变。我们只是从文件中读取。
【解决方案2】:

根据您提供的示例,这是一个快速的 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

...然后将包含插入的行输出到Fixed.txt

对于其他固定宽度的列大小,只需继续 .Insert(<number>,',') 序列,并确保您已更改文件名以适应您的情况。

编辑

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

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

【讨论】:

  • 这似乎工作得很好,但只有文件的第 1 行。我怎样才能让它通过每一行?
  • Lahey 先生,您的问题很具体,"various text files, each with a single record of data"
  • 对不起,我当时措辞不当。每行有 1 条长记录,但每个文件有很多记录。它就像一个删除了所有逗号的 CSV。我将编辑我的帖子。
  • Lahey 先生,我已经编辑了我的答案,以纳入您重新设计的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2021-05-20
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多