Объединить каждую строку 2 текстовых файлов

Файл1.txt:

Abcd
Efghhh
Ijkl
+1000 other lines

File2.txt это:

1234
1368
QL23372
+1000 other lines

Я хочу создать File3.txt, содержащий:

Abcd$1234
Efghhh$1368
Ijkl$QL23372
+1000 other lines

Как это сделать в пакетном режиме или VBscript?


person Basj    schedule 03.05.2013    source источник


Ответы (4)


Решение с использованием файла *.bat:

setlocal EnableDelayedExpansion

set i=0
for /f "delims=" %%A in (file1.txt) do (
    set /A i+=1
    set arr1[!i!]=%%A
)

set i=0
for /f "delims=" %%A in (file2.txt) do (
    set /A i+=1
    set arr2[!i!]=%%A
)

for /L %%i in (1,1,%i%) do @echo !arr1[%%i]!$!arr2[%%i]!>> result.txt
person Alexander    schedule 03.05.2013
comment
Это не сохраняет пустые строки, а портит строки с ! в них. Эти два ограничения являются известными проблемами с этим стилем решения, но их следует упомянуть, чтобы читатели могли выбрать, подходит ли им это решение. - person foxidrive; 04.05.2013

Предполагая одинаковое количество строк для обоих файлов:

string[] lines1 = File.ReadAllLines("File1.txt");
string[] lines2 = File.ReadAllLines("File2.txt");

string[] lines3 = new string[lines1.Length];
for(int i=0;i<lines1.Length;i++)
    lines3[i]=lines1[i]+"$"+lines2[i];
File.WriteAllLines("File3.txt",lines3);
person Jerry    schedule 03.05.2013
comment
Спасибо. Как я могу скомпилировать/запустить его самым простым способом? (я привык только к пакетному, vbscript или традиционному C с компилятором C) - person Basj; 04.05.2013
comment
Создайте новый проект Windows Forms, перетащите кнопку из панели инструментов, дважды щелкните ее и вставьте этот код. Убедитесь, что файлы находятся в одной папке с exe-файлом; или используйте абсолютные пути к файлам. Затем нажмите F5 для запуска и нажмите кнопку. - person Jerry; 04.05.2013
comment
Что мне нужно иметь? Визуальная студия? Или что-то другое? Какое самое легкое решение? - person Basj; 04.05.2013
comment
Я использую Visual Studio.NET, но вы можете использовать любой компилятор c# - person Jerry; 04.05.2013

@echo off
setlocal EnableDelayedExpansion

rem Read File1.txt with SET /P command via standard input
< File1.txt (
   rem Read File2.txt with FOR command
   for /F "delims=" %%a in (File2.txt) do (
      set /P line1=
      echo !line1!$%%a
   )
rem Send output to File3.txt
) > File3.txt

Эта пакетная программа завершится ошибкой, если входные файлы содержат пустые строки. Он также не будет работать со специальными пакетными символами, такими как ! < | >. При необходимости эти ограничения могут быть исправлены.

person Aacini    schedule 03.05.2013

Попытка VBScript:

  Dim oFS   : Set oFS   = CreateObject("Scripting.FileSystemObject")
  Dim tsFst : Set tsFst = oFS.OpenTextFile("M:\lib\kurs0705\testdata\filezipper\fst")
  Dim tsSnd : Set tsSnd = oFS.OpenTextFile("M:\lib\kurs0705\testdata\filezipper\snd")
  Do Until tsFst.AtEndOfStream Or tsSnd.AtEndOfStream
     WScript.Echo tsFst.ReadLine() & "$" & tsSnd.ReadLine()
  Loop
  tsSnd.Close
  tsFst.Close

что позволяет избежать лишних массивов.

person Ekkehard.Horner    schedule 03.05.2013