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

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

Ответить
Настройки темы
CMD/BAT - [решено] CMD/BAT - Дополнить строки первой строчкой + добавить 3е значение

Новый участник


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

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


Добрый день.
В фирме 10 лет назад был написан парсер на маке. Который стоял на складе и его единственный функционал был в том, чтобы переделывать txt файл в необходимый. Мак сдох
Думаю, можно все это сделать через VB но не силен. Подскажите пожалуйста.

Пример 1
Текстовый документ имеет структуру, где первой строчкой идет наименование места а потом идет список из артикулов.
Скрытый текст
P1-31-00-00
KB920673
KB920674
KB920675
KB920676
KB920677


Парсер подставлял первую строчку за каждой последующей строкой с расстоянием в tab и в конце предлагал ввести значение, которое добавлял еще раз через tab.
Первую строка имела вид после манипуляций - box place client_id ( все тоже через tab)


Скрытый текст
box place client_id
KQ023239 P1-31-00-00 123
KQ023252 P1-31-00-00 123
KQ023241 P1-31-00-00 123
KQ023249 P1-31-00-00 123
KQ023247 P1-31-00-00 123
KQ023245 P1-31-00-00 123
KQ023243 P1-31-00-00 123
KQ023248 P1-31-00-00 123




Начинаю с малого. На форуме нашел пример подходящий:
Добавляет значение после каждой строчки. Но Set "Str=%~1" не подходит. Как можно указатель, чтобы брал значение из первой строки и присваивал ее и при этом предлагал ввести третье значение.


Скрытый текст
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\1\1.txt
set sDestFile=2.txt

if exist "%sSourceFile%" (
>"%sDestFile%" (
for /f "usebackq delims=" %%i in ("%sSourceFile%") do (

echo %%i Set "Str=%~1"
)
)
) else (
echo Can't find source file [%sSourceFile%].
exit /b 1
)

endlocal
exit /b 0


Пример 2.

Строчки которые нужно разбить идут через одну.

Скрытый текст
P1-17-01-03
KQ021031
P1-16-02-01
KQ002469


На выходе парсер делал первую строчку с заголовком через tab - box place client_id
и чередовал в строчку через одну
Тут не присваивается третье значение. Только 2.
Скрытый текст
box place client_id
KQ021031 P1-17-01-03
KQ002469 P1-16-02-01


Потом все это загружается в старинную бд.

Отправлено: 17:50, 21-03-2022

 

Ветеран


Contributor


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

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


spb-nord, Как-то путано. Вот вариант
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\infile.txt"
	Set "FileOut=Z:\Box_In\outfile.txt"

	Set "FirstNew=box place client_id"

	>"%FileOut%" (Echo %FirstNew%)
	Set /P FirstOld=<"%FileIn%"

        Echo %FirstNew%
	FOR /F "usebackq delims=" %%i In (`2^>nul More +1 "%FileIn%"`) DO (
		(Set /P EndStr=%%i %FirstOld% )
		>>"%FileOut%" (Call Echo %%i %FirstOld% %%EndStr%%)
	)
Pause
Exit /B
Вопросы по постановке:
1. Откуда берётся "box place client_id" или это некая постоянная?
2. Через "tab" или через пробел? Что такое "tab" - приведите код символа
3. Третье значение - постоянная для всех строк или для каждой строки своя?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:32, 21-03-2022 | #2



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

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


Новый участник


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

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


Вложения
Тип файла: txt 11) 2022_03_03_Rami_new.pwd.TXT
(541 байт, 14 просмотров)

Спасибо за ответ.
1. box place client_id это постоянная которая появляется во всех новых файлах.
2. Взято из примера самого файла. Прикрепил.
3. Третье для одного документа постоянная. Для другого может быть 444 к примеру, но так же на весь файл.

Отправлено: 18:46, 21-03-2022 | #3


Ветеран


Contributor


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

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


Попробуйте. Здесь Tab присвоены не пробелы, а табуляция.
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\infile.txt"
	Set "FileOut=Z:\Box_In\outfile.txt"

	Set "Tab=	"
	Set "FirstNew=box place%Tab%client_id"
rem	Set "FirstNew=box%Tab%place%Tab%client_id"
rem	Set "FirstNew=box%Tab%%Tab%place%Tab%%Tab%client_id"

	(Set /P EndStr=Enter the third component ^> )

	>"%FileOut%" (Echo %FirstNew%)
	Set /P FirstOld=<"%FileIn%"

	FOR /F "usebackq delims=" %%i In (`2^>nul More +1 "%FileIn%"`) DO (
		>>"%FileOut%" (Echo %%i%Tab%%FirstOld%%Tab%%EndStr%)
	)
Pause
Exit /B
Результат
Я не понимаю, к чему привязан заголовок. Приведенный вариант даёт
Код: Выделить весь код
box place	client_id
KB920673	P1-31-00-00	klwhjejhwlqjlkjrlejl
KB920674	P1-31-00-00	klwhjejhwlqjlkjrlejl
KB920675	P1-31-00-00	klwhjejhwlqjlkjrlejl
KB920676	P1-31-00-00	klwhjejhwlqjlkjrlejl
KB920677	P1-31-00-00	klwhjejhwlqjlkjrlejl
Возможно, Вас более устроит строка:
Код: Выделить весь код
	Set "FirstNew=box%Tab%place%Tab%client_id"
При этом получим как в Вашем файле
Код: Выделить весь код
box	place	client_id
KB920673	P1-31-00-00	868686
KB920674	P1-31-00-00	868686
KB920675	P1-31-00-00	868686
KB920676	P1-31-00-00	868686
KB920677	P1-31-00-00	868686
Или еще вариант
Код: Выделить весь код
	Set "FirstNew=box%Tab%%Tab%place%Tab%%Tab%client_id"
Код: Выделить весь код
box		place		client_id
KB920673	P1-31-00-00	42321
KB920674	P1-31-00-00	42321
KB920675	P1-31-00-00	42321
KB920676	P1-31-00-00	42321
KB920677	P1-31-00-00	42321

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 21-03-2022 в 20:43.


Отправлено: 20:17, 21-03-2022 | #4


Новый участник


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

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


Спасибо огромное! Все супер

Отправлено: 11:25, 22-03-2022 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
CMD/BAT - CMD/BAT Значение по условию Don_abbadon Скриптовые языки администрирования Windows 7 29-11-2020 14:55
CMD/BAT - Копирование первой строки из файла MultiMax Скриптовые языки администрирования Windows 27 08-03-2017 14:14
CMD/BAT - CMD/BAT разбор строки с символом перехода строки в конце. Alex1254 Скриптовые языки администрирования Windows 0 19-09-2013 19:24
CMD/BAT - [решено] Преобразование строки в простое число CMD/BAT kelevara Скриптовые языки администрирования Windows 7 26-04-2013 16:55




 
Переход