PowerShell: Datei zeilenweise alternierend aufteilen
Verfasst: 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)
Anzeige zur Laufzeit
Die beiden erzeugten separaten Dateien:
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
Variante 2: Mit freier Dateipfadangabe als Funktionsparameter mittels $args
Tags: UTF8
Ausgangsdatei (DEU und FRA Captions über Hilfstabelle aus NAV exportiert, dann in Unicode UTF-8 konvertiert)
Anzeige zur Laufzeit
Die beiden erzeugten separaten Dateien:
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