Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения / 16 сообщений из 16, страница 1 из 1
08.12.2013, 05:02
    #38493105
BOGGART
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
авторБатник - прочитать текстовый файл и создать на его основе другой файл, меняя переменные среды в тексте на их значения
Почему-то подумал что батником будет удобнее, особенно если соберусь на юниксы или мак переносить всё.
С батниками имел дело на слабом уровне - просто не требовалось как-то особых финтов.

Допустим есть текстовый файл "name_template.ext".
В файле какое-то количество строк, в которых среди текста могут попадаться скобки < и >, а так же текст вида %WINDIR% и %RANDOM_VAR%
Необходим батник, который создаст (перезапишет) файл "name.ext", поменяв переменные в template на их значения, а если какой-то переменной не существует - тут два варианта - или генерировал ошибку, которою я могу отловить, или подставлял какое-то значение по умолчанию именно для этого места в тексте.

Поиск потихоньку даёт плоды, но вдруг можно сделать проще, а не как я начал.
...
Рейтинг: 0 / 0
08.12.2013, 07:36
    #38493120
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGARTно вдруг можно сделать проще, а не как я начал
Отличные примеры
...
Рейтинг: 0 / 0
08.12.2013, 08:38
    #38493123
BOGGART
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
Хреновые примеры, взять другую статью там же - на голову лучше: http://www.rsdn.ru/article/winshell/NTCommandProcessor.xml
Но это не ответ на вопрос "вдруг можно сделать проще".
...
Рейтинг: 0 / 0
08.12.2013, 09:14
    #38493126
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGARTвзять другую статью там же - на голову лучше
Молодец, умеешь пользоваться поиском.
Ищи дальше, вдруг готовое решение найдешь эдак через пару месяцев, может быть :)
...
Рейтинг: 0 / 0
08.12.2013, 09:27
    #38493131
BOGGART
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
Member "С0ВЕСТЬ"
"Если вам нечего написать по теме - не пишите вообще." ©
Решение и так уже почти дописано.

Как заставить ECHO выводить спецсимволы в файл (без кавычек вокруг)?
...
Рейтинг: 0 / 0
08.12.2013, 10:06
    #38493137
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGART Member "С0ВЕСТЬ"
"Если вам нечего написать по теме - не пишите вообще." ©
Решение и так уже почти дописано.

Как заставить ECHO выводить спецсимволы в файл (без кавычек вокруг)?

Может мне каждому студенту забесплатно курсовые писать?
Сессия однако, студентики забегали.
...
Рейтинг: 0 / 0
08.12.2013, 12:23
    #38493185
BOGGART
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
1) Учиться я закончил и давно. А подобное в институтах не проходят кстати.
2) Сессия в январе, во всяком случае когда учился было так.
3) Я писал всей группе и бесплатно.
4) Лично вас я ни о чём не просил. Говорю ещё раз: не хотите писать по делу - не пишите вообще. Пришли тут и ворчите, и ворчите.


Как заставить ECHO выводить спецсимволы в файл (без кавычек вокруг)?
Вопрос снимается, проблема была не в этом, при передаче через CALL некоторые последовательности символов крашились... Видимо он понимает ""<| как конвейер даже когда оно внутри внешних кавычек.
Хотел без ENABLEDELAYEDEXPANSION обойтись, видимо не получится. Жаль. Хотя в большинстве случаев наверное и не попадутся такие последовательности, надо будет посмотреть.
...
Рейтинг: 0 / 0
08.12.2013, 12:50
    #38493202
С0ВЕСТЬ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGART,

Наверное стал старым ворчуном.
А что и экранирование не помогает?
...
Рейтинг: 0 / 0
08.12.2013, 17:35
    #38493318
BOGGART
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
Экранирование чего? Строки приходят из внешнего файла, в общем случае вообще случайные символьные последовательности.
Вариант чтения строк без использования ENABLEDELAYEDEXPANSION мне чем-то понравился, решил использовать его, теперь видно что не подходит.
Переделал так:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@ECHO OFF&CLS
VERIFY OTHER 2>nul
SETLOCAL ENABLEDELAYEDEXPANSION
IF ERRORLEVEL 1 ECHO Не удается включить расширенную обработку
SET FILE_IN=test_template.xml
SET FILE_OUT=test.xml
SET FILE_LINE=
CALL set_variables.bat
DEL %FILE_OUT%
FOR /F "tokens=*" %%s IN (%FILE_IN%) DO (
	CALL SET "FILE_LINE=%%s"
	ECHO !FILE_LINE!
	ECHO !FILE_LINE!>>%FILE_OUT%
)
PAUSE


Часть багов пропала, новые добавились. Почему оно удваивает символы "^"? И куда девает табуляцию? Есть ли другие нативные способы перебора строк текстового файла кроме FOR?
эх... На freepascal было бы на 5 строк и без таких косяков...
...
Рейтинг: 0 / 0
09.12.2013, 14:39
    #38494113
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGARTЕсть ли другие нативные способы перебора строк текстового файла кроме FOR?
VBS
...
Рейтинг: 0 / 0
09.12.2013, 22:07
    #38494694
