У меня есть эта функция, чтобы заглянуть внутрь документа.По сути, я ищу недостающие данные и добавляю их.Так, например, полные данные будут выглядеть так:
SubTotal : 30,473.00
%IVA : 3,960.00
%SER : 3,047.00
TOTALES : 37,483.00
Но если какая-либо из этих строк отсутствует, я должен добавить ее с нулевым значением.Пока что это функция, которая ищет это.Кажется, работает, но я не знаю, что делать, как добавить недостающие данные в эту конкретную строку, используя PowerShell
Вот функция:
function leeyedita()
{
$content = Get-Content $root\UNB\FINAL_TEXTO\FACT_FINAL.txt
for($i = 0; $i -lt $content.Count; $i++) {
$line = $content[$i]
$nextLine = $content[$i+1]
if ($line.StartsWith("SubTotal")-and ($nextline.StartsWith("%SER"))) {
Write-Host "NO ENCONTRE IVA"
Write-Host $content[$i]
# Replace the line with the Replacement Line Text.
}
elseif ($line.StartsWith("%IVA")-and ($nextline.StartsWith("TOTALES"))) {
Write-Host "NO ENCONTRE SERVICIO"
}
else {
#Write-Host "NO ES"
}
}
}
Thanks a lot for the help!
UPDATE:
Sometimes the file can have 2 totals :
TOTALES : 14,383.00
Descuento Aplicado: 1,598.00
TOTALES : 14,383.00
I want to delete the second one, so I created an if condition
elseif ($line.StartsWith("Descuento Aplicado")-and ($nextline.StartsWith("TOTALES"))) {
Replace the line with the Replacement Line Text.
Write-Host "ENCONTRE DESCUENTO" -fore white
$newcontent += ""
}
That would create a blank line. But I want to delete the line. Is there a way?
Thanks!
ОБНОВЛЕНИЕ 8 ОКТЯБРЯ 2018:
Я столкнулся с новой проблемой.Проблема в том, что когда файл поставляется без обслуживания (% SER) и вы применяете скидку, скрипт напишет правильную сумму 0, но не удалит первые итоги.
Мне нужно удалять первые итоги каждый раз, когда я их получаю (что происходит только тогда, когда скидка (Descuento Aplicado) имеет значение в файле. Я не знаю, почему она не выполняет функцию else if, которая выполняет это условие....
elseif ($line.StartsWith("TOTALES")-and (!$previousLine.StartsWith("DescuentoAplicado")-and ($booldesc-eq 1)))
SubTotal: 8,122.00
%IVA : 959.00
%SER : 0.00
TOTALES : 9,073.00
DescuentoAplicado: 918.00
TOTALES : 9,073.00
(COLONES)
Это обновленный код:
function leeyedita()
{
write-host "FUNCION LEE Y EDITA TXT" -fore white
$content = Get-Content $root\UNB\FINAL_TEXTO\FACT_FINAL.txt
$newcontent = @()
$boolserv=0
$booliva=0
$boolpropina=0
$booldesc=0
for($i = 0; $i -lt $content.Count; $i++){
$line = $content[$i]
if ($line.StartsWith("DescuentoAplicado"))
{
$booldesc=1
}
elseif ($line.StartsWith("%IVA"))
{
$booliva=1
}
elseif ($line.StartsWith("%SER"))
{
$boolserv=1
}
elseif ($line.StartsWith("PROPINA"))
{
$boolpropina=1
}
}
Write-Host "SERV $boolserv IVA $booliva PROP $boolpropina DESC $booldesc"
for($i = 0; $i -lt $content.Count; $i++){
$line = $content[$i]
$previousLine = $content[$i-1]
$nextLine = $content[$i+1]
if ($line.StartsWith("SubTotal")-and ($booliva-eq 0)) {
# Replace the line with the Replacement Line Text.
Write-Host "NO ENCONTRE IVA" -fore white
$newcontent += $line
$newcontent += '{0, 0}'-f"%IVA : 0.00"
$booliva=1
}
elseif ($line.StartsWith("TOTALES")-and ($boolserv-eq 0)) {
# Replace the line with the Replacement Line Text.
Write-Host "NO ENCONTRE SERVICIO" -fore white
$newcontent += '{0, 0}'-f"%SER : 0.00"
$newcontent += $line
$boolserv=1
}
elseif ($line.StartsWith("TOTALES")-and($booldesc-eq 0)) {
# Replace the line with the Replacement Line Text.
Write-Host "NO ENCONTRE DESCUENTO" -fore white
$newcontent += '{0, 0}'-f"DescuentoAplicado : 0.00"
$newcontent += $line
$booldesc=1
}
elseif ($line.StartsWith("TOTALES")-and (!$previousLine.StartsWith("DescuentoAplicado")-and ($booldesc-eq 1))) {
# Replace the line with the Replacement Line Text.
Write-Host "ENCONTRE DESCUENTO" -fore white
}
else {
#Write-Host "LINEA NORMAL"
$newcontent += $line
}
#Write-Host "ESCRIBIENDO ARCHIVO"
$newcontent | out-file $root\UNB\FINAL_TEXTO\FACT_FINAL.txt
}
}