Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Цикл FOR помогите понять синтаксис... (http://forum.oszone.net/showthread.php?t=182501)

RUVATA 09-08-2010 14:39 1470022

Цикл FOR помогите понять синтаксис...
 
Задача-считывать построчно данные из txt файла (иметь возможность в нем ориентироваться, не только построчно, но и в пределах строки)
сохранять полученные значения в переменных, а так-же собственно запись в текстовый файл (здесь уже проще, но никак не могу врубиться как сделать это в пределах цикла)

справка - темный лес...

как из цикла сохранять полученные значения в переменные, вернее что они сохраняются я понял - где и по какой логике? надо-ли их заранее объявлять? циклический заполняемый динамический массив - это в cmd реально?

%% - что это за переменные, это счетчик, или что это?

Я вот такое наваял - соответственно не работает
пожалуйста поправьте там где в рассуждениях ошибаюсь, или в синтаксисе
Код:

for /f "tokens=*" %%i in (text.txt) do echo i%% & i%% >> new.txt
Код:

"tokens=*"
- этот параметр определяет, что с каждой строки захватывается только по одному слову. в тандеме со skip(пропуск) и другими - условия чтения.
Код:

%%i in (text.txt)
чтение выполнять в из файла (text.txt) в переменную %%i
Код:

do
- оператор указывающий на циклические инструкции
Код:

echo i%%
- отобразить значение i% на текущем шаге цикла (кстати - где счетчик, где шаг цикла выставляется?)
Код:

& i%% >> new.txt
- дописать значение i%% к файлу (new.txt) уже существующему, хотя в идеале, хотелось бы на первом шаге создать, а потом дописывать... но решил пока сюда IF Else не впутывть, и так ничего не понятно.

gora 09-08-2010 15:12 1470050

Цитата:

Цитата RUVATA
for /f "tokens=*" %%i in (text.txt) do echo i%% & i%% >> new.txt »

Переменные нужно записывать правильно, а не абы как.
Код:

for /f "tokens=*" %%i in (text.txt) do echo %%i & echo %%i>> new.txt
Цитата:

Цитата RUVATA
справка - темный лес... »

Да ленитесь Вы читать. ИМХО

Цитаты из справки:
Цитата:

FOR /F ["ключи"] %переменная IN (набор) DO команда [параметры]
...
Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются.
Необязательный параметры "ключи" служит для переопределения заданных по умолчанию правил обработки строк. Ключи представляют собой заключенную в кавычки строку, содержащую указанные параметры. Ключевые слова:

eol=c - определение символа комментариев в конце строки (допускается задание только одного символа).
skip=n - число пропускаемых при обработке строк в начале файла.
delims=xxx - определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции.
tokens=x,y,m-n - определение номеров подстрок, выделяемых из каждой строки файла и передаваемых для выполнения в тело цикла. При использовании этого ключа создаются дополнительные переменные. Формат m-n представляет собой диапазон подстрок с номерами от m по n. Если последний символ в строке tokens= является звездочкой, создается дополнительная переменная, значением которой будет весь оставшийся текст в строке после обработки последней подстроки.
usebackq - применение новой семантики, при которой строки, заключенные в обратные кавычки, выполняются как команды, строки, заключенные в прямые одиночные кавычки, являются строкой литералов команды, а строки, заключенные в двойные кавычки, используются для выделения имен файлов в списках имен файлов.

Поясняющий пример:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j - для третьей, а %k получает все оставшиеся подстроки после третьей.
Цитата:

Цитата RUVATA
Код:
"tokens=*"- этот параметр определяет, что с каждой строки захватывается только по одному слову. в тандеме со skip(пропуск) и другими - условия чтения. »

Это означает, что в переменную цикла (%%i) будет включена ВСЯ строка целиком.
Цитата:

Цитата RUVATA
echo i%%- отобразить значение i% на текущем шаге цикла (кстати - где счетчик, где шаг цикла выставляется?) »

Выводит в окно консоли значение переменной (%%i). Счетчика цикла здесь нет (цикл будет повторятся пока не кончится разбор всего файла text.txt), а шаг - одна строка этого файла. Переменная записана неправильно
Цитата:

Цитата RUVATA
Код:
& i%% >> new.txt- дописать значение i%% к файлу (new.txt) уже существующему »

Почти правильно, только забыли команду Echo и переменная записана неправильно.

RUVATA 09-08-2010 15:41 1470068

Цитата:

Цитата gora
Почти правильно, только забыли команду Echo и переменная записана неправильно. »

а где необходимо использовать echo?

gora 09-08-2010 15:53 1470078

Цитата:

Цитата RUVATA
а где необходимо использовать echo? »

Выделено зеленым
Код:

for /f "tokens=*" %%i in (text.txt) do echo %%i & echo %%i>> new.txt


Время: 13:35.

Время: 13:35.
© OSzone.net 2001-