Добавление новой строки текста в текстовый файл - PullRequest
0 голосов
/ 02 октября 2018

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

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   

       } 


    }

1 Ответ

0 голосов
/ 02 октября 2018

Одним из возможных решений является инициализация пустого массива ($newcontent) перед выполнением итерации по содержимому $content, заполнение $newcontent требуемым содержимым и затем вывод его в текстовый файл:

function leeyedita() 
{
    $content = Get-Content $root\UNB\FINAL_TEXTO\FACT_FINAL.txt

    # Initialize empty array
    $newcontent = @()

    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]

           # Add the current line and then the missing IVA line 
           $newcontent += $line
           $newcontent += "%IVA : 0.00"
       } 

       elseif ($line.StartsWith("%IVA")-and ($nextline.StartsWith("TOTALES"))) {
            Write-Host "NO ENCONTRE SERVICIO"

            # Add the current line and then the missing SER line 
            $newcontent += $line 
            $newcontent += "%SER : 0.00"
       }    

       else {
          #Write-Host "NO ES"

          # Add current line
          $newcontent += $line
       }
   }

   # Output new content to file
   $newcontent | out-file $root\UNB\FINAL_TEXTO\FACT_FINAL.txt   
}

Если вы хотите выровнять новый текст так же, как и другие текстовые записи, посмотрите , как форматировать строки в powershell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...