Сценарий UltraEdit с использованием saveAs ("^ c") - PullRequest
0 голосов
/ 07 июня 2019

Я использую макрос Excel для вызова UltraEdit, чтобы выполнить скрипт для некоторых файлов.

В макросе Excel я пишу путь, по которому я хочу сохранить новый файл с помощью скрипта UltraEdit.До этого момента все работало, и если я делаю запись значения, которое я прочитал во временном файле, я вижу, что у меня правильный путь.Но когда я использую saveAs ("^ c"), файл не сохраняется по указанному мною пути, а вместо этого сохраняется в текущем каталоге.

Если я использую следующий код, файл сохраняется правильно,Но я не хочу жестко кодировать путь:

  var sPath="H:\\IPEX\\DataFiles\\IPEX_Originals_Cleaned_Files\\"
      + sTransSet 
      +"_"
      + sDocNum
      + "_"
      + now.getFullYear()
      + month
      + day
      + "-"
      + hours
      + minutes
      + seconds
      + ".txt";          

   UltraEdit.saveAs(sPath);

Это код, который я пытаюсь исправить:

UltraEdit.selectClipboard(1); // switch to user clipboard #1   
var sPath=asParameterList[0]
      + sTransSet 
      +"_"
      + sDocNum
      + "_"
      + now.getFullYear()
      + month
      + day
      + "-"
      + hours
      + minutes
      + seconds
      + ".txt";

UltraEdit.clipboardContent=sPath;          

UltraEdit.outputWindow.write("sPath Value After assign= "+sPath);   
UltraEdit.saveAs("^c");

Команда записи показывает мне следующее:

sPath Value After assign=  

H:\\IPEX\\DataFiles\\IPEX_Originals_Cleaned_Files\\856_IPEX-155630-2_20190607-152606.txt

Вместо сохранения файла в каталоге

H:\\IPEX\\DataFiles\\IPEX_Originals_Cleaned_Files\\ 

он сохраняет файл в каталоге

H:\IPEX\DataFiles\Boomi_IPEX_Files

, который является каталогом исходного файла.

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Я согласен с Александром Павловым и его анализом причины проблемы.Полное имя файла в буфере обмена недопустимо из-за начальных символов новой строки.

И строка полного имени файла содержит дополнительно \\ вместо \ в качестве разделителя каталогов.\\ в пути к файлу не является проблемой для функций ядра файловой системы Windows по сравнению с символом новой строки, который является недопустимым символом для имени файла или пути в соответствии с документацией Microsoft Именование файлов, путей и пространств имен ,Однако полное имя файла должно быть на 100% правильным.

Эти проблемы лучше всего исправить в макросе Visual Basic в файле Excel.В строках Visual Basic символ обратной косой черты не является escape-символом, как в других языках программирования и сценариев.Поэтому путь к файлу должен быть определен в макросе Visual Basic только с \ и , а не с \\.Кроме того, перед копированием полного имени файла в буфер обмена необходимо удалить начальные пробелы / символы табуляции / новой строки из строки пути к файлу в макросе Excel.

Конечно, перед сохранением можно также использовать в сценарии UltraEdit следующую строкуновый файл с полным именем в буфере обмена.

UltraEdit.clipboardContent = UltraEdit.clipboardContent.replace(/^\s+/,"").replace(/\\\\/g,"\\");

Первая замена удаляет все начальные пробелы в соответствии с определением Unicode, а вторая замена изменяет все вхождения \\ до \ в строке имени файладо того, как фиксированное полное имя файла будет скопировано обратно в буфер обмена.

Но на самом деле нет необходимости использовать буфер обмена, как написано Александр Павлов .Недопустимая строка полного полного имени файла уже сохранена в объекте JavaScript String с не очень хорошим именем sPath.Лучшее имя для этой строковой переменной будет sFullFileName.Функция UltraEdit UltraEdit.saveAs() ожидает объект String в качестве параметра.Таким образом, также можно использовать в сценарии UltraEdit:

var sFullFileName = sPath.replace(/^\s+/,"").replace(/\\\\/g,"\\");
UltraEdit.saveAs(sFullFileName);

Примечание: Замена всех вхождений \\ на \ будет неправильной для полного квалифицированного имени файла, имеющего UNC путь, который должен начинаться с двух обратных косых черт.

1 голос
/ 08 июня 2019

Ваш отладочный вывод выводит имя файла в новой строке.Кажется, имени файла предшествует символ новой строки.Я думаю, именно поэтому он не работает.Попробуйте обрезать все пробелы и новые строки от sPath до первого символа.

...