Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/27: Рейтинг темы: голосов - 27, средняя оценка - 4.85
pashgun
0 / 0 / 0
Регистрация: 07.02.2013
Сообщений: 5
1

Скопировать часть файла в середину другого файла

07.02.2013, 16:45. Просмотров 5355. Ответов 9
Метки нет (Все метки)

Добрый день, надеюсь на вашу помощь. Собственно проблема такая - можно ли, и если можно, то как осуществить копирование строк из одного текстового файла в определенное место второго ?

Добавлено через 6 часов 53 минуты
Окей, я немного продвинулся в своих попытках и могу чуть уточнить условия. Во втором файле необходимо удалить все строки, содержащие буквы и оставшееся содержимое вставить в конец первого файла. Послед этого в конце первого файла написать END. Так вроде проще, может кто-нибудь поможет ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 16:45
Ответы с готовыми решениями:

Скопировать определенную строчку из одного файла и вставить в определенную строчку другого файла
как можно скопировать первые несколько символов (букв) из определенной строки (например 5-ой)...

Как скопировать часть текста txt-файла в виде списка событий c условием - текущая дата? - BAT
Здравствуйте, уважаемые форумчане! Очень надеюсь на Вашу профессиональную помощь в следующей...

Перенос файлов в папки, имена которых содержат часть названия файла или расширение файла
Здравствуйте! Прочитал все похожие темы про ВАТ, но все в кучу сложить не смог, так как очень слабо...

Вставить N последних строк одного TXT-файла в конец другого TXT-файла
Здравствуйте, подскажите пожалуйста, как можно скопировать n последних строк одного тхт файла и...

Запуск cmd файла с определенного места в его коде из другого cmd файла
Здравствуйте. Требуется команда для запуска батника с метки внутри него, а не с первой команды в...

9
Badger
91 / 91 / 4
Регистрация: 25.06.2012
Сообщений: 278
07.02.2013, 17:23 2
Может проще будет найти то, что Вам нужно вставить в конец другого файла?
0
pashgun
0 / 0 / 0
Регистрация: 07.02.2013
Сообщений: 5
07.02.2013, 17:32  [ТС] 3
C первой задачей вроде разобрался вот таким корявым способом, уверен, что можно сделать это красивее.
Во втором файле, кроме всех строк, содержащих буквы необходимо удалить несколько строк с цифрами, но между этими цифрами стоит по пять пробелов, в строках с буквами (кроме строк со словом COMPOSITION) также есть пять пробелов, так что я вышел из ситуации так:
Bash
1
2
3
find /V "     "  po1 >> 1.txt
find /V "COMPOSITION"  1.txt >> model
del 1.txt
model это исходный файл, в который необходимо было скопировать нужные цифровый строки. Проблемой стало то, что при копировании окончательного содержимого без букв из файла 1.txt в model копировалось также и название первого файла в виде "-------- 1.TXT" Обошел это я тем же способом:
Bash
1
2
find /V "----------" model >> model2
del model
при этом название предидущего файла "-------- model" оказалось в начале файла model2, что не мешает работе.
Извините, что так путанно получилось) Уверен, что можно все сделать проще.

Осталось только в конец файла model2 вставить "END" )

Добавлено через 4 минуты
Цитата Сообщение от Badger Посмотреть сообщение
Может проще будет найти то, что Вам нужно вставить в конец другого файла?
Сначала думал об этом, но нужные мне строки для копирования это несколько сотен блоков вот такого вида:

0.74804E-02 0.17253E-04 0.96287E-03 0.41577E-03 0.98538E-04 0.77108E-04 0.13738E-05 0.19701E-04 0.10134E-04 0.18362E-06
0.46545E-05 0.10485E-05 0.12419E-05 0.39887E-06 0.38168E-06 0.97072E-08 0.30389E-03 0.18790E-01 0.65330E-02 0.16070E-01
0.24940E-02 0.35930E-04 0.16480E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.45400E-04 0.76820E-04.

Которые еще разделены между собой строкой с текстом.
0
Badger
91 / 91 / 4
Регистрация: 25.06.2012
Сообщений: 278
07.02.2013, 17:40 4
Цитата Сообщение от pashgun Посмотреть сообщение
Осталось только в конец файла model2 вставить "END" )
Bash
1
echo "END" >> model2
1
07.02.2013, 17:40
Eva Rosalene
Ladybug
4057 / 1595 / 304
Регистрация: 06.01.2013
Сообщений: 4,190
Завершенные тесты: 2
07.02.2013, 19:49 5
Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
Setlocal enabledelayedexpansion
Set file1=file.txt
Set file2=file2.txt
For /f "usebackq tokens=*" %%a IN ("!file2!") DO (
 Set /a math=%%a
 If not "%%a"=="0" (
  If not !math!==0 (Echo %%a>>"!file!")
 ) else (Echo %%a>>"!file!")
)
Echo End>>"!file!"
Добавлено через 1 минуту
Стоп, в твоем файле в нужных тебе строках все-таки есть буквы?
1
pashgun
0 / 0 / 0
Регистрация: 07.02.2013
Сообщений: 5
08.02.2013, 11:04  [ТС] 6
Цитата Сообщение от FraidZZ Посмотреть сообщение
Добавлено через 1 минуту
Стоп, в твоем файле в нужных тебе строках все-таки есть буквы?
Нет, в нужных мне строках букв нет. Если совсем конкретно, то вот так выглядит начало второго файла:

Кликните здесь для просмотра всего текста

" EXTERNAL STORAGE PARAMETERS
2 10 1 4246 11 1 4246
ARRAY
165 11 0 0 26 165 28 1
QUANTITY OF ROWS
49 25
QUANTITY OF LAYERS = 89
OLD SOLUTION HAS THE FOLLOWING PARAMETERS:
FF= 0.99408E-04 CONVERGENCE OF CORRECTIONS TPOP= 0.14153E-01

