Что нового

[Данные, строки] Объединение текстовых файлов по столбцам с разделителями

Vanches

Новичок
Сообщения
12
Репутация
0
Версия AutoIt: 3.3.14.0
Описание:

Добрый день, есть произвольное число текстовых файлов в которых в столбик указаны данные, объединяю их в один текстовый по столбцам с разделителями. Пример объединения а и b в с.
a.txt
12312312
13212313
44331313
b.txt
ewrwerw
rwerwerr
rwererw
с.txt
12312312;ewrwerw
13212313;rwerwerr
44331313;rwererw

для этого сейчас использую следующий BAT:

Код:
@echo off
setlocal
 
set "insert=;"
set "result=c.txt"
 
for %%i in (
 
 "a.txt"
 "b.txt"
  
 ) do (
 if defined x (
  call set "y=%%y%%+'%insert%'+(gc '%%~i')[$_]"
 ) else (
  set x=%%~i
 )
)
powershell "(0..(($x=gc '%x%').count-1)|%%{$x[$_]%y%})|out-file '%result%' -encoding default"
 
endlocal
exit/b 0

Выполнение занимает довольно много времени. Как сделать это на Autoit с максимальным быстродействием?
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Код:
#include <File.au3>

Dim $Files = [@ScriptDir & '/a.txt', @ScriptDir & '/b.txt'] ; Список файлов
_Combine($Files, @ScriptDir & "/c.txt", ';')

Func _Combine($aFiles, $sResult, $sSplit = ';')
   For $i = 0 To UBound($aFiles) -1			; Проверка на наличие файлов, можно убрать
	  If Not FileExists($aFiles[$i]) Then
		 Return MsgBox(4096, "", "Файл " & $aFiles[$i] & " не найден")
	  EndIf
   Next

   $aResult = FileReadToArray($aFiles[0])
   For $i = 1 To UBound($aFiles) -1
	  $aSecond = FileReadToArray($aFiles[$i])
	  For $j = 0 To UBound($aResult) -1
		 $aResult[$j] &= $sSplit
		 If UBound($aSecond) > $j Then
			$aResult[$j] &= $aSecond[$j]
		 EndIf
	  Next
   Next
   _FileWriteFromArray($sResult, $aResult)
   If @error Then MsgBox(4096, "", "Ошибка сохранения файла")
EndFunc
 
Верх