Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 03.09.2016
Сообщений: 14

Пакетное добавление строк частями других строк

17.10.2021, 22:23. Показов 1569. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В текстовом файле повторяются строки (выделенная часть у всех разная, но всегда из 3-х букв)

...
atc_parking_codes=XXX
icao_airline=
...

Нужно 3 последние буквы из первой строки дописать в следующую за ней 2-ю строку.
В ручную не вариант, записей от 50-ти до 550-ти
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2021, 22:23
Ответы с готовыми решениями:

Добавление разных строк из текстового файла в конец других файлов в определённом порядке
Исходные данные: 1. есть 10 текстовых файлов (file1.txt, file2.txt, ..., file10.txt) 2. есть второй текстовый файл, в котором имеется...

Функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение строк
На языке Ассемблер написать функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение...

Добавление строк на одном листе, и такого же количества на других в exel файле
Добрый день, форумчане! Очень нужна ваша помощь. Есть файл ежемесячного учета и нужно, чтобы с помощью черной магии была кнопка по...

18
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
17.10.2021, 23:48
.js:
JavaScript
1
2
3
4
5
file = 'test.ini'
with (WSH.CreateObject('Scripting.FileSystemObject')){
  text = openTextFile(file).readAll().replace(/(\natc_parking_codes=)(?=\r?\nicao_airline=)/g,'$1XXX')
  with(openTextFile(file,2)){write(text);close()}
}
0
0 / 0 / 0
Регистрация: 03.09.2016
Сообщений: 14
17.10.2021, 23:55  [ТС]
Спасибо, но я же написал, что коды в строках все разные, не XXX
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
18.10.2021, 00:02
Цитата Сообщение от Enzzo Посмотреть сообщение
Нужно 3 последние буквы из первой строки дописать в следующую за ней 2-ю строку.
Немного не так понял про "дописать". В результате так должно быть?:
Code
1
2
atc_parking_codes=ХХХбла
icao_airline=бла
0
0 / 0 / 0
Регистрация: 03.09.2016
Сообщений: 14
18.10.2021, 00:17  [ТС]
Должно быть так:

Code
1
2
atc_parking_codes=XXX
icao_airline=XXX
Строки в файле строго следуют друг за другом, собраны в секции и секции идут друг за другом:

Кликните здесь для просмотра всего текста
Code
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
68
69
70
71
72
73
[fltsim.0]
title=AIGAIM_Allegiant Air Airbus A319-100
model=
texture=AAY-Allegiant Air
atc_airline=ALLEGIANT
atc_parking_types=GATE
[COLOR="Red"]atc_parking_codes=AAY
icao_airline=[/COLOR]
atc_id=
ui_manufacturer=AIRBUS
ui_type=A319
ui_typerole=Commercial Airliner
effects=effectsAI
sound=soundai
atc_id_enable=1
isAirTraffic=1
isUserSelectable=0
ui_createdby=Provided by: KAIW2 Filename: faib_aay_a319_jkm.zip
description=FAIB_A319-100_CFM-CFM(p3dv5)
atc_heavy=0
 
[fltsim.1]
title=AIGAIM_Allegiant Air Airbus A319-100 - OC Travel Deal
model=
texture=AAY-Allegiant Air_OC Travel Deal
atc_airline=ALLEGIANT
atc_parking_types=GATE
[COLOR="red"]atc_parking_codes=AAY
icao_airline=[/COLOR]
atc_id=
ui_manufacturer=AIRBUS
ui_type=A319
ui_typerole=Commercial Airliner
effects=effectsAI
sound=soundai
atc_id_enable=1
isAirTraffic=1
isUserSelectable=0
ui_createdby=Provided by: KAIW2 Filename: faib_aay_a319_jkm.zip
description=FAIB_A319-100_CFM-CFM(p3dv5)
atc_heavy=0
 
