
Ich hatte die Anforderung den Inhalt einer CSV-Datei in einer Tabelle in einem MediaWiki zu importieren. Bei wenigen Zeilen ist dieses manuell noch möglich. Es gab auch längere Dateien. Dazu habe ich mir ein Powershell-Skript erstellt:
Param(
[Parameter(Mandatory)]
[string]$InputCSV,
[Parameter(Mandatory)]
[string]$OutputFile,
[string]$TableClass = 'wikitable sortable'
)
# 1. Datei komplett als Text einlesen
$raw = Get-Content -Path $InputCSV -Raw -ErrorAction Stop
# 2. Ersten Zeile extrahieren und Delimiter bestimmen
$firstLine = ($raw -split "`r?`n")[0]
$commaCount = ($firstLine | Select-String -Pattern ',' -AllMatches).Matches.Count
$semicolonCount = ($firstLine | Select-String -Pattern ';' -AllMatches).Matches.Count
$delimiter = if ($semicolonCount -gt $commaCount) { ';' } else { ',' }
Write-Host "Erkannter Delimiter: '$delimiter'"
# 3. CSV-Daten parsen
$data = $raw |
ConvertFrom-Csv -Delimiter $delimiter
if (-not $data) {
Write-Error "Keine Daten gefunden oder Parsing-Fehler."
exit 1
}
# 4. MediaWiki-Markup aufbauen
$headers = $data[0].PSObject.Properties.Name
$out = @()
$out += "{| class=""$TableClass"""
$out += '! ' + ($headers -join ' !! ')
foreach ($row in $data) {
$out += "|-"
$cells = foreach ($h in $headers) {
# Sonderzeichen oder Pipes maskieren
($row.$h -replace '\|','|') -replace "`r?`n"," "
}
$out += '| ' + ($cells -join ' || ')
}
$out += "|}"
# 5. In Datei schreiben (UTF8 ohne BOM)
$out | Set-Content -Path $OutputFile -Encoding UTF8
Write-Host "Datei erstellt."
Die Datei kann wie folgt gestartet werden:
.\MediaWikiCreateTable.ps1 -InputCSV C:\CSV_Daten.csv -OutputFile C:\MW_Tabelle.txt