Автор Тема: [Автоматизация] Объединить 2 файла в новый  (Прочитано 391 раз)

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

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 138
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.5.4

Описание: Пытаюсь повторить всё тоже самое, что и в этой теме уже сделано: https://autoit-script.ru/index.php?topic=26664.0
но с другими файлами: https://drive.google.com/file/d/1WvONdJ1uVXKCo1rHEhHQyS28dUueU3FZ/view?usp=sharing

Примечания: верхние три строчки из descendant-base.smd нужно заменить на всё содержимое из descendant-base_skel.smd без пустой строки
не могу понять природу работы скрипта поэтому выкидывает ошибку и не объединяет файлы

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

[Автоматизация] Объединить 2 файла в новый
« Отправлен: Июнь 03, 2019, 00:23:18 »

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 138

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
тут нужно поменять 2 строки как я понимаю:

Код: AutoIt [Выделить]
$Filename = StringRegExp($FullPath, '(^.*)\\(.*)\.(.*)$', 3)
$FileName2 = StringRegExpReplace($FullPath, ".+\\(.+)\_.+", "\1", 1)


если к имени descendant-base.smd добавить _011, а к имени descendant-base_skel.smd добавить, например, _089 то скрипт чудесным образом работает!

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
В прошлой теме была заморочка с именами файлов, сейчас как Вы видите работу скрипта ? Так-же через drag&drop ?

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

Re: [Автоматизация] Объединить 2 файла в новый
« Ответ #2 Отправлен: Июнь 03, 2019, 20:41:42 »

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 138

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
да, точно также, перетаскиванием.

придумал костыль:

Код: AutoIt [Выделить]
#include <File.au3>

HotKeySet("{ESC}", "Terminate")
AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile, $sDestPath, $sExePath, $Dir, $sReadFileModel, $sReadFileSkelet, $sWriteFile, $sReadFileModel2, $sOutputFile, $sSuf
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait, $TextFile1, $TextFile2, $sModelFile, $sSkeletonFile