[fltsim.2]
title=AIGAIM_Allegiant Air Airbus A319-100 - Vegas Golden Knights
model=
texture=AAY-Allegiant Air_Vegas Golden Knights
atc_airline=ALLEGIANT
atc_parking_types=GATE
[COLOR="red"]atc_parking_codes=AAY
icao_airline=[/COLOR]
atc_id=
ui_manufacturer=AIRBUS
ui_type=A319
ui_typerole=Commercial Airliner
effects=effectsAI
sound=soundai
atc_id_enable=1
isAirTraffic=1
isUserSelectable=0
ui_createdby=Provided by: KAIW2 Filename: faib_aay_a319_jkm.zip
description=FAIB_A319-100_CFM-CFM(p3dv5)
atc_heavy=0
 
[fltsim.3]
title=AIGAIM_American Airlines Airbus A319-100 - CFM Heritage Piedmont
model=
texture=AAL-American Airlines_CFM Heritage Piedmont
atc_airline=AMERICAN
atc_parking_types=GATE
[COLOR="red"]atc_parking_codes=AAL
icao_airline=[/COLOR]
atc_id=
....


Алгоритмически можно построчно копировать в другой файл с проверкой условия - если строка "icao_airline=", то дописать в нее 3 последних символа из предыдущей строки.
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,917
18.10.2021, 00:49
Лучший ответ Сообщение было отмечено Enzzo как решение

Решение

Windows Batch file
1
vim +g/\v^\w+\=\w\w\w$/norm$yawjp +wq file.txt


( vim - текстовый редактор; установка: choco install vim )

( a choco в свою очередь - пакетный установщик OS Windows )
1
0 / 0 / 0
Регистрация: 03.09.2016
Сообщений: 14
18.10.2021, 01:04  [ТС]
Вот такое получилось, не то...

[fltsim.0]
title=Allegiant Air Airbus A319-100
model=100
texture=AAY-Allegiant Air
atc_airline=ALLEGIANT Air
atc_parking_types=GATE Air
atc_parking_codes=AAY Air
icao_airline= Air
atc_id=
ui_manufacturer=AIRBUS
ui_type=A319AIRBUS
ui_typeroA319AIRBUSle=Commercial Airliner
effects=effectsAI Airliner
sound=soundai Airliner
atc_id_enable= Airliner1

Добавлено через 13 минут
Теперь отлично!
Спасибо огромное!
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,917
18.10.2021, 01:28
Цитата Сообщение от Enzzo Посмотреть сообщение
Вот такое получилось, не то...
к какому из предложенных вариантов относится результат 'не то' ?

Добавлено через 21 минуту
Цитата Сообщение от Enzzo Посмотреть сообщение
Алгоритмически можно ........
Преимуществом данного подхода ( использование команд редактора Vim или NeoVim ) является то,
что не требуется придумывания программных алгоритмов, а работать это будет где угодно,
на Windows, на Linux, на MacOS, на смартфонах Android и IOS.
0
0 / 0 / 0
Регистрация: 03.09.2016
Сообщений: 14
18.10.2021, 01:55  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
к какому из предложенных вариантов относится результат 'не то' ?
К первому относился.
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
18.10.2021, 04:45
Цитата Сообщение от Enzzo Посмотреть сообщение
Должно быть так:
То бишь значение вписывать, а не 3 символа. Вот:
JavaScript
1
2
3
4
5
file = 'test.ini'
with (WSH.CreateObject('Scripting.FileSystemObject')){
  text = openTextFile(file).readAll().replace(/(\natc_parking_codes=)([^\r\n]+)(\r?\nicao_airline=)[^\r\n]*/g,'$1$2$3$2')
  with(openTextFile(file,2)){write(text);close()}
}
P.S.: Не вышло раньше. Инет в 0:0 блокировали.
0
0 / 0 / 0
Регистрация: 03.09.2016
Сообщений: 14
18.10.2021, 17:42  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
P.S.: Не вышло раньше. Инет в 0:0 блокировали.
Ничего, зато все работает как надо! Спасибо большое
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.10.2021, 02:15
вариант на pwsh (поболее, конечно чем на vim у volodin661)
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$file = 'file.txt'
$patt = 'icao_airline\s*='
 
