Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Циклическое повторение данных в файле

Ответить
Настройки темы
CMD/BAT - [решено] Циклическое повторение данных в файле

Старожил


Сообщения: 170
Благодарности: 5

Профиль | Отправить PM | Цитировать


Здравствуйте.
Помогите создать скрипт или батник.
...что требуется?
есть файл "A" размером, допустим, 208байт, нужно создать файл "B", гораздо большего размера, например 127139792байта , циклично заполненного содержимым из файла "A"
т.е. проще говоря повторить файл "A" 611249 раз в файле "B".
Подкиньте идею)
Всю голову сломал

Отправлено: 18:33, 17-01-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
>nul copy nul "b.txt" & for /l %i in (1, 1, 611249) do @>nul copy /b "b.txt"+"a.txt" "b.txt"
Сразу говорю, что этот подход категорически не эффективен — заморитесь ждать Ваших 127,139,792 результирующих байт. Но заниматься оптимизацией вычислений такой ерундой на пакетных файлах не вижу ни малейшего смысла.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:23, 17-01-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 170
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата Iska:
Сразу говорю, что этот подход категорически не эффективен — заморитесь ждать Ваших 127,139,792 результирующих байт. Но заниматься оптимизацией вычислений такой ерундой на пакетных файлах не вижу ни малейшего смысла. »
...то что нужно. Спасибо)

Отправлено: 19:36, 17-01-2019 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата Profile:
создать файл "B", гораздо большего размера, например 127139792байта , циклично заполненного содержимым из файла "A" »
если закрыть на это глаза, то проще конечно так:
Код: Выделить весь код
fsutil file createnew "B.txt" 127139792
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 17-01-2019 | #4


Старожил


Сообщения: 170
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата alpap:
если закрыть на это глаза, то проще конечно так: »
да!
но как его заполнить файлом A?)

Отправлено: 20:53, 17-01-2019 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Profile:
но как его заполнить файлом A?) »
Никак. Чудес не бывает.

На WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFile
Dim strDestFile

Dim strContent
Dim i


strSourceFile = "C:\Мои проекты\0238\a.txt"
strDestFile   = "C:\Мои проекты\0238\b.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
	If .FileExists(strSourceFile) Then
		With .OpenTextFile(strSourceFile)
			strContent = .ReadAll()
			.Close
		End With
		
		With .CreateTextFile(strDestFile, True)
			For i = 1 To 611249
				.Write strContent
			Next
			
			.Close
		End With
	Else
		WScript.Echo "Can't find source file [" & strSourceFile & "]."
		WScript.Quit 1
	End If
End With

WScript.Quit 0

Последний раз редактировалось Iska, 17-01-2019 в 23:02. Причина: Грубая описка

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:52, 17-01-2019 | #6


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата Iska:
На WSH »
до кучи на powershell:
Код: Выделить весь код
$cnt = 611249
$tmp = [io.file]::readalltext('a.txt',[text.encoding]::getencoding("windows-1251"))
#вариант для версии PoSh 3.0 и выше:
#$tmp = gc a.txt -raw -enc default
$str = new-object text.stringbuilder
for ($i = 0; $i -le $cnt; $i++){
	$null = $str.append($tmp)
}
$str.tostring()|sc b.txt -enc default
формируется примерно:
первичный запуск:
TotalSeconds : 16,5885417
повторный:
TotalSeconds : 5,4562804

конечно, скорость от железа может зависеть, но вполне приемлемое время, имхо.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 18-01-2019 в 10:27.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:28, 17-01-2019 | #7


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


YuS_2, я бы всё-таки вынес [io.file]::readalltext('a.txt') за пределы цикла. Понятно, что по сути повторное чтение будет идти из кэша, но всё же, всё же, всё же…

Цитата YuS_2:
формируется примерно:
TotalSeconds : 157,7945136 »
Что-то многовато. У меня на WSH — примерно 4-5 секунд занимает.

На мой взгляд, здесь лучше зараз писать в файл: конкатенация строк очень ресурсоёмкая операция.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:00, 17-01-2019 | #8


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
for /L %%i in (1, 1, 611249) do @type a.txt >> b.txt
Цитата YuS_2:
~12 мин формируется»
потому что вы шаблон с диска читаете 611249 раз
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:33, 17-01-2019 | #9

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Busla:
потому что вы шаблон с диска читаете 611249 раз »
Помнится, в бытность студеном на практических занятиях учились составлять программы на машине Мир-2 (транзисторные модули, перфолента, УВВ "Консул", язык — "русский бейсик").
Скрытый текст
Составили программку: тысячи циклов, включающих конструкция типа:

ЦИКЛ
...
ГДЕ A=3
ГДЕ B=5
...
КОНЦИКЛ

Чуем — что-то долго считает... Остановили, пустили на дальнейшее пошаговое исполнение с распечаткой каждого шага. Сначала ошалели, потом долго смеялись: 50% распечатки заняли строки
A=3
B=5

Ну заменили эти "ГДЕ" на константы, определив их перед циклом — и сразу программа задышала.

-------
Mikhail Zhilin


Отправлено: 00:26, 18-01-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Циклическое повторение данных в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Повторение двух и более команд ymo_4@vk Скриптовые языки администрирования Windows 1 01-12-2017 08:35
Разное - [решено] Словари иностранных слов в текстовом файле, или в базе данных. amask Программирование и базы данных 1 29-09-2016 20:37
PowerShell - [решено] Переменные из данных в txt файле breakfruit Скриптовые языки администрирования Windows 25 05-06-2015 17:10
Java - Сохранение введённых данных в отдельном файле mephistophel Программирование и базы данных 6 03-05-2012 21:41
C/C++ - [решено] Поиск данных в файле Luzuk Программирование и базы данных 5 05-11-2008 04:04




 
Переход