PDA

Показать полную графическую версию : Цикл FOR помогите понять синтаксис...


RUVATA
09-08-2010, 14:39
Задача-считывать построчно данные из 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
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справка - темный лес... »
Да ленитесь Вы читать. ИМХО

Цитаты из справки: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 получает все оставшиеся подстроки после третьей.Код:
"tokens=*"- этот параметр определяет, что с каждой строки захватывается только по одному слову. в тандеме со skip(пропуск) и другими - условия чтения. »
Это означает, что в переменную цикла (%%i) будет включена ВСЯ строка целиком.echo i%%- отобразить значение i% на текущем шаге цикла (кстати - где счетчик, где шаг цикла выставляется?) »
Выводит в окно консоли значение переменной (%%i). Счетчика цикла здесь нет (цикл будет повторятся пока не кончится разбор всего файла text.txt), а шаг - одна строка этого файла. Переменная записана неправильноКод:
& i%% >> new.txt- дописать значение i%% к файлу (new.txt) уже существующему »
Почти правильно, только забыли команду Echo и переменная записана неправильно.

RUVATA
09-08-2010, 15:41
Почти правильно, только забыли команду Echo и переменная записана неправильно. »
а где необходимо использовать echo?

gora
09-08-2010, 15:53
а где необходимо использовать echo? »Выделено зеленым
for /f "tokens=*" %%i in (text.txt) do echo %%i & echo %%i>> new.txt




© OSzone.net 2001-2012