COMPOSITION OF ZONE 1
0.74804E-02 0.17253E-04 0.96287E-03 0.41577E-03 0.98538E-04 0.77108E-04 0.13738E-05 0.19701E-04 0.10134E-04 0.18362E-06
0.46545E-05 0.10485E-05 0.12419E-05 0.39887E-06 0.38168E-06 0.97072E-08 0.30389E-03 0.18790E-01"
0.65330E-02... "


Удалить нужно первые строчки (как видно, в них тоже есть несколько строк не содержащих буквы) и строки "COMPOSITION OF ZONE n".

Пока твой вариант не работает, попробую поразбираться. Спасибо.

Добавлено через 12 минут
P.S. В первых строках, которые нужно удалить, есть по пять пробелов (в скопированном тексте они убрались до одного), чем я и воспользовался в своем варианте. Соответственно в качестве признака для удаления ненужных строк можно оставить пять пробелов и слово "COMPOSITION"

Добавлено через 2 часа 3 минуты
Всё оказалось еще немного сложнее. Мой корявый способ работает, всё что нужно копируется в конец файла, END в конце стоит, но вдруг оказывается, что эти нужные строки надо вставить всё-таки не в конец первого файла, а в определенное место в середине. Если я правильно понимаю, то мне надо оставить в первом файле метку, выполнить ее поиск и после нее вставить нужные строки.
0
sov44
1761 / 745 / 128
Регистрация: 09.04.2011
Сообщений: 1,318
08.02.2013, 12:49 7
pashgun, довольно сложно понять, что хочется. Тут не приёмная телепатов. Прикрепите к посту образцы двух текстовых файлов: первый - что есть, второй - что надо.
0
pashgun
0 / 0 / 0
Регистрация: 07.02.2013
Сообщений: 5
08.02.2013, 13:39  [ТС] 8
Цитата Сообщение от sov44 Посмотреть сообщение
pashgun, довольно сложно понять, что хочется. Тут не приёмная телепатов. Прикрепите к посту образцы двух текстовых файлов: первый - что есть, второй - что надо.
Понимаю, сейчас попробую сформулировать еще раз.
У меня есть два файла: файл1 - входные данные для некой программы; и файл2, кусочек которого я привел в посте выше. Итого надо из файла2 выдернуть все строки вида
Кликните здесь для просмотра всего текста
0.74804E-02 0.17253E-04 0.96287E-03 0.41577E-03 0.98538E-04 0.77108E-04 0.13738E-05 0.19701E-04 0.10134E-04 0.18362E-06
0.46545E-05 0.10485E-05 0.12419E-05 0.39887E-06 0.38168E-06 0.97072E-08 0.30389E-03 0.18790E-01 0.65330E-02 0.16070E-01
0.24940E-02 0.35930E-04 0.16480E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.45400E-04 0.76820E-04.

и вставить их в определенное место файла1, конкретно после строки "RO="


Программированием я раньше не занимался, поэтому у меня с этим очень не очень. На данный момент я нашел такое решение:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
:: вывод из файла2 строк не содержащих пять пробелов во временный файл 1.txt 
find /V "     "  file2 >> 1.txt
:: вывод из 1.txt строк не содержащих слов COMPOSITION 
find /V "COMPOSITION"  1.txt >> tmp
del 1.txt 
:: Получили то, что надо. Следующими манипуляциями убираем строку "------ 1.txt" (которая создается 
:: и передается автоматически) в начало файла, где она не мешает
find /V "----------"  tmp >> file1_tmp
del tmp
copy file1_tmp file1
del file1_tmp
:: Перед этим я заранее разбил файл1 на две части. В первой оставил всё до места после которого
:: нужно вставить строки из файла2. Вторую часть, которая должна идти после вставленных строк, 
:: я сохранил в файл temp. После того, как я вставил в файл1 нужные строки, копируется содержание
:: файла temp в конец файла1
type temp >> file1
Так всё работает, но есть очевидное неудобство в том, что надо разбивать файл1 на две части, чтобы потом собрать из них один рабочий файл. К тому же решение, когда я убираю строки с пятью пробелами, а потом строки со словом COMPOSITION не универсальное. В-общем буду разбираться дальше )
0
Eva Rosalene
Ladybug
4057 / 1595 / 304
Регистрация: 06.01.2013
Сообщений: 4,190
Завершенные тесты: 2
08.02.2013, 14:51 9
Цитата Сообщение от pashgun Посмотреть сообщение
0.74804E-02 0.17253E-04 0.96287E-03 0.41577E-03 0.98538E-04 0.77108E-04 0.13738E-05 0.19701E-04 0.10134E-04 0.18362E-06
Но здесь же есть буква Е!
1
pashgun
0 / 0 / 0
Регистрация: 07.02.2013
Сообщений: 5
08.02.2013, 15:21  [ТС] 10
Цитата Сообщение от FraidZZ Посмотреть сообщение
Но здесь же есть буква Е!
Чёрт, рили сорри, что путаю вас, народ. Я так привык обращаться с числами в таком формате, что просто вообще в упор не воспринял Е за букву. Да уж.
0
08.02.2013, 15:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 15:21

Как скопировать 2 последних по дате файла
Добрый день! Есть батник, который копирует из нужной папки один последний по дате файл: pushd...

Скопировать слова из одного файла в два другие
Здравствуйте. Не подскажите как можно в bat сделать так что бы он из первой строки брал 3 и 4 слово...

Скопировать некоторые значения из одного файла в другой
как сделать следуйщее в файле регистрация клиента.тхт ((тут )) создается имя клиента оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru