Заменять | в powershell

у меня есть следующая проблема, я нуждаюсь в том, чтобы заменить Pipe между "колонной" текстового файла, который я получаю с SAP со следующей структурой

Archivo de prueba

Поскольку возможно оценивать в файле, колонны отделены из-за pipes, и проблема, которая у меня есть, состоит в том, что в колонне текста какие-то из описаний он может содержать Pipe в этой, тогда, когда я касаюсь этот файл моего BD, он посылает мне ошибку, потому что он "думает", что этот Pipe - разделитель колонны.

Я старался создавать рукописный шрифт, но мне не удается решить это, моя идея была бы чем-то, как помещение моего первого курсора в колонну текста и второго перед Периодом, так как Период всегда находится после колонны Текста, рукописный шрифт, который у меня есть до настоящего времени, - следующий:

$log = get-content D:\test\archivo.txt | select -first 1 -skip 9
$logg = get-content D:\test\archivo.txt | select -first 1 -skip 11
$archivo = get-content D:\test\archivo.txt
$pos_ini = ($log | Select-String "Texto").Matches.Index
$pos_fin = ($log | select-string "Período").Matches.Index

#$pos_ini = [int]$pos_ini+1

$pos_fin = [int]$pos_fin-1

[int]$res = [int]$pos_fin-[int]$pos_ini


foreach ($line in $archivo) { 
$logg.Substring($pos_ini,$res) -replace '\|',' ' | Set-Content D:\test\archivo.TXT

#   if ($line -cmatch "\|") {
#   $quitar = $line.Split($pos_ini,$pos_fin)
#  $quitar

  #$quitar = $line.Substring($pos_ini,$pos_fin)


   #$line |  out-file -FilePath "D:\test\archivo.txt" -Append
#  }
} 

Которое не, поскольку делать значит заменять линию, где он содержал Pipe, и сохранять весь файл

2
задан 02.10.2019, 18:51
1 ответ

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

#Obtener la cabecera de la tabla
$sHeader = Get-Content "D:\DemoFile.txt" | Select-Object -first 1 -skip 9


#Obtener las lineas de la tabla
$sTable = Get-Content "D:\DemoFile.txt" | Select-Object -Skip 11


$aHeader = $sHeader.Split('|') | Where-Object { 

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

[110]

:


 93     |SOC      |ENT        |2019      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |
 93     |SOC      |ENT        |2819      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |
 93     |SOC      |ENT        |2019      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |
 93     |SOC      |ENT        |2019      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |

Ledger  Sociedad EntidadCP  Ejercicio NoDoc      PosDoc    NoImp    Texto                                    Periodo MasCol
------  -------- ---------  --------- -----      ------    -----    -----                                    ------- ------
 93     SOC      ENT        2019      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
 93     SOC      ENT        2819      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
 93     SOC      ENT        2019      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
 93     SOC      ENT        2019      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
-ne '' } # Extraer Nombre de las columnas $PSData=@() foreach ($sColValue in $sTable) { $aData=@() For ($i = 0; $i -le $aHeader.Count - 1; $i++) { $iStartPos = $sHeader.IndexOf($aHeader[$i]) #Inicio de la cadena a extraer $iEndPos= $aHeader[$i].Length $sData=$sColValue.Substring($iStartPos,$iEndPos) $aData+=$sData #Solo para crear un Objeto personalizado de powershell y visualizar los datos con Format-Table Write-Host $sData "|" -NoNewline #Imprimir cada Valor de la fila/linea procesada } Write-Host "" #Salot de linea en la consola #Object personalizado $PSData += [PSCustomObject]@{ Ledger = $aData[0] Sociedad = $aData[1] EntidadCP=$aData[2] Ejercicio=$aData[3] NoDoc=$aData[4] PosDoc=$aData[5] NoImp=$aData[6] Texto=$aData[7] Periodo=$aData[8] MasCol=$aData[9]} } #Imprimir el Objecto Personalizado $PSData | Format-Table -AutoSize

:


 93     |SOC      |ENT        |2019      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |
 93     |SOC      |ENT        |2819      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |
 93     |SOC      |ENT        |2019      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |
 93     |SOC      |ENT        |2019      |12345678   |    8     |   1     |PUEDE CONTENER UN| DENTRO DE ESTA COLUMN |   12   |               |

Ledger  Sociedad EntidadCP  Ejercicio NoDoc      PosDoc    NoImp    Texto                                    Periodo MasCol
------  -------- ---------  --------- -----      ------    -----    -----                                    ------- ------
 93     SOC      ENT        2019      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
 93     SOC      ENT        2819      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
 93     SOC      ENT        2019      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
 93     SOC      ENT        2019      12345678       8        1     PUEDE CONTENER UN| DENTRO DE ESTA COLUMN    12
0
ответ дан 01.12.2019, 16:00