Files
IO-Konvertierer/Test-Skripte/GUI-Angepasst2_Lauffaehig.ps1
2023-06-13 15:37:11 +02:00

1005 lines
31 KiB
PowerShell

# Änderungsziel vs. 1: Funktion bei Klick auf "Auswählen" und "Zurück" auslagern
# Knwon problem: Zugriffsversuch auf einen Ordner, für den der Nutzer keine Freigabe hat. Aktuell kein Lösungsansatz bekannt.
# Todo: siehe Zettel!
Function Main
{
Write-Host "Programmstart"
$StartPfad = ""
$PfadUrsprungsdatei = GuiTxtWaehlen $StartPfad
Write-Host "Pfad Ursprungsdatei: " $PfadUrsprungsdatei
# Testen, ob übergebener Pfad gültig ist? Könnte ungültig sein, wenn in PfadFeld unsinn steht und das Fenster via x geschlossen wird
$PfadUrsprungsdateiMod = Split-Path $PfadUrsprungsdatei
$PfadZielDateien = GuiVerzeichnisWaehlen $PfadUrsprungsdateiMod
Write-Host "Dateirückgabe in Main(2): " $PfadZielDateien
$PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien
$PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien
#Write-Host "Dateiname EA: " $PfadDateiEA
#Write-Host "Dateiname DIDQ: " $PfadDateiDIDQ
ExcelDateiErstellen $PfadDateiEA
ExcelDateiErstellen $PfadDateiDIDQ
$AlleGleichenEA = ExcelDateiBeschreiben $PfadUrsprungsdatei "E" "A" $PfadDateiEA
$AlleGleichenDIDQ = ExcelDateiBeschreiben $PfadUrsprungsdatei "DI" "DQ" $PfadDateiDIDQ
Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA
$GleicheEingaenge = $AlleGleichenEA[0]
$GleicheAusgaenge = $AlleGleichenEA[1]
Write-Host "Gleiche Eingänge: " $GleicheEingaenge
Write-Host "Gleiche Ausgänge: " $GleicheAusgaenge
#Todo: Nur öffnen, wenn es weder gleiche Eingänge, noch gleiche Ausgänge gibt?
GuiGleicheAnzeigen $GleicheEingaenge $GleicheAusgaenge
}
Function GuiTxtWaehlen ($StartPfad)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# Eigenschaften Fenster
$Fenster = New-Object System.Windows.Forms.Form
$Fenster.Size = New-Object System.Drawing.Size(900,600) #Breite, Höhe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann
$Fenster.MinimumSize = $Fenster.Size
# PfadFeld
$PfadFeld = New-Object System.Windows.Forms.TextBox
$PfadFeld.Location = New-Object System.Drawing.Size(10,10)
$PfadFeld.Size = New-Object System.Drawing.Size(860,20)
$PfadFeld.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionPfadFeld $Taste
})
$Fenster.Controls.Add($PfadFeld)
# ListeOrdnernamen
$ListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$ListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$ListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$ListeOrdnernamen.Height = 450
$ListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$ListeOrdnernamen.Add_DoubleClick({
# Variablen bestimmen zur Übergabe
$Auswahl = $ListeOrdnernamen.SelectedItem
$Pfad = $PfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $Pfad
# Pfad aktualisieren
TXTVerzeichnisAuswaehlen $Pfad $Auswahl
})
$ListeOrdnernamen.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionListeOrdnernamen $Taste
})
$Fenster.Controls.Add($ListeOrdnernamen)
<#
# Beispiel Textfeld
$Textfeld1 = New-Object System.Windows.Forms.Label
$Textfeld1.Location = New-Object System.Drawing.Size(7,500)
$Textfeld1.Size = New-Object System.Drawing.Size(130,15)
$Textfeld1.Text = "Beispiel Text"
$Fenster.Controls.Add($Textfeld1)
#>
# ZurückButton
$ZurückButton = New-Object System.Windows.Forms.Button
$ZurückButton.Location = New-Object System.Drawing.Size(10,500)
$ZurückButton.Size = New-Object System.Drawing.Size(100,30)
$ZurückButton.Text = "Zurück"
$ZurückButton.Add_Click({
# Write-Host "Pfad ausgabe: " $PfadFeld.Text
$Pfad = $PfadFeld.Text
#Pfad aktualisieren
TXTVerzeichnisZurueck $Pfad
})
$ZurückButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionButtons $Taste
})
$Fenster.Controls.Add($ZurückButton)
# AuswählenButton
$AuswählenButton = New-Object System.Windows.Forms.Button
$AuswählenButton.Location = New-Object System.Drawing.Size(750,500)
$AuswählenButton.Size = New-Object System.Drawing.Size(100,30)
$AuswählenButton.Text = "Auswählen"
$AuswählenButton.Add_Click({
# Variablen bestimmen zur Übergabe
$Auswahl = $ListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
if ($($Auswahl.length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
$Pfad = $PfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $Pfad
# Pfad aktualisieren
TXTVerzeichnisAuswaehlen $Pfad $Auswahl
})
$AuswählenButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionButtons $Taste
})
$Fenster.Controls.Add($AuswählenButton)
# Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird
$A = TXTAnzeigeAktualisieren $StartPfad
$Fenster.Add_Shown({$Fenster.Activate()})
[void]$Fenster.ShowDialog()
$Rueckgabe = $PfadFeld.Text
Write-Host "Rückgabe: " $Rueckgabe
return $Rueckgabe
}
#--------------------------------------------------------- E N D E G U I txtWaehlen ----------------------------------------------------------------------
#------------------- Funktionen nur für das txt-GUI --------------------------
# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles
# Für Laufwerke muss $Pfad = "" sein
Function TXTAnzeigeAktualisieren ($Pfad)
{
# Write-Host "Übergebener Pfad: " $Pfad
# Sicherstellen, dass es das Verzeichnis gibt
if ($($Pfad -eq "") -or $(PfadExistiert $Pfad))
{
# Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen
if ($Pfad.Length -ne "")
{
# Es handelt sich um Ordner
$Optionen = TXTOptionen $Pfad
$Fenster.Text = $(Split-Path $Pfad -Leaf)
}
elseif ($Pfad.Length -eq "")
{
# Es handelt sich um Laufwerke
$Optionen = LaufwerkeFinden
$Pfad = ""
$Fenster.Text = "Laufwerke"
}
else
{
Write-Host "Fehler bei Anzeige aktualisieren"
# Fehler(?)
}
$PfadFeld.Text = $Pfad
$ListeOrdnernamen.Items.Clear()
foreach ($Option in $Optionen)
{
if ($Option.Length -gt 0)
{
$ListeOrdnernamen.Items.Add($Option)
}
}
}
else
{
TXTAnzeigeAktualisieren ""
}
return
}
Function TXTVerzeichnisAuswaehlen ($Pfad, $Auswahl)
{
if ($Pfad.length -gt 0)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
}
else
{
$Pfad = $Auswahl
}
#Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen
if ($Auswahl.length -eq 0)
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
# Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen
if ($($Auswahl -match ".txt"))
{
# Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad
# Write-Host "Dateityp: " $Pfad.GetType()
$Fenster.Dispose()
# Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht
$PfadFeld.Text = $Pfad
return
}
TXTAnzeigeAktualisieren $Pfad
return
}
Function TXTVerzeichnisZurueck ($Pfad)
{
if ($Pfad.Length -gt 3)
{
# Weiter mit Ordnern
# Write-Host "Ordner anzeigen"
$Pfad = Split-Path $Pfad
}
elseif ($Pfad.Length -le 3)
{
# Weiter mit Laufwerken
# Write-Host "Laufwerke anzeigen"
$Pfad = ""
}
else
{
Write-Host "Fehler bei Verzeichnis zurück"
# Fehler/ Nichts tun?
# Ermitteln: wann tritt dieser Fall ein?
}
TXTAnzeigeAktualisieren $Pfad
return
}
Function TXTTastenReaktionPfadFeld($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Pfad = $PfadFeld.Text
# Write-Host "Pfad: " $Pfad
TXTReaktionReturn $Pfad
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function TXTTastenReaktionListeOrdnernamen($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Auswahl = $ListeOrdnernamen.SelectedItem
if ($($Auswahl.Length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
$Pfad = $PfadFeld.Text
# Write-Host "Auswahl: " $Auswahl
# Write-Host "Pfad: " $Pfad
TXTVerzeichnisAuswaehlen $Pfad $Auswahl
}
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $PfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
TXTVerzeichnisZurueck $Pfad
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function TXTTastenReaktionButtons($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $PfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
TXTVerzeichnisZurueck $Pfad
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function TXTOptionen($Pfad)
{
# Unterordner und .txt-Dateien finden
# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können
[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad
$TxtDateien = TxtDateienFinden $Pfad
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$Optionen = $UnterOrdner + $TxtDateien
return $Optionen
}
Function TXTReaktionReturn ($Pfad)
{
if (PfadExistiert $Pfad)
{
# Gültiger Pfad oder .txt-Datei
$PfadEnde = $(Split-Path $Pfad -Leaf)
if ($($PfadEnde -match ".txt"))
{
$Fenster.Dispose()
# Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht richtig
$PfadFeld.Text = $Pfad
return
}
else
{
TXTAnzeigeAktualisieren $Pfad
}
}
else
{
# Laufwerke aktualisieren oder ungültiger Pfad
TXTAnzeigeAktualisieren ""
}
return
}
Function GuiVerzeichnisWaehlen ($StartPfad)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# Eigenschaften Fenster
$Fenster = New-Object System.Windows.Forms.Form
$Fenster.Size = New-Object System.Drawing.Size(900,600) #Breite, Höhe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann
$Fenster.MinimumSize = $Fenster.Size
# PfadFeld
$PfadFeld = New-Object System.Windows.Forms.TextBox
$PfadFeld.Location = New-Object System.Drawing.Size(10,10)
$PfadFeld.Size = New-Object System.Drawing.Size(860,20)
$PfadFeld.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionPfadFeld $Taste
})
$Fenster.Controls.Add($PfadFeld)
# ListeOrdnernamen
$ListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$ListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$ListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$ListeOrdnernamen.Height = 450
$ListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$ListeOrdnernamen.Add_DoubleClick({
# Variablen bestimmen zur Übergabe
$Auswahl = $ListeOrdnernamen.SelectedItem
$Pfad = $PfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $Pfad
# Pfad aktualisieren
VERVerzeichnisAuswaehlen $Pfad $Auswahl
})
$ListeOrdnernamen.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionListeOrdnernamen $Taste
})
$Fenster.Controls.Add($ListeOrdnernamen)
<#
# Beispiel Textfeld
$Textfeld1 = New-Object System.Windows.Forms.Label
$Textfeld1.Location = New-Object System.Drawing.Size(7,500)
$Textfeld1.Size = New-Object System.Drawing.Size(130,15)
$Textfeld1.Text = "Beispiel Text"
$Fenster.Controls.Add($Textfeld1)
#>
# ZurückButton
$ZurückButton = New-Object System.Windows.Forms.Button
$ZurückButton.Location = New-Object System.Drawing.Size(10,500)
$ZurückButton.Size = New-Object System.Drawing.Size(100,30)
$ZurückButton.Text = "Zurück"
$ZurückButton.Add_Click({
# Write-Host "Pfad ausgabe: " $PfadFeld.Text
$Pfad = $PfadFeld.Text
#Pfad aktualisieren
VERVerzeichnisZurueck $Pfad
})
$ZurückButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionButtons $Taste
})
$Fenster.Controls.Add($ZurückButton)
# AuswählenButton
$AuswählenButton = New-Object System.Windows.Forms.Button
$AuswählenButton.Location = New-Object System.Drawing.Size(630,500)
$AuswählenButton.Size = New-Object System.Drawing.Size(100,30)
$AuswählenButton.Text = "Auswählen"
$AuswählenButton.Add_Click({
# Variablen bestimmen zur Übergabe
$Auswahl = $ListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
if ($($Auswahl.length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
$Pfad = $PfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $Pfad
if ($($ListeOrdnernamen.Items[0] -eq ""))
{
VERAuswahlBestaetigt $Pfad $Auswahl
}
else
{
# Pfad aktualisieren
VERVerzeichnisAuswaehlen $Pfad $Auswahl
}
})
$AuswählenButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionButtons $Taste
})
$Fenster.Controls.Add($AuswählenButton)
# BestätigenButton
$BestätigenButton = New-Object System.Windows.Forms.Button
$BestätigenButton.Location = New-Object System.Drawing.Size(750,500)
$BestätigenButton.Size = New-Object System.Drawing.Size(100,30)
$BestätigenButton.Text = "Bestätigen"
$BestätigenButton.Add_Click({
$Auswahl = $ListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
if ($($Auswahl.length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
$Pfad = $PfadFeld.Text
VERAuswahlBestaetigt $Pfad $Auswahl
})
$BestätigenButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionButtons $Taste
})
$Fenster.Controls.Add($BestätigenButton)
# Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird
$A = VERAnzeigeAktualisieren $StartPfad
$Fenster.Add_Shown({$Fenster.Activate()})
[void]$Fenster.ShowDialog()
$Rueckgabe2 = $PfadFeld.Text
Write-Host "Rückgabe: " $Rueckgabe2
return $Rueckgabe2
}
#--------------------------------------------------------- E N D E G U I VerzeichnsWaehlen ----------------------------------------------------------------------
#------------------- Funktionen nur für das VerzeichnisWaehlen-GUI --------------------------
# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles
# Für Laufwerke muss $Pfad = "" sein
Function VERAnzeigeAktualisieren ($Pfad)
{
# Write-Host "Übergebener Pfad: " $Pfad
# Sicherstellen, dass es das Verzeichnis gibt
if ($($Pfad -eq "") -or $(PfadExistiert $Pfad))
{
# Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen
if ($Pfad.Length -ne "")
{
# Es handelt sich um Ordner
$Optionen = VEROptionen $Pfad
$Fenster.Text = $(Split-Path $Pfad -Leaf)
}
elseif ($Pfad.Length -eq "")
{
# Es handelt sich um Laufwerke
$Optionen = LaufwerkeFinden
$Pfad = ""
$Fenster.Text = "Laufwerke"
}
else
{
Write-Host "Fehler bei Anzeige aktualisieren"
# Fehler(?)
}
$PfadFeld.Text = $Pfad
$ListeOrdnernamen.Items.Clear()
foreach ($Option in $Optionen)
{
if ($Option.Length -gt 0)
{
$ListeOrdnernamen.Items.Add($Option)
}
}
}
else
{
VERAnzeigeAktualisieren ""
}
return
}
Function VERVerzeichnisAuswaehlen ($Pfad, $Auswahl)
{
#Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen
if ($Auswahl.length -eq 0)
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
if ($Pfad.length -gt 0)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
}
else
{
$Pfad = $Auswahl
}
VERAnzeigeAktualisieren $Pfad
return
}
Function VERVerzeichnisZurueck ($Pfad)
{
if ($Pfad.Length -gt 3)
{
# Weiter mit Ordnern
# Write-Host "Ordner anzeigen"
$Pfad = Split-Path $Pfad
}
elseif ($Pfad.Length -le 3)
{
# Weiter mit Laufwerken
# Write-Host "Laufwerke anzeigen"
$Pfad = ""
}
else
{
Write-Host "Fehler bei Verzeichnis zurück"
# Fehler/ Nichts tun?
# Ermitteln: wann tritt dieser Fall ein?
}
VERAnzeigeAktualisieren $Pfad
return
}
Function VERTastenReaktionPfadFeld($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Pfad = $PfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Es muss nicht überprüft werden, ob es das Verzeichnis gibt, da dies auch in VERAnzeigeAktualisieren gemacht wird
VERAnzeigeAktualisieren $Pfad
}
"ShiftKey" {
$Pfad = $PfadFeld.Text
$Auswahl = $ListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
if ($($Auswahl.length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
ReaktionShiftKey $Pfad $Auswahl
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function VERTastenReaktionListeOrdnernamen($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Auswahl = $ListeOrdnernamen.SelectedItem
if ($($Auswahl.Length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
$Pfad = $PfadFeld.Text
# Write-Host "Auswahl: " $Auswahl
# Write-Host "Pfad: " $Pfad
VERVerzeichnisAuswaehlen $Pfad $Auswahl
}
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $PfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
VERVerzeichnisZurueck $Pfad
}
"ShiftKey" {
$Pfad = $PfadFeld.Text
$Auswahl = $ListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
if ($($Auswahl.length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
ReaktionShiftKey $Pfad $Auswahl
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function VERTastenReaktionButtons($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $PfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
VERVerzeichnisZurueck $Pfad
}
"ShiftKey" {
$Pfad = $PfadFeld.Text
$Auswahl = $ListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
if ($($Auswahl.length -eq 0))
{
$Auswahl = $ListeOrdnernamen.Items[0]
}
ReaktionShiftKey $Pfad $Auswahl
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function VEROptionen($Pfad)
{
# Unterordner und .txt-Dateien finden
# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können
[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad
# $TxtDateien = TxtDateienFinden $Pfad
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$Optionen = $UnterOrdner
return $Optionen
}
Function VERAuswahlBestaetigt($Pfad, $Auswahl)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
if (PfadExistiert $Pfad)
{
Write-Host "Pfad zur Rückgabe: " $Pfad
$Fenster.Dispose()
$Pfadfeld.Text = $Pfad
return
}
}
Function GuiGleicheAnzeigen ($GleicheEingaenge, $GleicheAusgaenge)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# Eigenschaften Fenster
$Fenster = New-Object System.Windows.Forms.Form
$Fenster.Size = New-Object System.Drawing.Size(905,600) #Breite, Höhe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann
$Fenster.MinimumSize = $Fenster.Size
$Fenster.Text = "Mehrfach vorhandene Ein- und Ausgänge"
$Textfeld1 = New-Object System.Windows.Forms.Label
$Textfeld1.Location = New-Object System.Drawing.Size(10,10)
$Textfeld1.Size = New-Object System.Drawing.Size(430,20)
$Textfeld1.Text = "Bei den Eingängen gibt es folgende Duplikate: "
$Fenster.Controls.Add($Textfeld1)
$ListeEingänge = New-Object System.Windows.Forms.DataGridView
$ListeEingänge.Location = New-Object System.Drawing.Size(10,40)
$ListeEingänge.Size = New-Object System.Drawing.Size(430,20)
$ListeEingänge.Height = 450
$ListeEingänge.ColumnCount = 2
$ListeEingänge.ColumnHeadersVisible = $true
$ListeEingänge.Columns[0].Name = "Zeile"
$ListeEingänge.Columns[1].Name = "Kennzeichnung"
foreach ($GleichenEingang in $GleicheEingaenge)
{
Write-Host "Hinzufügen TabelleE: " $GleichenEingang
$ListeEingänge.Rows.Add($($GleichenEingang.Zeile),($GleichenEingang.Name))
}
$Fenster.Controls.Add($ListeEingänge)
$Textfeld2 = New-Object System.Windows.Forms.Label
$Textfeld2.Location = New-Object System.Drawing.Size(450,10)
$Textfeld2.Size = New-Object System.Drawing.Size(430,20)
$Textfeld2.Text = "Bei den Ausgängen gibt es folgende Duplikate: "
$Fenster.Controls.Add($Textfeld2)
$ListeAusgänge = New-Object System.Windows.Forms.DataGridView
$ListeAusgänge.Location = New-Object System.Drawing.Size(450,40)
$ListeAusgänge.Size = New-Object System.Drawing.Size(430,20)
$ListeAusgänge.Height = 450
$ListeAusgänge.ColumnCount = 2
$ListeAusgänge.ColumnHeadersVisible = $true
$ListeAusgänge.Columns[0].Name = "Zeile"
$ListeAusgänge.Columns[1].Name = "Kennzeichnung"
foreach ($GleichenAusgang in $GleicheAusgaenge)
{
Write-Host "Hinzufügen TabelleA: " $GleichenAusgang
$ListeAusgänge.Rows.Add($($GleichenAusgang.Zeile),($GleichenAusgang.Name))
}
$Fenster.Controls.Add($ListeAusgänge)
$BestätigenButton = New-Object System.Windows.Forms.Button
$BestätigenButton.Location = New-Object System.Drawing.Size(10,500)
$BestätigenButton.Size = New-Object System.Drawing.Size(860,30)
$BestätigenButton.Text = "Programm beenden"
$BestätigenButton.Add_Click({
$Fenster.Dispose()
return
})
$Fenster.Controls.Add($BestätigenButton)
$Fenster.Add_Shown({$Fenster.Activate()})
[void]$Fenster.ShowDialog()
}
#------------------- Funktionen für alle GUIs --------------------------
Function PfadExistiert ($Pfad)
{
if ($(Test-Path $Pfad -PathType Container) -or $(Test-Path $Pfad -Include "*.txt"))
{
# Write-Host "Bei dem Verzeichnis handelt es sich um eine *.txt-Datei oder ein gültiges Verzeichnis"
return $true
}
else
{
# Write-Host "Das Verzeichnis existiert nicht oder es wurde keine *.txt-Datei gewählt"
return $false
}
}
Function LaufwerkeFinden()
{
$Laufwerke = $(Get-PSDrive | Where-Object {$_.Free}).Name
$i = 0
foreach($Laufwerk in $Laufwerke)
{
$Laufwerke[$i] = $Laufwerk + ":\"
$i++
}
return $Laufwerke
}
Function UnterOrdnerFinden($Pfad)
{
# Write-Host "Ordner zum suchen von Unterordnern: " $Pfad
$UnterOrdner = $(Get-ChildItem $Pfad -Directory)
# Write-Host "Gefundene Unterordner: " $UnterOrdner
if ($($UnterOrdner.Length -gt 0))
{
$Ordner = $(Split-Path $UnterOrdner -Leaf)
}
else {
$Ordner = ""
}
# Write-Host "Gefundene Ordner: " $Ordner
return $Ordner
}
Function TxtDateienFinden($Pfad)
{
$TxtDateien = $(Get-Childitem $Pfad\*.txt)
if ($TxtDateien.Length -gt 0)
{
return $(Split-Path $TxtDateien -Leaf)
}
else
{
return
}
}
Function ReaktionShiftKey ($Pfad, $Auswahl)
{
if (PfadExistiert $Pfad)
{
VERAuswahlBestaetigt $Pfad $Auswahl
}
else
{
VERAnzeigeAktualisieren ""
}
return
}
#--------------------------------------- Ende Funktionen für GUI -------------------------------
Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDateien)
{
$BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf
$BasisNameZielDateiLaenge = $BasisNameZielDatei.Length
$BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4))
$GesamtPfadZielDatei = $PfadZielDateien + "\" + $Prefix + "_" + $BasisNameZielDateiKurz + ".xlsx"
return $GesamtPfadZielDatei
}
Function ExcelDateiErstellen ($DateiPfad)
{
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Add()
$Mappe.SaveAs($DateiPfad)
$Datei.Quit()
return
}
Function ExcelDateiBeschreiben ($PfadUrsprungsdatei, $Umwandler1, $Umwandler2, $ZielDatei)
{
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Open($ZielDatei)
$Blatt = $Mappe.WorkSheets.item(1)
$Datei.Visible = $false
$i = 1
$Wandler1 = @()
$ZuWandler1 = @(DI, BA, BB, BC, BD, BE, BF, BG, BH, BJ, BK, BL, BM, BN, BP, BQ, BR, BS, BT, BU, BV, BW, BX, BY, BZ, FA, FB, FC, FD, FE, FF, FG, FH, FJ, FK, FL, FM, FN, FP, FQ, FR, FS, FT, FU, FV, FW, FX, FY, FZ, SA, SB, SC, SD, SE, SF, SG, SH, SJ, SK, SL, SM, SN, SP, SQ, SR, SS, ST, SU, SV, SW, SX, SY, SZ)
$Wandler2 = @()
$ZuWandler2 = @(DQ, CA, CB, CC, CD, CE, CF, CG, CH, CJ, CK, CL, CM, CN, CP, CQ, CR, CS, CT, CU, CV, CW, CX, CY, CZ, EA, EB, EC, ED, EE, EF, EG, EH, EJ, EK, EL, EM, EN, EP, EQ, ER, ES, ET, EU, EV, EW, EX, EY, EZ, GA, GB, GC, GD, GE, GF, GG, GH, GJ, GK, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GV, GW, GX, GY, GZ, HA, HB, HC, HD, HE, HF, HG, HH, HJ, HK, HL, HM, HN, HP, HQ, HR, HS, HT, HU, HV, HW, HX, HY, HZ, KA, KB, KC, KD, KE, KF, KG, KH, KJ, KK, KL, KM, KN, KP, KQ, KR, KS, KT, KU, KV, KW, KX, KY, KZ, MA, MB, MC, MD, ME, MF, MG, MH, MJ, MK, ML, MM, MN, MP, MQ, MR, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, PA, PB, PC, PD, PE, PF, PG, PH, PJ, PK, PL, PM, PN, PP, PQ, PR, PS, PT, PU, PV, PW, PX, PY, PZ, QA, QB, QC, QD, QE, QF, QG, QH, QJ, QK, QL, QM, QN, QP, QQ, QR, QS, QT, QU, QV, QW, QX, QY, QZ, RA, RB, RC, RD, RE, RF, RG, RH, RJ, RK, RL, RM, RN, RP, RQ, RR, RS, RT, RU, RV, RW, RX, RY, RZ, TA, TB, TC, TD, TE, TF, TG, TH, TJ, TK, TL, TM, TN, TP, TQ, TR, TS, TT, TU, TV, TW, TX, TY, TZ)
$Fehler = @()
$Ursprungdatei = Get-Content $PfadUrsprungsdatei
foreach ($Eintrag in $Ursprungdatei)
{
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
if ($($($BMKZahl.Substring(0,2)) -in $ZuWandler1))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $Umwandler1 + $BMKZahl
$Wandler1 += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
elseif ($($($BMKZahl.Substring(0,2)) -in $ZuWandler2))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $Umwandler2 + $BMKZahl
$Wandler2 += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
else
{
Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar
$Blatt.Cells.Item($i,1) = $BMKZahl
$Blatt.Cells.Item($i,2) = $Kommentar
$i++
}
$Mappe.Save()
$Datei.Quit()
$GleicheWandler1 = GleicheFinden $Wandler1
$GleicheWandler2 = GleicheFinden $Wandler2
Write-Host "Gleiche für " $Umwandler1 ": " $GleicheWandler1
Write-Host "Gleiche für " $Umwandler2 ": " $GleicheWandler2
return $GleicheWandler1, $GleicheWandler2
}
Function GleicheFinden ($ZuUeberpruefen)
{
$ZuUeberpruefen = $ZuUeberpruefen | Sort-Object "Name"
$Gleiche = @()
for ($i = 0; $i -lt $($ZuUeberpruefen.Count - 1); $i++)
{
$IstGleich = $($ZuUeberpruefen[$i].Name -eq $ZuUeberpruefen[$($i+1)].Name)
if ($IstGleich)
{
# Eintrag hinzufügen
if (-not $($Gleiche[-1].Zeile -eq $ZuUeberpruefen[$i].Zeile))
{
$Gleiche += $ZuUeberpruefen[$i]
}
$Gleiche += $ZuUeberpruefen[$($i+1)]
#Write-Host "Gleiche: " $Gleiche
}
}
if ( $($Gleiche.Length -eq 0))
{
$Gleiche += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $Gleiche
}
Main