Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/54: Рейтинг темы: голосов - 54, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
1

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

27.06.2013, 11:19. Показов 10763. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как можно скопировать первые несколько символов (букв) из определенной строки (например 5-ой) modems.txt, далее найти в parametr.txt слово "volume=", удалить все что находится после слова "volume=" на этой строке, и вставить (после слова "volume=") слово найденное в modems.txt.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2013, 11:19
Ответы с готовыми решениями:

Запись массива в определенную строчку текстового файла
Здравствуйте. Имеется заполненный datadridview, например, со значениями: Солнце вышло из-за туч...

Нужно скопировать конкретную строчку из одного файла в другой
Есть файл, из него нужно скопировать, например, третью строчку в другой файл. Нашёл кучу вариантов...

Записать в конец файла строчку, из начала файла стереть строчку
Как из начала файла удалить первую строчку и в конец файла записать другую строчку, чтобы...

Как выбрать определенную строчку из БД?
Через цикл хочу занести все значения определенного столбца в listbox. Как правильно составить...

20
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
27.06.2013, 17:07 2
Не проверял.

Bash
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
54
@echo off
SetLocal EnableExtension EnableDelayedExpansion
 
::из файла
set src=modems.txt
::из определенной строки
set nLine=5
::первые несколько символов
set nChars=4
 
::куда
set dest=parametr.txt
::удалить все что находится после слова
set word=volume=
 
2>nul del "%dest%_"
 
::Получаем текст со строки с № nLine
For /f "delims=] tokens=1*" %%a in (
  'find /v /n "" ^< "%src%" ^| findstr /BC:"[%nLine%]"'
) do set str=%%b
 
::Урезаем до первых nChars символов
set str=!str:~0,%nChars%!
 
::Считаем общее кол-во строк в dest
for /f %%a in ('find /v /c "" ^<"%dest%"') do set Count=%%a
 
::Определяем номер строки с искомой фразой
For /f "delims=[] tokens=1" %%a in (
  'find /i /n "%word%" ^< "%dest%"'
) do set nWLine=%%a
 
set /A nLineFirstTo=nWLine - 1
 
::Создание маски Findstr для отсекания первых N строк (N = nWLine - 1)
For /L %%C in (1, 1, %nLineFirstTo%) do (
  set "txtmask=!txtmask!\[%%C\] "
)
 
::Отсекаем первые N строк и записываем в промежуточный файл
::Нумеруем строки, применяем маску фильтрации, отрабрасываем нумерацию циклом
for /f "delims=] tokens=1*" %%a in ('find /v /n "" ^<"%dest%" ^| findstr /B "%txtmask%" 2^>nul') do (
  Echo.%%b>>"%dest%_"
)
 
::Модифицируем найденную строку
echo %word%%str%>>"%dest%_"
 
::Дописываем последние строки. More ведет отсчет от нуля.
more +%nWLine% < "%dest%" > "%dest%_"
 
::Перемещаем сформированный файл на текущий
for %%a in ("%dest%") do move /y "%dest%_" "%%~nxa"
1
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 17:31  [ТС] 3
Что то тут не работает. Может так получится:
скопировать первое слово (например COM71) из определенной строки (например 5-ой) modems.txt, далее в parametr.txt на 5-ой (например) строке удалить все и вставить "volume=COM71".
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
27.06.2013, 19:11 4
Я точно так и делаю (должно быть ясно из комментариев).

Выложите демо-файлы для тестирования.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 19:31  [ТС] 5
например нужно из 3-ой строчки modems.txt взять первое слово и вставить его с добавлением к "volume=" в 5-ую строчку parametr.txt вместо "volume=COM25", чтобы поучилось "volume=COM71"
Вложения
Тип файла: txt modems.txt (386 байт, 45 просмотров)
Тип файла: txt parametr.txt (481 байт, 33 просмотров)
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
27.06.2013, 19:44 6
Да, 2 опечатки допустил (строка 2 и строка 51).
Вот исправленный код:
Bash
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
54
::@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
::из файла
set src=modems.txt
::из определенной строки
set nLine=3
::первые несколько символов
set nChars=5
 
::куда
set dest=parametr.txt
::удалить все что находится после слова
set word=volume=
 
