2012-02-25 2 views
3

У меня есть текстовый файл с данными нижеКак создать массив из txt-файла в пакетном файле?

aaaa 1000 2000 
bbb 3000 4000 
cccc 5000 
ddd 6000 7000 8000 

количество строк в этом файле не являются фиксированными.

Мне нужен первый токен каждой строки в массиве и печать каждого элемента.

+1

Может ли Windows/DOS пакетный файл даже делать * массивы? Я имею в виду, я представляю, что сценарий PowerShell может их выполнять, но CMD? – cHao

+0

@cHao Ниже ссылки дают некоторый намек на массивы в пакетном файле, но я не могу это понять очень много. [http://jakash3.wordpress.com/200/2009/12/18/arrays-in-batch/] [http : //www.robvanderwoude.com/battech_array.php] – NewQueries

+1

Я не понимаю, почему кто-то считает, что комментарий cHao выше - отличный комментарий; он просто показывает свое незнание возможностей CMD Batch! ;) – Aacini

ответ

12

Для создания массива:

setlocal EnableDelayedExpansion 

set i=0 
for /F %%a in (theFile.txt) do (
    set /A i+=1 
    set array[!i!]=%%a 
) 
set n=%i% 

Для печати элементов массива:

for /L %%i in (1,1,%n%) do echo !array[%%i]! 

Если вы хотите передать имя массива и длину в качестве параметров подпрограммы, а затем использовать этот путь:

call theSub array %n% 

:theSub arrayName arrayLen 
for /L %%i in (1,1,%2) do echo !%1[%%i]! 
exit /B 
+0

Спасибо @Aacini Я попробую это в своей программе! – NewQueries

2

попробовать это:

@echo off 
for /F "tokens=1,2*" %%x in (myFile.txt) do echo %%x 

двойной % требуется для использования в пакетном файле, но вы можете проверить его на CMD линии с одиночными % с.

в двух словах, for будет перебирать myFile.txt, разбивая каждую строку на два токена, используя разделитель по умолчанию (пробел).

+0

Спасибо @akf, но мне нужно создать массив и передать его в другую подпрограмму, где я могу получить каждый из своих элементов по отдельности. – NewQueries

0

попробуйте это и назовите его из любого места

@echo off 

for /f "usebackq" %%a in ('%2') do set d=%%~a 
for /f "usebackq tokens=* delims=%d%" %%G in ('%3') do set %1=%%~G 

set /a i=-1 


for %%h in (!%1!) do (
set /a i+=1 
set %1[!i!]=%%h 
) 
+3

Хотя это может быть ответ, он кажется очень похожим на другие более старые ответы. Отвечая на старый вопрос, который уже имеет принятый ответ, вам нужно добавить дополнительную дополнительную новую информацию и объяснить, почему ваш новый ответ полезен. – AdrianHHH

Смежные вопросы