BOGGART
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
Весь смысл делать батником, а не на делфи/фрипаскале - в кросплатформенности! Какой VBS? =\
Нашёл более профильный форум, если и там не помогут ну его в баню батник этот, на экзешник который из того же bat можно вызвать минут 15 бы ушло...
...
Рейтинг: 0 / 0
09.12.2013, 22:12
    #38494698
zirra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGART> Весь смысл делать батником, а не на делфи/фрипаскале - в кросплатформенности! Какой VBS? =\
Какой-такой кроссплатформенный батник??? Ты с какого баобаба свалился головою вниз?..

Именно ФриПаскаль - единственно 100% кроссплатформенное...
--
Vladimir A.Bakhvaloff
E-Mail: zirra1969<bark>gmail<dot>com

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.12.2013, 07:07
    #38494907
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGARTВесь смысл делать батником, а не на делфи/фрипаскале - в кросплатформенности! Какой VBS? =\
)) и что же кросплатформенного в батнике???
vbs тот же "батник", только исполняется он не через cmd, а сscript виндовым.
ну не спорю, я б тоже вот в соседней теме задачу бы на cpp минут за 30 нарисовал
создаешь текстовый файл с расширением .vbs, копипастишь туда мой пример и куришь его, 2 раза мышкой ткнуть уж ума надеюсь у тебя хватит.
Код: powershell
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
if Wscript.Arguments.Count = 0 then
	WScript.Echo "Необходимо указать хотя бы имя файла"
	WScript.Quit 1
end if

filename = WScript.Arguments.Named.Item("filename")

Set fso = CreateObject("Scripting.FileSystemObject")

if fso.FileExists(filename) then
	Set fr = fso.OpenTextFile(filename, 1, false)
else
	WScript.Echo "Файл не существует"
	WScript.Quit 1
end if

summa = 0.0
Do Until fr.AtEndOfStream
	buff = fr.ReadLine
	if Left(buff, 1) <> "#" then
		arr = Split(buff, ";")
		summa = summa + CCur(arr(7))
	end if
Loop
fr.Close()

Set sr = CreateObject("ADODB.Stream")
sr.Type = 2
sr.Charset = "cp866"
sr.Open
sr.LoadFromFile(filename)
Set sw = CreateObject("ADODB.Stream")
sw.Type = 2
sw.Charset = "cp866"
sw.Open

bEnd = true
Do Until sr.EOS
	buff = sr.ReadText(-2)
	if bEnd then
		if Left(buff, 1) <> "#" then
			sw.WriteText("#NOTE " + FormatNumber(summa,2,vbTrue,vbFalse,vbFalse) + vbCrLf)
			bEnd = false
			WScript.Echo summa
		end if
	end if
	sw.WriteText(buff + vbCrLf)
Loop
sr.Close
sw.SaveToFile filename+".note", 2
sw.Close
...
Рейтинг: 0 / 0
10.12.2013, 07:29
    #38494911
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
BOGGARTПочему-то подумал что батником будет удобнее, особенно если соберусь на юниксы или мак переносить всё.

)) не смеши мои подковы, /bin/*sh рядом не стоял с твоим cmd
к слову - смотрел тут как на бате сделали МОРСКОЙ БОЙ, так там АССЕМБЛЕРНЫЕ ВСТАВКИ используются на виндовом компиляторе.
хочешь маломальской кроссплатформенности - JavaScript с виндовым обрубком в виде JScript тебе в помощь.
...
Рейтинг: 0 / 0
10.12.2013, 08:29
    #38494940
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
вот тебе тоже самое в JScript (файл с расширением .js так же выполняемый из командной строки), так интереса ради переделал
Код: javascript
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
if (WScript.Arguments.Count() == 0) {
	WScript.Echo("Необходимо указать хотя бы имя файла");
	WScript.Quit(1);
}

filename = WScript.Arguments.Named.Item("filename");

var fso = new ActiveXObject("Scripting.FileSystemObject");

if (fso.FileExists(filename))
	var fr = fso.OpenTextFile(filename, 1, false);
else {	
	WScript.Echo("Файл не существует");
	WScript.Quit(1);
}

var buff = "";
var summa = 0.0;
while (!fr.AtEndOfStream) {
	buff = fr.ReadLine();
	if (buff.charAt(0) != "#") {
		arr = buff.split(";");
		summa = summa + parseFloat(arr[7]);
	}
}
fr.Close();

var sr = new ActiveXObject("ADODB.Stream")
sr.Type = 2
sr.Charset = "cp866"
sr.Open
sr.LoadFromFile(filename)
var sw = new ActiveXObject("ADODB.Stream")
sw.Type = 2
sw.Charset = "cp866"
sw.Open

bEnd = true
while (!sr.EOS) {
	buff = sr.ReadText(-2);
	if (bEnd) {
		if (buff.charAt(0) != "#") {
			sw.WriteText("#NOTE " + summa.toFixed(2) + "\r\n");
			bEnd = false;
		}
	}
	sw.WriteText(buff + "\r\n");
}
sr.Close();
sw.SaveToFile(filename+".note", 2);
sw.Close();

WScript.Echo(summa);
...
Рейтинг: 0 / 0
10.12.2013, 08:32
    #38494943
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения
субъективно VBS выполняется быстрее JS
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / Батник - прочитать текстовый файл,создать на его основе файл,меняя переменные на значения / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]