Как удалить пробелы из строки автоматизации для экспорта в команду SQLPlus SELECT файла LockedOut.sql - PullRequest
0 голосов
/ 12 января 2019

Это автоматизация команды для SQLPlus 12c в Linux из версии Windows 18_3 в PowerShell 5.1 с загруженными модулями Microsoft. Мне нужно очистить пробел в строке для ввода подстановочных данных в сценарии автоматического выбора (последний сценарий найдет отсутствующее изображение TIFF и снова вставит его). Я не в состоянии удалить пробел до tee.

Последние попытки в посте, но я пробовал Trim, Split, Replace, Remove, Substring, >>, Write-Host -NoNewline, ... Я НАСТОЛЬКО близок.

Когда я Write-Host -NoNewline мне удалось удалить CRLF, но не так, как я мог Tee, Write-Out или Out-File таким образом содержимое.

#Add-Type -AssemblyName System.Data.OracleClient
$filefolder = "C:\EMSCadre\iGateway\clint\Input_Images\"
$Files = Get-ChildItem $FileFolder -Name -File
$longname = $Files.Get(2)
$shortname = $longname.Replace("_tiff","").Replace("cns","").Substring(9).Split('".tif"')
echo "select LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %$shortname%" |
    tee -Verbose c:\scripts\input\lockedout_test.sql
type c:\scripts\input\lockedout_test.sql

#Failed attempts
#echo "select LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %($shortname1.TrimEnd('_',"")%" |
#  tee -Verbose c:\scripts\input\lockedout_test.sql

Последние результаты, отображающие пробелы до последнего %:

select LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %100838953_180130001    %
select LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %100838953_180130001    %

Подробности, которые помогут устранить неполадки:

PS C:\scripts> $Files
2823910000.tif
2823910002.tif
cns20180827_100838953_180130001_tiff.tif
exposureworks-dynamic-range-test-f16-graded-TIFF-RGB-parade.jpg

PS C:\scripts> $shortname
100838953_180130001

1 Ответ

0 голосов
/ 12 января 2019

выглядит как последний шаг (Split()) утверждения

$longname.Replace("_tiff","").Replace("cns","").Substring(9).Split('".tif"')

предполагается удалить расширение из имени файла. Это не то, как Split() работает. Метод интерпретирует строку ".tif" как массив символов и разбивает данную строку на любой из этих символов (", ., f, i, t). Разделив строку 100838953_180130001.tif, вы получите массив из 5 элементов, последние 4 из которых являются пустыми строками:

[ '100838953_180130001', '', '', '', '' ]

Помещение переменной с этим массивом в строку приводит к преобразованию массива в строку путем объединения его элементов с использованием разделителя выходного поля ($OFS), который по умолчанию представляет собой один пробел, создавая, таким образом, конечные пробелы, которые вы наблюдали.

Чтобы удалить префикс cns..._ и подстроку _tiff, а также расширение .tif из имени файла, используйте следующее:

$shortname = $longname -replace '^cns\d*_|_tiff|\.tif$'

Эта замена регулярного выражения удалит подстроку "cns", за которой следует любое количество цифр и знак подчеркивания в начале строки (^), подстроку "_tiff" из любого места строки и подстроку " .tif "от конца строки ($).

...