Добавить строку в начало текстовых файлов
Подскажите решение моей проблемы... В папке имеется несколько текстовых файлов, нужно, чтобы в начало каждого файла добавилась нужная мне строка.
решение примерно такое: http://forum.oszone.net/thread-187587.html только нужно, чтобы строка вставлялась не в конец, а в начало
|
greg zakharov |
22-05-2017 19:44 2738744 |
Если не усложнять, то в простейшем случае решение может быть таким:
Код:
@echo off
setlocal enabledelayedexpansion
set "i=1"
set "arr.0=first string"
for /f "tokens=*" %%i in (file.txt) do (
set "arr.!i!=%%i"&set /a "i+=1"
)
set /a "i-=1"
cd.>file.txt
for /l %%i in (0, 1, !i!) do (
for /f "tokens=1,* delims==" %%j in (
'set arr.%%i'
) do echo:%%k>>file.txt
)
endlocal
exit /b
По-настоящему же крутым решение будет если "склеить" строку, которую необходимо вставить, с текстом "на лету", то есть перенаправив вывод в один из стандартных потоков консоли; правда придется задействовать con, но для начала разберитесь с примером выше, а дальше посмотрим.
|
Если приемлемо использование сторонних утилит, то простой примерчик будет выглядить так:
Код:
for %%i in (*.txt) do sed -i -e "1 s/^/нужная_Мне_строка\n/;" %%i
|
Код:
@Echo Off
Set "Mask=Z:\Box_In\*.txt"
Set "Str=Нужная мне для вставки в начало текстового файла строка"
FOR %%f IN ("%Mask%") DO (
(Echo %Str% &More "%%f")>"%%f.tmp"
Move /Y "%%f.tmp" "%%f" >nul
)
Даже в этом решении возможны проблемы при наличии спецсимволов в тексте.
Если не принципиально, решение лучше сделать посредством .vbs-скрипта.
|
All
как же вы любите все усложнять...
COPY /? и обращаем внимание на символ "+" в выводе справки. Дальше в принципе все очевидно.
|
y--,
Код:
@Echo Off
Set "BoxIn=Z:\Box_In"
Set "Mask=*.txt"
Set "Str=Нужная мне для вставки в начало текстового файла строка"
>"%BoxIn%\%~nx0.tmp" (Echo %Str%)
FOR %%f IN ("%BoxIn%\%Mask%") DO (
Copy /B "%BoxIn%\%~nx0.tmp"+"%%f" "%%f.tmp">nul
Move /Y "%%f.tmp" "%%f" >nul
)
del "%BoxIn%\%~nx0.tmp"
|
greg zakharov |
23-05-2017 09:32 2738867 |
Цитата:
Цитата y--
как же вы любите все усложнять...
|
А Вы утрировать. Вообще вполне ожидаемо было услышать про copy, команду имеющую довольно много побочных эффектов, к тому же для объединения файлов требуется создать отдельный файл (и как следствие отдельный поток), в то время, когда проще использовать потоки уже существующего файла. Но, как уже было верно подмечено, в командном языке непременно возникнут проблемы со спецсимволами и кодировками. Ну а если речь идет все же о командномм языке, то можете помедитировать над следующим.
Код:
rem тестовый файл для вставки строки
E:\src> more < con > test.txt
string 1
string 2
^Z
rem смотрим что получилось
E:\src> type test.txt
string 1
string 2
rem строку, которую нужно вставить, пишем в ADS
E:\src> echo:required string>test.txt:stream1
rem убеждаемся что содержимое файла не изменилось
E:\src> type test.txt
string 1
string 2
rem и что в созданном потоке хранится строка для вставки
E:\src> streams test.txt
E:\src\test.txt:
:stream1:$DATA 17
E:\> more < test.txt:stream1
required string
rem переносим строки из основного потока в созданный ADS
E:\> type test.txt>>test.txt:stream1
E:\> more < test.txt:stream1
required string
string 1
string 2
rem выводим ADS в основной поток
E:\> more < test.txt:stream1 > test.txt
E:\> type test.txt
required string
string 1
string 2
rem убеждаемся, что ADS при перезаписи основного потока был удален
E:\> streams test.txt
|
greg zakharov
не вопрос - исходник - текстовый файл на 1 миллион строчек, каждая из которых представляет собой один единственный символ.
Сравни быстродействие методов... и тогда понятно станет утрирую я или нет.
|
greg zakharov |
23-05-2017 12:50 2738927 |
Цитата:
Цитата y--
Сравни быстродействие методов... и тогда понятно станет утрирую я или нет.
|
Мы на брудершафт не пили, так что запанибратство, пожалуйста, оставьте при себе. Это во-первых. Во-вторых, кто в зравом уме и трезвой памяти станет создавать файл в миллион строк с одним единственным символом в каждой из оных? В-третьих, быстро не является синонимом хорошо, и если бы Вы удосужились разобрать исходный код copy, вряд ли стали раздавать столь порочные советы. Впрочем, людям свойственно очаровываться вещами оставляющими желать лучшего. Удачи!
|
greg zakharov, Если приземлённо вникнуть в постановку и рассуждать без эмоций в деловом стиле, то возникает вопрос: а где решение поставленной задачи?
Цитата:
Цитата method777
В папке имеется несколько текстовых файлов, нужно, чтобы в начало каждого файла добавилась нужная мне строка. »
|
Цитата:
Цитата greg zakharov
Если не усложнять, то в простейшем случае решение может быть таким: »
|
Даже для одного файла это сомнительное решение. После работы Вашего скрипта исходный файл может быть сильно искажен
А вот этот файл file.txt вообще обрабатывается криво
Код:
1 Варкалось!
Хливкие шорьки пырялись по наве!
И хрюкотали зелюки
Как мюмзики в мове!
2 Ехала деревня мимо мужика
Вдруг из-под собаки
Лают ворота!
3 Выбежала бабка с палкою в руке
4
Начала дубасить
Коня на мужике!
5
Лошадь ела сало,
А мужик овёс!
6
Лошадь села в сани,
А мужик повёз
Цитата:
Цитата greg zakharov
можете помедитировать над следующим. »
|
А реальное решение где?
|
greg zakharov,
Уважамый - по-видимому Вы таки не в состоянии оценить быстродействие(по-видимому потому что создание тестового файла на 1 миллион строк для Вас также представляет определенные трудности).
Засим - с Вами(как минимум до брудершафта) обсуждать основную тему этого топика безсмысленно - бай...
|
greg zakharov |
23-05-2017 21:31 2739103 |
Если не переходить на личности, можно констатировать факт наличия довольно большого количества дегенератов на форуме.
|
Время: 19:47.
© OSzone.net 2001-