$pLine = sls $patt $file -Context 1,0
$out   = foreach ($i in (gc $file)) {
  if ($pLine.LineNumber -Contains $i.ReadCount) {
    $line1 = ($pLine|? LineNumber -eq $i.ReadCount).Line
    $line2 = ($pLine|? LineNumber -eq $i.ReadCount).Context.PreContext
    '{0}{1}' -f ([regex]::Match($line1, '[^=]*\s*=').Value), ([regex]::Match($line2, '(?<=[=])[^=]*$').Value)
  }
  else {$i}
}
$out|Out-File $file
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,917
19.10.2021, 09:12
alpap,

PowerShell
1
(Get-Content FILE.TXT -Raw) -replace '(?x) (?<==(\w{3}) \r\n icao_airline=) (?#>ВОТ ЗДЕСЬ И ВСТАВИМ<) (?= \r\n )', '$1'
1
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.10.2021, 16:40
Цитата Сообщение от volodin661 Посмотреть сообщение
ВОТ ЗДЕСЬ И ВСТАВИМ
это массив
PowerShell
1
sls $patt $file -Context 1,0
как мы его вставим, надо его перебирать и делать соответствие или я чего не понял?
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,917
19.10.2021, 17:16
нет, это рабочий, готовый к употреблению regex.

а коммент просто символизирует точку расположения виртуального курсора,
куда вставится захваченная часть ($1)

Добавлено через 11 минут
уберу, чтоб не смущал
PowerShell
1
2
3
#
(Get-Content FILE.TXT -Raw) -replace '(?x) (?<==(\w{3}) \r?\n icao_airline=)  (?= \r?\n )', '$1'
#                                                       look behind         ↰↱   look ahead
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.10.2021, 18:02
никак не работает, ни в pwsh (7.1.5) ни в PowerShell, вывод текста как есть без изменений и более ничего.

Добавлено через 3 минуты
сработало только вот так:
PowerShell
1
(Get-Content FILE.TXT -RAW) -replace '(?x) (?<==(\w{3}) \r?\n icao_airline=).*(?= \r?\n )', '$1'
Добавлено через 2 минуты
но это же частный случай?
если потребуется не рядом находящаяся строка выше или ниже, а подалее, ведь без sls уже не обойтись тогда?
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,917
19.10.2021, 20:05
Цитата Сообщение от alpap Посмотреть сообщение
никак не работает, ни в pwsh (7.1.5) ни в PowerShell
Загадочно. Я не проверял под windows при публикации, но после таких утверждений проверил даже под XP,
всё норм.
Применённый Zero Length Assertion вполне законен, добавлять .* не требуется.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.10.2021, 21:47
Цитата Сообщение от volodin661 Посмотреть сообщение
всё норм
я понял в чем дело
у меня отличается видимо искомая строка, потому как я копипастил текст как есть из #5, а там эта строка выглядит:
Code
1
icao_airline=[/COLOR]
и понятно почему потребовалось .*
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
19.10.2021, 21:59
alpap, сегодня значения нет, завтра есть, а его придётся заменять. Поэтому логично не юзать заглядывание вперёд.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2021, 21:59
Помогаю со студенческими работами здесь

Отпечатать номера тех строк, в которых третий элемент больше суммы двух других элементов строки, и число таких строк
Для матрицы из 3 столбцов и 7 строк отпечатать номера тех строк, в которых третий элемент больше суммы двух других элементов строки, и...

Миллионы строк. добавление новых строк занимает очень много времени
здравствуйте, столкнулся с такой проблемой: в базе данных access несколько миллионов строк, заношу их туда программно c#. как следствие,...

Добавление строк в TStringList и нахождение количества одинаковых строк
Задача такова: 1) Добавить несколько строк с текстом 2) Определить кол-во одинак.строк (при чем для каждой разный подсчет: т.е, есть...

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

Добавление строк, взятых из одного файла, в другие файлы в случае отсутствия этих строк в этих файлах
Есть древо папок с файлами 2.apk\res\values\strings.xml 2.apk\res\values-ru\strings.xml 2.apk\res\values-en\strings.xml Папок вида ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru