Показать полную графическую версию : [решено] объединение двух тхт файлом в один
muslimdogger
20-12-2015, 02:13
есть два тхт файла, с одним выражением в каждой строке. нужно объединить два тхт в один, чтоб в итоге там было выражение файла 1 выражение файла два: хххх уууу. скрипты на сайте находил, но подходящего не подобрал. спасибо!
muslimdogger
20-12-2015, 02:16
нашел такой вариант, но он бесконечный :)
@(for /f "usebackq delims=" %%i in ("2.txt") do @(for /f "usebackq delims=" %%j in ("1.txt") do @set var=%%j& set /a count+=1& cmd /v:on /c "if !count!==1 (echo !var:~3!;%%i) else (echo %%j;%%i)")& set count=)>"3.txt"
1. Пакетный файл — принципиально?
2. У них заведомо одинаковое количество строк?
greg zakharov
20-12-2015, 09:26
Предположим, содержимое файла 1.txt:foo1
foo2
foo3
foo4
foo5
foo6
foo7Содержимое 2.txt:bar1
bar2
bar3Сам командный файл лежит в папке с вышеобозначенными файлами, то:@echo off
setlocal
call:getLineNumbers 1.txt l1
call:getLineNumbers 2.txt l2
if %l1% equ %l2% set "l3=%l1%"
if %l1% gtr %l2% set /a "l3=%l1%-%l2%"
if %l1% lss %l2% set /a "l3=%l2%-%l1%"
>3.txt (for /f "tokens=1,* delims=:" %%i in (
'findstr /nvc:"^" 1.txt'
) do (
if %%i leq %l3% (
for /f "tokens=1,* delims=:" %%k in (
'findstr /nvc:"^" 2.txt ^| findstr /b %%i'
) do echo:%%j %%l
)
))
endlocal
exit /b
:getLineNumbers
for /f %%i in (
'find /v /c "" ^< %1'
) do set "%2=%%i"
exit /bПринцип, полагаю, понятен, так что прочие свистоперделки сможете прикрутить сами.
Foreigner
20-12-2015, 12:27
@echo off
setlocal
for /f "tokens=*" %%i in (1.txt) do call:set 1 "%%i"
set "cnt_1=%cnt%"
set "cnt="
for /f "tokens=*" %%i in (2.txt) do call:set 2 "%%i"
if %cnt% leq %cnt_1% set "cnt=%cnt_1%"
1>3.txt (
for /l %%i in (1,1,%cnt%) do (
if defined line_1_%%i (
for /f "tokens=2 delims==" %%j in ('set line_1_%%i') do 0>nul set /p="%%j "
) else (0>nul set /p="")
if defined line_2_%%i (
for /f "tokens=2 delims==" %%j in ('set line_2_%%i') do echo %%j
) else ( echo. )
))
goto:eof
:set
set /a cnt+=1
set "line_%1_%cnt%=%~2"
@echo off& setlocal
for /f "delims=" %%i in ('type "1.txt"') do (
set/a m+=1,n=0
for /f "delims=" %%j in ('type "2.txt"') do (
set/a n+=1
2>nul set/a 1/(m-n^)|| echo %%i %%j>>"3.txt"
)
)
endlocal& exit/b
muslimdogger
20-12-2015, 13:02
Iska, да, нужен был батник) я находил ваш такой же скрипт на wsh.
воспользовался скриптом от Georgio. все четко.
Foreigner, ваш скрипт отработал немного странно.
greg zakharov, и всем спасибо что отозвались и помогли
Foreigner
20-12-2015, 13:38
ваш скрипт отработал немного странно. »
Ради интереса, в чем была проблема?
muslimdogger
20-12-2015, 16:42
Foreigner, в 3.txt там строки были вперемешку
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.