PowerShell: Datei zeilenweise alternierend aufteilen

26. März 2015 11:27

Da im Translator Hub (Nachtrag: abgelöst durch DTS) die Quell- und Zielsprache in getrennten Dateien verwaltet werden können (Option Monolingual Documents) und dabei anhand der Zeilennummern korrespondieren müssen (entgegen der NAV-üblichen Vorgehensweise, alle Sprachen in einer Datei zu speichern) habe ich hier eine Funktion erstellt, die eine Datei zeilenweise alternierend auf 2 Dateien aufteilt.
Ausgangsdatei (DEU und FRA Captions über Hilfstabelle aus NAV exportiert, dann in Unicode UTF-8 konvertiert)
DEUFRATranslation.png

Anzeige zur Laufzeit
DEUFRATranslation2.png

Die beiden erzeugten separaten Dateien:
DEUFRATranslation3.png


Beim Export der Quelldatei muss natürlich darauf geachtet werden, dass auch immer eine Übersetzung vorhanden ist, also Quell-und Zielsprache durchgehend alternierend vorhanden sind.

Variante 1: Mit festen Dateipfadangabe in der Funktion
Code:
function SplitAlternatingLines
 {
 $lines = Get-Content C:\Temp\DEUFRA_Translation_UTF8.txt | Measure-Object –Line
 $Nooflines = $lines.Lines
 write-host "File has $Nooflines lines"

 IF (Test-Path C:\Temp\evenlines.txt) {Remove-Item C:\Temp\evenlines.txt}
 IF (Test-Path C:\Temp\unevenlines.txt) {Remove-Item C:\Temp\unevenlines.txt}

 for ($i = 0; $i -le $lines.Lines; $i++)
 {
  $Currline = (Get-Content C:\Temp\DEUFRA_Translation_UTF8.txt)[$i]
  if ($i%10 -eq 0) {Write-Host "Splitting line $i of $Nooflines"}
  if (($i%2 -eq 0) -or ($i -eq 0))
   {out-file C:\Temp\evenlines.txt -inputobject $Currline -force -append -Width 500 -Encoding utf8}
  else
  {out-file C:\Temp\unevenlines.txt -inputobject $Currline -force -append -Width 500 -Encoding utf8}
 }
}


Variante 2: Mit freier Dateipfadangabe als Funktionsparameter mittels $args
Code:
    function SplitAlternatingLines2
     {
     $lines = Get-Content $args | Measure-Object –Line
     $Nooflines = $lines.Lines
     write-host "File has $Nooflines lines"

     IF (Test-Path C:\Temp\evenlines.txt) {Remove-Item C:\Temp\evenlines.txt}
     IF (Test-Path C:\Temp\unevenlines.txt) {Remove-Item C:\Temp\unevenlines.txt}

     for ($i = 0; $i -le $lines.Lines; $i++)
     {
      $Currline = (Get-Content $args)[$i]
      if ($i%10 -eq 0) {Write-Host "Splitting line $i of $Nooflines"}
      if (($i%2 -eq 0) -or ($i -eq 0))
       {out-file C:\Temp\evenlines.txt -inputobject $Currline -force -append -Width 500 -Encoding utf8}
      else
      {out-file C:\Temp\unevenlines.txt -inputobject $Currline -force -append -Width 500 -Encoding utf8}
     }
    }

Tags: UTF8
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: PowerShell: Datei zeilenweise alternierend aufteilen

31. März 2015 18:02

Wenn die Dateien in den Translator Hub hochgeladen werden sollen und Abkürzungspunkte vorhanden sind, empfiehlt es sich, aufbauend auf den Einzeldateien eine XLIFF zu erstellen und statt diesen beiden hochzuladen. Die Abkürzungspunkte in den Einzeldateien werden sonst dort als Satzende interpretiert und verderben für den betroffenen und den Folgesatz dann die Synchronisation.