Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] объединение двух тхт файлом в один (http://forum.oszone.net/showthread.php?t=309412)

muslimdogger 20-12-2015 02:13 2586606

объединение двух тхт файлом в один
 
есть два тхт файла, с одним выражением в каждой строке. нужно объединить два тхт в один, чтоб в итоге там было выражение файла 1 выражение файла два: хххх уууу. скрипты на сайте находил, но подходящего не подобрал. спасибо!

muslimdogger 20-12-2015 02:16 2586607

нашел такой вариант, но он бесконечный :)
Код:

@(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"

Iska 20-12-2015 03:00 2586613

1. Пакетный файл — принципиально?
2. У них заведомо одинаковое количество строк?

greg zakharov 20-12-2015 09:26 2586641

Предположим, содержимое файла 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 2586704

Код:

@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"


Georgio 20-12-2015 12:43 2586713

Код:

@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 2586717

Iska, да, нужен был батник) я находил ваш такой же скрипт на wsh.
воспользовался скриптом от Georgio. все четко.
Foreigner, ваш скрипт отработал немного странно.
greg zakharov, и всем спасибо что отозвались и помогли

Foreigner 20-12-2015 13:38 2586726

Цитата:

Цитата muslimdogger
ваш скрипт отработал немного странно. »

Ради интереса, в чем была проблема?

muslimdogger 20-12-2015 16:42 2586763

Foreigner, в 3.txt там строки были вперемешку


Время: 09:50.

Время: 09:50.
© OSzone.net 2001-