【问题标题】:Batch: Parse TXT Lines into Array批处理:将 TEXT 行解析为数组
【发布时间】:2015-08-04 20:23:40
【问题描述】:

我希望将 TXT 文件中的行读取到数组结构中,以便在我正在使用的批处理文件中使用(读取当前硬编码的配置元素)。

一些注释/假设:

  1. .TXT 文件与 .BAT 文件位于同一目录
  2. 只有 2 列要解析,行数未知
  3. Col1 & Col2 数据可以包含空格,但不能包含特殊字符
  4. .TXT 文件的格式/分隔符可以是任何方便此任务的内容: 例如:Col1 | Col2

我只是在寻找一些建议来帮助我入门。

谢谢!

标记

【问题讨论】:

  • 注意,虽然有模拟数组的方法,但批处理不支持数组。
  • @aphoria 说了什么。您需要澄清“进入数组结构”的含义,因为批处理没有任何内置的“数组”概念。
  • @MarkPelletier:见this post。 @其他人:假设这个命令:set /A result=2+3。如您所知,批处理不支持数字变量,也没有任何内置的“数字”概念,所以存储在result变量中的数字5是“模拟”数字还是“模拟”数字?因为根据您的观点,它不是“真正的”五号!
  • @rojo:我只想指出,例如,当有人要求“批处理算术运算”时,没有人回答:“批处理不支持数字或算术运算,虽然有办法模拟他们喜欢/A switch of set command”,但很多人坚持要明确关于数组的观点。为什么?另请注意,可以在“支持数组”的编程语言中实现的所有操作也可以在批处理中(以一种或其他方式)实现。底线:我看不出频繁澄清“批处理不支持数组”的用处。
  • 同意。我也没有。这是一个迂腐的论点,无法解决提问者试图解决的问题。我想我理解你的愤怒。我对那些评论“你应该使用 Powershell”但从未真正提供解释为什么 OP 应该使用 Powershell 的人感到沮丧。不,Bill_Stewart,Powershell 不是弥赛亚。无论问题如何,它并不总是答案。

标签: batch-file


【解决方案1】:

二维数字索引数组的模拟:

textfile.txt的内容:

var 1,val 1
var 2,val 2
var 3,val 3

test.bat的内容:

@echo off
setlocal enabledelayedexpansion

set idx=0

for /f "usebackq tokens=1* delims=," %%I in ("textfile.txt") do (
    set "var[!idx!][0]=%%~I"
    set "var[!idx!][1]=%%~J"
    set /a idx += 1
)

set var

结果输出:

var[0][0]=var 1
var[0][1]=val 1
var[1][0]=var 2
var[1][1]=val 2
var[2][0]=var 3
var[2][1]=val 3

或者您可以模拟关联数组,如果您正在处理配置数据,其键值对格式可能更有意义。

关联数组的模拟:

textfile.txt的内容:

key 1=val 1
key 2=val 2
key 3=val 3

test.bat的内容:

@echo off
setlocal

for /f "usebackq tokens=1* delims==" %%I in ("textfile.txt") do (
    set "config[%%~I]=%%~J"
)

set config

结果输出:

config[key 1]=val 1
config[key 2]=val 2
config[key 3]=val 3

【讨论】:

  • 罗霍,这是一个美妙的开始!您的模拟的两种变体都可以满足我的需求。我会稍微修改一下,看看哪个提供最合适的。我会报告任何发现或调整。谢谢!。 - 标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
相关资源
最近更新 更多