Автор Тема: [Данные, строки] Объединение текстовых файлов по столбцам с разделителями  (Прочитано 167 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vanches [?]

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.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 с максимальным быстродействием?

Русское сообщество AutoIt


Помечен как лучший ответ пользователем Vanches Отправлен Февраль 09, 2018, 17:11:51

Оффлайн gunter123 [?]

  • Осваивающий
  • **
  • Сообщений: 54
  • Репутация: 23
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
 
Код: AutoIt [Выделить]
#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

Is it future or is it past?

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
28 Ответов
11104 Просмотров
Последний ответ Июль 01, 2010, 17:36:50
от arr1val
2 Ответов
4901 Просмотров
Последний ответ Март 15, 2011, 20:29:04
от WasonAl
16 Ответов
13943 Просмотров
Последний ответ Март 23, 2014, 22:10:29
от spy686
4 Ответов
5165 Просмотров
Последний ответ Ноябрь 12, 2012, 16:18:33
от Cfar
0 Ответов
983 Просмотров
Последний ответ Декабрь 27, 2013, 12:15:43
от madmasles
2 Ответов
1109 Просмотров
Последний ответ Август 23, 2014, 01:59:51
от darow
10 Ответов
1897 Просмотров
Последний ответ Октябрь 03, 2014, 15:33:12
от vaf
0 Ответов
715 Просмотров
Последний ответ Ноябрь 20, 2014, 10:26:00
от Fanatmb
12 Ответов
2635 Просмотров
Последний ответ Октябрь 04, 2015, 12:40:46
от WSWR
3 Ответов
995 Просмотров
Последний ответ Март 31, 2016, 14:01:30
от InnI