2>nul del "%dest%_"
 
::Получаем текст со строки с № nLine
For /f "delims=] tokens=1*" %%a in (
  'find /v /n "" ^< "%src%" ^| findstr /BC:"[%nLine%]"'
) do set str=%%b
 
::Урезаем до первых nChars символов
set str=!str:~0,%nChars%!
 
::Считаем общее кол-во строк в dest
for /f %%a in ('find /v /c "" ^<"%dest%"') do set Count=%%a
 
::Определяем номер строки с искомой фразой
For /f "delims=[] tokens=1" %%a in (
  'find /i /n "%word%" ^< "%dest%"'
) do set nWLine=%%a
 
set /A nLineFirstTo=nWLine - 1
 
::Создание маски Findstr для отсекания первых N строк (N = nWLine - 1)
For /L %%C in (1, 1, %nLineFirstTo%) do (
  set "txtmask=!txtmask!\[%%C\] "
)
 
::Отсекаем первые N строк и записываем в промежуточный файл
::Нумеруем строки, применяем маску фильтрации, отрабрасываем нумерацию циклом
for /f "delims=] tokens=1*" %%a in ('find /v /n "" ^<"%dest%" ^| findstr /B "%txtmask%" 2^>nul') do (
  Echo.%%b>>"%dest%_"
)
 
::Модифицируем найденную строку
echo %word%%str%>>"%dest%_"
 
::Дописываем последние строки. More ведет отсчет от нуля.
more +%nWLine% < "%dest%" >> "%dest%_"
 
::Перемещаем сформированный файл на текущий
for %%a in ("%dest%") do move /y "%dest%_" "%%~nxa"
1
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 20:15  [ТС] 7
Там есть еще строка "AudioComport=", так этот код перезаписывает не "Comport=", а в место "AudioComport="
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
27.06.2013, 20:49 8
Да, оно сравнивает полностью во всей строке.
Это будет чуть по-сложнее.
Пробуйте:
Bash
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
::из файла
set src=modems.txt
::из определенной строки
set nLine=3
::первые несколько символов
set nChars=5
 
::куда
set dest=parametr.txt
::удалить все что находится после слова
set word=volume=
 
2>nul del "%dest%_"
 
::Получаем текст со строки с № nLine
For /f "delims=] tokens=1*" %%a in (
  'find /v /n "" ^< "%src%" ^| findstr /BC:"[%nLine%]"'
) do set str=%%b
 
::Урезаем до первых nChars символов
set str=!str:~0,%nChars%!
 
::Определяем номер строки с искомой фразой
::Определяем длину искомого текста
call :var_count "%word%" WordLen
::Сравниваем только ту часть первых символов, которая соответствует длине искомого слова
set Count=0
For /f "UseBackQ delims=" %%a in ("%dest%") do (
  set /A Count+=1
  set tLine=%%a
  if /i "!tLine:~0,%WordLen%!"=="%word%" set nWLine=!Count!
)
 
set /A nLineFirstTo=nWLine - 1
 
::Создание маски Findstr для отсекания первых N строк (N = nWLine - 1)
For /L %%C in (1, 1, %nLineFirstTo%) do (
  set "txtmask=!txtmask!\[%%C\] "
)
 
::Отсекаем первые N строк и записываем в промежуточный файл
::Нумеруем строки, применяем маску фильтрации, отрабрасываем нумерацию циклом
for /f "delims=] tokens=1*" %%a in ('find /v /n "" ^<"%dest%" ^| findstr /B "%txtmask%" 2^>nul') do (
  Echo.%%b>>"%dest%_"
)
 
::Модифицируем найденную строку
echo %word%%str%>>"%dest%_"
 
::Дописываем последние строки. More ведет отсчет от нуля.
more +%nWLine% < "%dest%" >> "%dest%_"
 
::Перемещаем сформированный файл на текущий
for %%a in ("%dest%") do move /y "%dest%_" "%%~nxa"
 
goto :eof
 
:var_count %1-in.Text %2.out.Len.of.Text
  set _var=%~1& set _count=0
  :count--
  set _var=%_var:~1%
  set /a _count+=1
  if not defined _var (set %~2=%_count%& exit /b) else (goto :count--)