If $CmdLine[0] <> 0 Then
    ProgressOn("Converting", "", "0%")
    For $i = 1 To $CmdLine[0]
        $sSourceFile = $CmdLine[$i]
        _PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
        ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

        If FileExists($sSourceFile) Then
            $sSuf = '_011'
            _FileRename_($sSourceFile, @WorkingDir & '\' & $sFileName & $sSuf & $sExt, 1)
            _FileRename_(@WorkingDir & '\' & $sFileName & '_skel.smd', @WorkingDir & '\' & $sFileName & $sSuf & '_skel' & $sExt, 1)
            _FileRename_(@WorkingDir & '\' & $sFileName & '-base' & '_skel.smd', @WorkingDir & '\' & $sFileName & '_012' & '_skel' & $sExt, 1)

            $sModelFile = @WorkingDir & '\' & $sFileName & $sSuf & $sExt
            $sSkeletonFile = @WorkingDir & '\' & $sFileName & $sSuf & '_skel' & $sExt
;~          ConsoleWrite("Model: " & $sModelFile & @CRLF)
;~          ConsoleWrite("Skeleton: " & $sSkeletonFile & @CRLF)

            $sOutputFile = @WorkingDir & '\' & $sFileName & '_rigged.smd'
            $sReadFileModel = StringRegExp($sModelFile, '(^.*)\\(.*)\.(.*)$', 3)
            $sReadFileModel2 = StringRegExpReplace($sModelFile, ".+\\(.+)\_.+", "\1", 1)
            $sReadFileSkelet = _FileListToArray($sReadFileModel[0] & '\', $sReadFileModel2 & '_*_skel.' & $sReadFileModel[2], 1)

            If Not @error Then
                $TextFile1 = StringTrimLeft(FileRead($sModelFile),1)
                $TextFile2 = FileRead($sReadFileSkelet[1])
                FileWrite($sOutputFile,$TextFile2&$TextFile1)
                _FileDeleteEmptyLines($sOutputFile)

            Else
                MsgBox(16, 'Ошибка', 'Не найден файл для замены')
            EndIf

            _FileRename_(@WorkingDir & '\' & $sFileName & $sSuf & $sExt, $sSourceFile, 1)
            _FileRename_(@WorkingDir & '\' & $sFileName & $sSuf & '_skel' & $sExt, @WorkingDir & '\' & $sFileName & '_skel.smd', 1)
            _FileRename_(@WorkingDir & '\' & $sFileName & '_012' & '_skel' & $sExt, @WorkingDir & '\' & $sFileName & '-base' & '_skel.smd', 1)

        Else
            MsgBox(0, 'Error', "File [" & $sSourceFile & "] not found")
        EndIf

    Next
    ProgressSet(100, "Converting complete", "100%")

    Sleep(1000)
    ProgressOff()
Else
    MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
    ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Func _FileDeleteEmptyLines($sFile)
    Local $sFileContent = StringRegExpReplace(FileRead($sFile), "(\r?\n){1,}", "\1")
    Local $hFOpen = FileOpen($sFile, 2 + FileGetEncoding($sFile))
    FileWrite($hFOpen, StringStripWS($sFileContent, 3))
    FileClose($hFOpen)
EndFunc

; ## FUNCTION ##=========================================================================
; Name ..............:  _FileRename_
; Description .......:  Rename a File
; Syntax ............:  _FileRename_($s_Source, $s_Destination, $i_Flag = 0)
; Parameters ........:  $s_Source               Source File
;                       $s_Destination          Destination File
;                       $i_Flag                 Flag    0 = (default) do not overwrite existing files
;                                                       1 = overwrite existing files
;                                                       8 = Create destination directory structure if it doesn't exist
; Return values .....:  Success:    Returns 1
;                       Failure:    Returns 0
; Author ............:  'charvi' <charvista at gmail dot com>
; Creation Date .....:  2009-01-05
; Version ...........:  0.0.0.1
; Version Date ......:  2009-01-05
; Remarks ...........:  If the source and destination paths are on different volumes a copy and delete operation is performed rather than a move.
;                       The destination directory must already exist, except using with flag value '8'.
;                       For instance the combined flag '9' (1 + 8) overwrites the target file and prechecks for the destination directory structure and if it doesn't exist creates it automatically.
;                       Some file attributes can make the overwriting impossible.
;========================================================================================
Func _FileRename_($s_Source, $s_Destination, $i_Flag = 0)
    Local $i
    $i = FileMove($s_Source, $s_Destination, $i_Flag)
    Return $i
EndFunc

Func Terminate()
    Exit
EndFunc   ;==>Terminate

Exit (0)



Добавлено: Июнь 04, 2019, 12:44:11
я начал сталкиваться с более вариативными именами. отсюда вопрос: допустим у меня есть несколько файлов (условно 3) моделей SMD и есть некоторое количество (для пример возьму 1) скелетов в том же формате SMD. как и раньше мне нужно первые три строчки из файлов с моделями заменить содержимым файла со скелетом без пустых строк. так вот

как сделать перетаскивание любого количества файлов (условно 3) с моделями и 1 выбранного скелета на скрипт, чтобы на выходе получить 3 объединённых файла модель+скелет, учитывая, что у файла со скелетом всегда есть суфикс _skel

т.е. скрипт в цикле должен из предложенных файлов увидеть файл с суфиксом _skel и заменить своим содержимым три первые строчки всех остальных файлов.

надеюсь понятно написал
« Последнее редактирование: Июнь 04, 2019, 12:44:11 от Tosyk, Причина: Объединение сообщений »

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 138

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
может кто-то помочь расширить скрипт?

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

Re: [Автоматизация] Объединить 2 файла в новый
« Ответ #4 Отправлен: Июнь 06, 2019, 18:41:21 »

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Примеры файлов можете прикрепить ?

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 138

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0

Оффлайн Tosyk [?]

  • Новичок
  • *
  • Сообщений: 138

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Примеры файлов можете прикрепить ?
у вас получилось или ещё не было времени?

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

Re: [Автоматизация] Объединить 2 файла в новый
« Ответ #7 Отправлен: Июнь 08, 2019, 17:36:55 »

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
у вас получилось или ещё не было времени?
Ещё не занимался

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

Re: [Автоматизация] Объединить 2 файла в новый
« Ответ #8 Отправлен: Июнь 08, 2019, 18:14:06 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
2588 Просмотров
Последний ответ Февраль 06, 2013, 04:45:44
от joiner
3 Ответов
1846 Просмотров
Последний ответ Июнь 22, 2014, 18:00:30
от Z_Lenar
2 Ответов
1406 Просмотров
Последний ответ Август 04, 2014, 08:17:53
от madmasles
4 Ответов
1450 Просмотров
Последний ответ Сентябрь 20, 2014, 22:00:21
от Kasol
7 Ответов
1661 Просмотров
Последний ответ Ноябрь 08, 2014, 13:11:16
от vasykas
2 Ответов
1136 Просмотров
Последний ответ Март 13, 2015, 19:55:15
от Ksaan
3 Ответов
2298 Просмотров
Последний ответ Март 17, 2015, 16:49:27
от madmasles
2 Ответов
1895 Просмотров
Последний ответ Март 20, 2015, 06:10:26
от pvnn
10 Ответов
3214 Просмотров
Последний ответ Август 21, 2015, 19:10:21
от alex33
8 Ответов
2696 Просмотров
Последний ответ Июль 28, 2017, 22:05:09
от musicstashall