Exit /B
Добавлено через 2 минуты
Кстати, это может означать, что Вы задаете неверную фразу:
а именно:
set word=Comport
вместо
set word=Comport=
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 21:06  [ТС] 9
нет, я задаю set word=Comport=, в прочем я пробовал так итак
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
27.06.2013, 21:11 10
Не могёт такого быть.
Ему дали четкую команду - искать в файле конкретное слово или вхождение:
Bash
1
find /i /n "%word%" < "%dest%"
Если что скидывайте текстовики.
Ну а с последним кодом что? - Работает?
1
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 21:17  [ТС] 11
modems.txt тот же
Вложения
Тип файла: txt parametr.txt (515 байт, 13 просмотров)
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 21:45  [ТС] 12
Простите Стас, это я запарился!!! Вам ОГРОМНОЕ человеческое СПАСИБО, всех благ Вам!!!!
0
Dragokas
27.06.2013, 21:55
  #13

Не по теме:

Спасибо. Да я тоже запарился. У нас в Днепре до сих пор 31 держится.

1
Eva Rosalene
27.06.2013, 22:06
  #14

Не по теме:

А ты что, не Алекс? О_о
P.S. А у нас +36°

0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
27.06.2013, 22:17  [ТС] 15
Стас, подскажите пожалуйста последний момент. У меня несколько файлов parametr.txt, как перестроить Ваш код, так чтоб из modems.txt брались разные строчки для разных parametr.txt которые находятся в разных директориях?
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
27.06.2013, 23:41 16

Не по теме:

@FraidZZ, и Алекс тоже -). Лучше: Алекс. ;)



Разные * разные * разные =)))

Сейчас попробую переварить в алгоритм.

На ум приходит только создать еще один бат-файл, например Range.cmd.
А вот этот главный пусть называется main.cmd

В main.cmd подставляете там, где Вам нужно будет менять значение номер параметра извне:
например:

set nLine=%~1
set word=%~2
set dest=%~3

А в другом Range.cmd будете вызывать главный бат. Код будет, например, таков:

Bash
1
2
main 3 "volume=" "c:\temp\parametr.txt"
main 3 "volume=" "c:\temp2\parametr.txt"
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
28.06.2013, 00:41  [ТС] 17
вносит правильные изменения в parametr.txt, но сохраняет parametr.txt в директорию от куда запускался Range.cmd.
в Range.cmd такой же код:
Bash
1
2
main 3 "volume=" "c:\temp\parametr.txt"
main 4 "volume=" "c:\temp2\parametr.txt"
Вложения
Тип файла: rar main.rar (1.1 Кб, 15 просмотров)
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
28.06.2013, 01:13 18
Упс, перепутал синтаксис move с ren. Вот уж точно - жара.
Эта страшная конструкция в строке 57 не нужна. Вместо нее просто:

Bash
1
move /y "%dest%_" "%dest%"
1
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 56
28.06.2013, 08:44  [ТС] 19
Почему то выполняется только первая строчка в Range.cmd, т.е.
main 3 "volume=" "c:\temp\parametr.txt" а main 4 "volume=" "c:\temp2\parametr.txt" не выполняется.
В чем может быть проблема?
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
28.06.2013, 18:21 20
Странно.
Попробуйте заменить строку 59 (goto :eof)
на:

Bash
1
Exit /B
И напишите о результатах.
0
28.06.2013, 18:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2013, 18:21
Помогаю со студенческими работами здесь

Добавить данные в определённую строчку и столбец
Подскажите как после того как данные с регистрации запишутся в таблицу, и после авторизации всё...

Delphi 7 загрузка определенную строчку через WebBrowser
Дорогие друзья! Нужна ваша помощь. Delphi 7 загрузка определенную строчку из текста в интернете и...

Запись в определённую строчку и место в текстовом файле
Есть файл bat, вот примерного такого содержания: set a; set b; xcopy &quot;C:\temp\users&quot; &quot;%TARGET%&quot;...

Вывести определённую строчку massives из данного кода
Объясните пожалуйста как вывести определённую строчку massives из данного кода. Т.е. если ввожу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru