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

2163 lines
88 KiB
PowerShell

Function Main
{
$StartPfad = StartPfadHolen
GUI $StartPfad
}
Function GUI ($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(940,660) #Breite, Hoehe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Groesse des Fensters nicht veraendert werden kann
$Fenster.MinimumSize = $Fenster.Size
$Fenster.Text = "Dateikonvertierer I/O"
# Eigenschaften Tabs
$TabBasis = New-Object System.Windows.Forms.TabControl
$TabBasis.Location = New-Object System.Drawing.Size(10,10)
$TabBasis.Size = New-Object System.Drawing.Size(900,600)
$TabBasis.DataBindings.DefaultDataSourceUpdateMode = 0 # Was macht das?
$Fenster.Controls.Add($TabBasis)
# Tab: TXT-Pfad auswaehlen
$TabSeiteTXTAuswaehlen = New-Object System.Windows.Forms.TabPage
$TabSeiteTXTAuswaehlen.TabIndex = 0
$TabSeiteTXTAuswaehlen.UseVisualStyleBackColor = $true
$TabSeiteTXTAuswaehlen.Text = "txt-Datei Auswaehlen"
#Paddings
$TabSeiteTXTAuswaehlen.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteTXTAuswaehlen)
# TXTPfadFeld
$TXTPfadFeld = New-Object System.Windows.Forms.TextBox
$TXTPfadFeld.Location = New-Object System.Drawing.Size(10,10)
$TXTPfadFeld.Size = New-Object System.Drawing.Size(860,20)
$TXTPfadFeld.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionPfadFeld "txt" $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTPfadFeld)
# TXTListeOrdnernamen
$TXTListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$TXTListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$TXTListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$TXTListeOrdnernamen.Height = 450
$TXTListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$TXTListeOrdnernamen.Add_DoubleClick({
# Variablen bestimmen zur uebergabe
$Auswahl = $TXTListeOrdnernamen.SelectedItem
$Pfad = $TXTPfadFeld.Text
# Pfad aktualisieren
VerzeichnisAuswaehlen "txt" $Pfad $Auswahl
})
$TXTListeOrdnernamen.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionListeOrdnernamen "txt" $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen)
# ZurueckButton
$TXTZurueckButton = New-Object System.Windows.Forms.Button
$TXTZurueckButton.Location = New-Object System.Drawing.Size(10,500)
$TXTZurueckButton.Size = New-Object System.Drawing.Size(100,30)
$TXTZurueckButton.Text = "Zurueck"
$TXTZurueckButton.Add_Click({
$Pfad = $TXTPfadFeld.Text
#Pfad aktualisieren
VerzeichnisZurueck "txt" $Pfad
})
$TXTZurueckButton.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionButtons "txt" $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTZurueckButton)
# AuswaehlenButton
$TXTAuswaehlenButton = New-Object System.Windows.Forms.Button
$TXTAuswaehlenButton.Location = New-Object System.Drawing.Size(750,500)
$TXTAuswaehlenButton.Size = New-Object System.Drawing.Size(100,30)
$TXTAuswaehlenButton.Text = "Auswaehlen"
$TXTAuswaehlenButton.Add_Click({
# Variablen bestimmen zur uebergabe
$Auswahl = $TXTListeOrdnernamen.SelectedItem
$Pfad= $TXTPfadFeld.Text
# Pfad aktualisieren
VerzeichnisAuswaehlen "txt" $Pfad $Auswahl
})
$TXTAuswaehlenButton.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionButtons "txt" $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton)
$A = AnzeigeAktualisieren "txt" $StartPfad # Ohne dem Aufruf kann kein Startverzeichnis uebergeben werden. Wird der Aufruf keiner Variable zugewiesen verursacht dies Fehler bei der Rueckgabe.
# Tab: Zielverzeichnis auswaehlen
$TabSeiteZielVerzeichnisAuswaehlen = New-Object System.Windows.Forms.TabPage
$TabSeiteZielVerzeichnisAuswaehlen.TabIndex = 1
$TabSeiteZielVerzeichnisAuswaehlen.UseVisualStyleBackColor = $true
$TabSeiteZielVerzeichnisAuswaehlen.Text = "Zielverzeichnis Auswaehlen"
#Paddings
$TabSeiteZielVerzeichnisAuswaehlen.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteZielVerzeichnisAuswaehlen)
# PfadFeld
$VERPfadFeld = New-Object System.Windows.Forms.TextBox
$VERPfadFeld.Location = New-Object System.Drawing.Size(10,10)
$VERPfadFeld.Size = New-Object System.Drawing.Size(860,20)
$VERPfadFeld.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionPfadFeld "ver" $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERPfadFeld)
# ListeOrdnernamen
$VERListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$VERListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$VERListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$VERListeOrdnernamen.Height = 450
$VERListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$VERListeOrdnernamen.Add_DoubleClick({
# Variablen bestimmen zur uebergabe
$Auswahl = $VERListeOrdnernamen.SelectedItem
$Pfad = $VERPfadFeld.Text
# Pfad aktualisieren
VerzeichnisAuswaehlen "ver" $Pfad $Auswahl
})
$VERListeOrdnernamen.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionListeOrdnernamen "ver" $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen)
# ZurueckButton
$VERZurueckButton = New-Object System.Windows.Forms.Button
$VERZurueckButton.Location = New-Object System.Drawing.Size(10,500)
$VERZurueckButton.Size = New-Object System.Drawing.Size(100,30)
$VERZurueckButton.Text = "Zurueck"
$VERZurueckButton.Add_Click({
$Pfad = $VERPfadFeld.Text
#Pfad aktualisieren
VerzeichnisZurueck "ver" $Pfad
})
$VERZurueckButton.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionButtons "ver" $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERZurueckButton)
# AuswaehlenButton
$VERAuswaehlenButton = New-Object System.Windows.Forms.Button
$VERAuswaehlenButton.Location = New-Object System.Drawing.Size(630,500)
$VERAuswaehlenButton.Size = New-Object System.Drawing.Size(100,30)
$VERAuswaehlenButton.Text = "Auswaehlen"
$VERAuswaehlenButton.Add_Click({
# Variablen bestimmen zur uebergabe
$Auswahl = $VERListeOrdnernamen.SelectedItem
$Pfad = $VERPfadFeld.Text
if ($($VERListeOrdnernamen.Items[0] -eq ""))
{
VERAuswahlBestaetigt $Pfad $Auswahl
}
else
{
# Pfad aktualisieren
VerzeichnisAuswaehlen "ver" $Pfad $Auswahl
}
})
$VERAuswaehlenButton.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionButtons "ver" $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERAuswaehlenButton)
# BestaetigenButton
$VERBestaetigenButton = New-Object System.Windows.Forms.Button
$VERBestaetigenButton.Location = New-Object System.Drawing.Size(750,500)
$VERBestaetigenButton.Size = New-Object System.Drawing.Size(100,30)
$VERBestaetigenButton.Text = "Bestaetigen"
$VERBestaetigenButton.Add_Click({
$Auswahl = $VERListeOrdnernamen.SelectedItem
$Pfad = $VERPfadFeld.Text
VERAuswahlBestaetigt $Pfad $Auswahl
})
$VERBestaetigenButton.Add_KeyDown({
# Reaktion bei gedrueckter Taste
$Taste = $_.KeyCode
TastenReaktionButtons "ver" $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton)
# Tab: Ausgabe Fortschritt
$TabSeiteFortschrittsanzeige = New-Object System.Windows.Forms.TabPage
$TabSeiteFortschrittsanzeige.TabIndex = 2
$TabSeiteFortschrittsanzeige.UseVisualStyleBackColor = $true
$TabSeiteFortschrittsanzeige.Text = "Bearbeitungsfortschritt"
#Paddings
$TabSeiteFortschrittsanzeige.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteFortschrittsanzeige)
$FATextfeld1 = New-Object System.Windows.Forms.Label
$FATextfeld1.Location = New-Object System.Drawing.Size(10,10)
$FATextfeld1.Size = New-Object System.Drawing.Size(130,20)
$FATextfeld1.Text = "Aktuelle Aufgabe"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1)
$FATextfeld2 = New-Object System.Windows.Forms.Label
$FATextfeld2.Location = New-Object System.Drawing.Size(10,55)
$FATextfeld2.Size = New-Object System.Drawing.Size(430,20)
$FATextfeld2.Text = "Erledigte Aufgaben"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld2)
$FATextfeldAktuelleAufgabe = New-Object System.Windows.Forms.Label
$FATextfeldAktuelleAufgabe.Location = New-Object System.Drawing.Size(150,10)
$FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(710,60)
$FATextfeldAktuelleAufgabe.Font = New-Object System.Drawing.Font("Arial",13,[System.Drawing.FontStyle]::Regular)
$FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe)
$FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox
$FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(10,85)
$FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(860,20)
$FAListeErledigteAufgaben.Height = 200
$FAListeErledigteAufgaben.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$TabSeiteFortschrittsanzeige.Controls.Add($FAListeErledigteAufgaben)
$FATextfeld3 = New-Object System.Windows.Forms.Label
$FATextfeld3.Location = New-Object System.Drawing.Size(10,300)
$FATextfeld3.Size = New-Object System.Drawing.Size(430,20)
$FATextfeld3.Text = "Fortschritt Excel-Dateien beschreiben"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld3)
$FAFortschrittsbar = New-Object System.Windows.Forms.ProgressBar
$FAFortschrittsbar.Location = New-Object System.Drawing.Size(10,320)
$FAFortschrittsbar.Size = New-Object System.Drawing.Size(860,30)
$FAFortschrittsbar.Value = 0
$TabSeiteFortschrittsanzeige.Controls.Add($FAFortschrittsbar)
$FATextfeldRealwertFortschrittsbar = New-Object System.Windows.Forms.Label # Wird verwendet, aber VSC erkennt das nicht
$FATextfeld4 = New-Object System.Windows.Forms.Label
$FATextfeld4.Location = New-Object System.Drawing.Size(10,370)
$FATextfeld4.Size = New-Object System.Drawing.Size(140,20)
$FATextfeld4.Text = "Bearbeitete Eintraege:"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld4)
$FATextfeld5 = New-Object System.Windows.Forms.Label
$FATextfeld5.Location = New-Object System.Drawing.Size(10,400)
$FATextfeld5.Size = New-Object System.Drawing.Size(100,20)
$FATextfeld5.Text = "Gesamteintraege:"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld5)
$FATextfeldBearbeiteteEintraege = New-Object System.Windows.Forms.Label
$FATextfeldBearbeiteteEintraege.Location = New-Object System.Drawing.Size(170,370)
$FATextfeldBearbeiteteEintraege.Size = New-Object System.Drawing.Size(430,20)
$FATextfeldBearbeiteteEintraege.Text = "0"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldBearbeiteteEintraege)
$FATextfeldGesamtEintraege = New-Object System.Windows.Forms.Label
$FATextfeldGesamtEintraege.Location = New-Object System.Drawing.Size(170,400)
$FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20)
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege)
# Tab: Ausgabe doppelte Ein- und Ausgaenge sowie nicht zurordnebare Betriebsmittel
$TabSeiteDuplikate = New-Object System.Windows.Forms.TabPage
$TabSeiteDuplikate.TabIndex = 3
$TabSeiteDuplikate.UseVisualStyleBackColor = $true
$TabSeiteDuplikate.Text = "Doppelte Ein- und Ausgaenge"
#Paddings
$TabSeiteDuplikate.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteDuplikate)
$DPTextfeld1 = New-Object System.Windows.Forms.Label
$DPTextfeld1.Location = New-Object System.Drawing.Size(10,10)
$DPTextfeld1.Size = New-Object System.Drawing.Size(275,40)
$DPTextfeld1.Text = "Bei den Eingaengen gibt es folgende Duplikate: "
$TabSeiteDuplikate.Controls.Add($DPTextfeld1)
$DPListeEingaenge = New-Object System.Windows.Forms.DataGridView
$DPListeEingaenge.Location = New-Object System.Drawing.Size(10,60)
$DPListeEingaenge.Size = New-Object System.Drawing.Size(275,20)
$DPListeEingaenge.Height = 430
$DPListeEingaenge.ColumnCount = 2
$DPListeEingaenge.ColumnHeadersVisible = $true
$DPListeEingaenge.Columns[0].Name = "Zeile"
$DPListeEingaenge.Columns[1].Name = "Kennzeichnung"
$TabSeiteDuplikate.Controls.Add($DPListeEingaenge)
$DPTextfeld2 = New-Object System.Windows.Forms.Label
$DPTextfeld2.Location = New-Object System.Drawing.Size(295,10)
$DPTextfeld2.Size = New-Object System.Drawing.Size(275,40)
$DPTextfeld2.Text = "Bei den Ausgaengen gibt es folgende Duplikate: "
$TabSeiteDuplikate.Controls.Add($DPTextfeld2)
$DPListeAusgaenge = New-Object System.Windows.Forms.DataGridView
$DPListeAusgaenge.Location = New-Object System.Drawing.Size(295,60)
$DPListeAusgaenge.Size = New-Object System.Drawing.Size(275,20)
$DPListeAusgaenge.Height = 430
$DPListeAusgaenge.ColumnCount = 2
$DPListeAusgaenge.ColumnHeadersVisible = $true
$DPListeAusgaenge.Columns[0].Name = "Zeile"
$DPListeAusgaenge.Columns[1].Name = "Kennzeichnung"
$TabSeiteDuplikate.Controls.Add($DPListeAusgaenge)
$DPTextfeld3 = New-Object System.Windows.Forms.Label
$DPTextfeld3.Location = New-Object System.Drawing.Size(580,10)
$DPTextfeld3.Size = New-Object System.Drawing.Size(275,40)
$DPTextfeld3.Text = "Folgende Eintraege konnten keinem Betriebsmittel zugewiesen werden:"
$TabSeiteDuplikate.Controls.Add($DPTextfeld3)
$DPListeFehler = New-Object System.Windows.Forms.DataGridView
$DPListeFehler.Location = New-Object System.Drawing.Size(580,60)
$DPListeFehler.Size = New-Object System.Drawing.Size(275,20)
$DPListeFehler.Height = 430
$DPListeFehler.ColumnCount = 2
$DPListeFehler.ColumnHeadersVisible = $true
$DPListeFehler.Columns[0].Name = "Zeile"
$DPListeFehler.Columns[1].Name = "Kennzeichnung"
$TabSeiteDuplikate.Controls.Add($DPListeFehler)
$DPBestaetigenButton = New-Object System.Windows.Forms.Button
$DPBestaetigenButton.Location = New-Object System.Drawing.Size(10,500)
$DPBestaetigenButton.Size = New-Object System.Drawing.Size(860,30)
$DPBestaetigenButton.Text = "Programm beenden"
$DPBestaetigenButton.Add_Click({
$Fenster.Dispose()
return
})
$TabSeiteDuplikate.Controls.Add($DPBestaetigenButton)
# Tab: Einstellungen
$TabSeiteEigenschaften = New-Object System.Windows.Forms.TabPage
$TabSeiteEigenschaften.TabIndex = 0
$TabSeiteEigenschaften.UseVisualStyleBackColor = $true
$TabSeiteEigenschaften.Text = "Einstellungen"
#Paddings
$TabSeiteEigenschaften.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteEigenschaften)
$BasisHoehe1 = 170 #80
#$BasisHoehe2 = $BasisHoehe1 + 20 #100
#$BasisHoehe2x = $BasisHoehe2 + 30 #130
#$BasisHoehe3 = $BasisHoehe2 + 65 #165
$BasisBreite1 = 10 #10
#$BasisBreite2 = $BasisBreite1 + 70 #80
#$BasisBreite3 = $BasisBreite2 + 60 #140
#$BasisBreite4 = $BasisBreite3 + 210 #350
#$BasisBreite5 = $BasisBreite4 + 55 #405
$ESTextfeld1 = New-Object System.Windows.Forms.Label
$ESTextfeld1.Location = New-Object System.Drawing.Size($BasisBreite1,10)
$ESTextfeld1.Size = New-Object System.Drawing.Size(200,20)
$ESTextfeld1.Text = "Startverzeichnis Auswahl .txt-Datei:"
$TabSeiteEigenschaften.Controls.Add($ESTextfeld1)
$ESTextfeldStartPfad = New-Object System.Windows.Forms.Label
$ESTextfeldStartPfad.Location = New-Object System.Drawing.Size(($BasisBreite1+200),10)
$ESTextfeldStartPfad.Size = New-Object System.Drawing.Size(510,20)
$TabSeiteEigenschaften.Controls.Add($ESTextfeldStartPfad)
$ESStartPfadAendernButton = New-Object System.Windows.Forms.Button
$ESStartPfadAendernButton.Location = New-Object System.Drawing.Size(730,10)
$ESStartPfadAendernButton.Size = New-Object System.Drawing.Size(150,30)
$ESStartPfadAendernButton.Text = "Aendern"
$ESStartPfadAendernButton.Add_Click({
VerzeichnisAendern "StartPfad"
})
$TabSeiteEigenschaften.Controls.Add($ESStartPfadAendernButton)
$ESTextfeld2 = New-Object System.Windows.Forms.Label
$ESTextfeld2.Location = New-Object System.Drawing.Size($BasisBreite1,45)
$ESTextfeld2.Size = New-Object System.Drawing.Size(450,20)
$ESTextfeld2.Text = "Startverzeichnis bei Auswahl des Zielverzeichnisses der Datei(en):"
$TabSeiteEigenschaften.Controls.Add($ESTextfeld2)
$ESRadioButtonWieTXT = New-Object System.Windows.Forms.RadioButton
$ESRadioButtonWieTXT.Location = New-Object System.Drawing.Size(10,10)
$ESRadioButtonWieTXT.Size = New-Object System.Drawing.Size(163,18)
$ESRadioButtonWieTXT.Name = "ESRadioButtonWieTXT"
$ESRadioButtonWieTXT.Text = "Gleich Startpfad .txt-Datei"
$ESRadioButtonWieZieldatei = New-Object System.Windows.Forms.RadioButton
$ESRadioButtonWieZieldatei.Location = New-Object System.Drawing.Size(173,10)
$ESRadioButtonWieZieldatei.Size = New-Object System.Drawing.Size(179,18)
$ESRadioButtonWieZieldatei.Name = "ESRadioButtonWieZieldatei"
$ESRadioButtonWieZieldatei.Text = "Gleich gewaehlter .txt-Datei"
$ESRadioButtonEigenerPfad = New-Object System.Windows.Forms.RadioButton
$ESRadioButtonEigenerPfad.Location = New-Object System.Drawing.Size(352,10)
$ESRadioButtonEigenerPfad.Size = New-Object System.Drawing.Size(94,18)
$ESRadioButtonEigenerPfad.Name = "ESRadioButtonEigenerPfad"
$ESRadioButtonEigenerPfad.Text = "Anderer Pfad"
$ESGroupBoxRadioButtons = New-Object System.Windows.Forms.GroupBox
$ESGroupBoxRadioButtons.Location = New-Object System.Drawing.Size(($BasisBreite1),60)
$ESGroupBoxRadioButtons.Size = New-Object System.Drawing.Size(449,30)
$ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonWieTXT)
$ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonWieZieldatei)
$ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonEigenerPfad)
$TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtons)
$ESSpeichernButton = New-Object System.Windows.Forms.Button
$ESSpeichernButton.Location = New-Object System.Drawing.Size(730,60)
$ESSpeichernButton.Size = New-Object System.Drawing.Size(150,30)
$ESSpeichernButton.Text = "Speichern"
$ESSpeichernButton.Add_Click({
EinstellungenRadioButtonSpeichern
})
$TabSeiteEigenschaften.Controls.Add($ESSpeichernButton)
$ESTextfeld3 = New-Object System.Windows.Forms.Label
$ESTextfeld3.Location = New-Object System.Drawing.Size($BasisBreite1,95)
$ESTextfeld3.Size = New-Object System.Drawing.Size(250,20)
$ESTextfeld3.Text = "Startverzeichnis Auswahl Zielverzeichnis:"
$ESTextfeldZielPfad = New-Object System.Windows.Forms.Label
$ESTextfeldZielPfad.Location = New-Object System.Drawing.Size(($BasisBreite1+250),95)
$ESTextfeldZielPfad.Size = New-Object System.Drawing.Size(460,20)
$ESZielPfadAendernButton = New-Object System.Windows.Forms.Button
$ESZielPfadAendernButton.Location = New-Object System.Drawing.Size(730,95)
$ESZielPfadAendernButton.Size = New-Object System.Drawing.Size(150,30)
$ESZielPfadAendernButton.Text = "Aendern"
$ESZielPfadAendernButton.Add_Click({
VerzeichnisAendern "ZielPfad"
})
#------------------- Tabelle mit ZielDateien
$ESTextfeld4 = New-Object System.Windows.Forms.Label
$ESTextfeld4.Location = New-Object System.Drawing.Size($BasisBreite1,140)
$ESTextfeld4.Size = New-Object System.Drawing.Size(200,20)
$ESTextfeld4.Text = "Zieldateien:"
$TabSeiteEigenschaften.Controls.Add($ESTextfeld4)
$ESAenderungenSpeichernButton = New-Object System.Windows.Forms.Button
$ESAenderungenSpeichernButton.Location = New-Object System.Drawing.Size(730,$BasisHoehe1)
$ESAenderungenSpeichernButton.Size = New-Object System.Drawing.Size(150,30)
$ESAenderungenSpeichernButton.Text = "Aenderungen Speichern"
$ESAenderungenSpeichernButton.Add_Click({
EinstellungenZielDateienSpeichern
})
$TabSeiteEigenschaften.Controls.Add($ESAenderungenSpeichernButton)
$ESListeEinstellungen = New-Object System.Windows.Forms.DataGridView
$ESListeEinstellungen.Location = New-Object System.Drawing.Size(10,$BasisHoehe1)
$ESListeEinstellungen.Size = New-Object System.Drawing.Size(650,380)
$ESListeEinstellungen.ColumnCount = 4
$ESListeEinstellungen.ColumnHeadersVisible = $true
$ESListeEinstellungen.AllowUserToAddRows = $true
$ESListeEinstellungen.AllowUserToDeleteRows = $true
$ESListeEinstellungen.AutoGenerateColumns = $false
$ESListeEinstellungen.AutoSizeColumnsMode = "Fill"
$ESListeEinstellungen.Columns[0].Name = "Prefix Eingang"
$ESListeEinstellungen.Columns[1].Name = "Prefix Ausgang"
$ESListeEinstellungen.Columns[2].Name = "Dateiname"
$ESListeEinstellungen.Columns[3].Name = "Konvertierungsart"
$TabSeiteEigenschaften.Controls.Add($ESListeEinstellungen)
AnzeigeEinstellungenInitialisieren
$Fenster.Add_Shown({$Fenster.Activate()})
[void]$Fenster.ShowDialog()
return
}
#------------------- Funktion nur fuer das txt-GUI --------------------------
Function TXTReaktionReturn ($Pfad)
{
if (PfadExistiert $Pfad)
{
# Gueltiger Pfad oder .txt-Datei
$PfadEnde = $(Split-Path $Pfad -Leaf)
if ($($PfadEnde -match ".txt"))
{
ZuVERSpringen
# Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht richtig
$TXTPfadFeld.Text = $Pfad
return
}
else
{
AnzeigeAktualisieren "txt" $Pfad
}
}
else
{
# Laufwerke aktualisieren oder ungueltiger Pfad
AnzeigeAktualisieren "txt" ""
}
return
}
#------------------- Funktion nur fuer das VerzeichnisWaehlen-GUI --------------------------
# Fuehrt $Pfad und $Auswahl zusammen und ueberprueft ob der daraus resultierte neue Pfad vorhanden ist. Falls dies der Fall ist, wird in den Bereich der Fortschrittsanzeige gewechselt
Function VERAuswahlBestaetigt($Pfad, $Auswahl)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
if (PfadExistiert $Pfad)
{
ZuFASpringen
$VERPfadfeld.Text = $Pfad
return
}
}
Function VERVorauswahlAnzeigeAktualisieren () {
# Todo: Soll evtl. in AnzeigeAktualisieren migriert werden. Problem: Innerhalb der Verzeichniswahl koennte man dann evtl. nicht mehr navigieren.
$RadioButton = RadioButtonHolen
switch ($RadioButton) {
EigenerPfad {
$ZielPfad = ZielPfadHolen
AnzeigeAktualisieren "ver" $ZielPfad
}
WieTXT {
$StartPfad = StartPfadHolen
AnzeigeAktualisieren "ver" $StartPfad
}
WieZielDatei {
AnzeigeAktualisieren "ver" $TXTPfadFeld.Text
}
Default {
AnzeigeAktualisieren "ver" $TXTPfadFeld.Text
}
}
}
#------------------- Funktionen zum wechseln der Tabs --------------------------
Function ZuVERSpringen
{
VERVorauswahlAnzeigeAktualisieren
AufgabenAktualisieren "Zielverzeichnis auswaehlen"
$TabBasis.SelectedIndex = 1
}
Function ZuFASpringen
{
$TabBasis.SelectedIndex = 2
$ZielDateien = ZielDateienHolen
$PfadUrsprungsdatei = $TXTPfadFeld.Text
$PfadZielDateien = $VERPfadFeld.Text
foreach ($ZielDatei in $ZielDateien) {
$ZielPfad = ExcelDateiNameErstellen $($ZielDatei.DateiName) $PfadUrsprungsdatei $PfadZielDateien
AufgabenAktualisieren $("Excel-Datei $($ZielDatei.DateiName) erstellen")
if ($($ZielDatei.WandlungsTyp) -eq "TIA") {
$Gleiche = ExcelDateiBeschreibenTIA $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad
}
elseif ($($ZielDatei.WandlungsTyp) -eq "Simpel") {
$Gleiche = ExcelDateiBeschreibenSimpel $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad
}
elseif ($($ZielDatei.WandlungsTyp) -eq "WSCAD") {
$Gleiche = ExcelDateiBeschreibenWSCAD $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad
}
elseif ($($ZielDatei.WandlungsTyp) -eq "WSCAD_Bezug") {
$Gleiche = ExcelDateiBeschreibenWSCAD_Bezug $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad
}
else {
$Gleiche = ExcelDateiBeschreibenSimpel $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad
}
}
$GleicheEingaenge = $Gleiche[0]
$GleicheAusgaenge = $Gleiche[1]
$Fehler = $Gleiche[2]
AufgabenAktualisieren "Ausgabe Duplikate und Fehler"
ZuDPSpringen $GleicheEingaenge $GleicheAusgaenge $Fehler
}
Function ZuDPSpringen ($GleicheEingaenge, $GleicheAusgaenge, $Fehler)
{
foreach ($GleichenEingang in $GleicheEingaenge) {
$DPListeEingaenge.Rows.Add($($GleichenEingang.Zeile),($GleichenEingang.Name))
}
foreach ($GleichenAusgang in $GleicheAusgaenge) {
$DPListeAusgaenge.Rows.Add($($GleichenAusgang.Zeile),($GleichenAusgang.Name))
}
foreach ($Fehlen in $Fehler) {
$DPListeFehler.Rows.Add($($Fehlen.Zeile),($Fehlen.Name))
}
$TabBasis.SelectedIndex = 3
# Werte zuruecksetzen, um weitere durchlauefe zu ermoeglichen
# Todo: Fehler und Duplikate zuruecksetzen!!!
VERVorauswahlAnzeigeAktualisieren
AnzeigeAktualisieren "txt" $($ESTextfeldStartPfad.Text)
$FAFortschrittsbar.Value = 0
$FATextfeldBearbeiteteEintraege.Text = "0"
}
#------------------- Funktionen fuer alle GUIs --------------------------
# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden muessen und aktualisiert entsprechend alles
# Um die Laufwerke anzuzeigen, muss der $Pfad = "" sein
Function AnzeigeAktualisieren ($AuswahlTyp, $Pfad)
{
# Ueberpruefen, ob es das Verzeichnis gibt
if (PfadExistiert $Pfad)
{
$Optionen = Optionen $AuswahlTyp $Pfad
}
elseif ($Pfad.Length -eq 0) {
$Optionen = LaufwerkeFinden
$Pfad = ""
}
else
{
AnzeigeAktualisieren $AuswahlTyp ""
return
}
if ($($AuswahlTyp -eq "txt")) {
$TXTPfadFeld.Text = $Pfad
$TXTListeOrdnernamen.Items.Clear()
foreach ($Option in $Optionen)
{
if ($Option.Length -gt 0)
{
$TXTListeOrdnernamen.Items.Add($Option)
}
}
}
elseif ($($AuswahlTyp -eq "ver")) {
$VERPfadFeld.Text = $Pfad
$VERListeOrdnernamen.Items.Clear()
foreach ($Option in $Optionen)
{
if ($Option.Length -gt 0)
{
$VERListeOrdnernamen.Items.Add($Option)
}
}
}
return
}
Function VerzeichnisAuswaehlen ($AuswahlTyp, $Pfad, $Auswahl)
{
if (PfadExistiert $Pfad)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
}
elseif ($Pfad.Length -eq 0) {
#Wenn der Pfad die Laenge 0 hat, wurde ein Laufwerk gewaehlt
$Pfad = $Auswahl
}
else {
#Fehlerfall/ ungueltiger Pfad: zurueck zu Laufwerken navigieren
$Pfad = ""
}
# Erkennen, ob *.txt-Datei gewaehlt wurde -> ggf. Auswahl abgeschlossen
if ($($($Auswahl -match ".txt") -and $($AuswahlTyp -eq "txt")))
{
# Fuer den Gesamtfortschritt Anzahl Dateien auslesen und mit der Anzahl der zu erstellenden Dateien multiplizieren
$Datei = Get-Content $Pfad
$ZielDateien = ZielDateienHolen
$FATextfeldGesamtEintraege.Text = $($ZielDateien.count) * $($Datei.Length)
ZuVERSpringen
# Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht
$TXTPfadFeld.Text = $Pfad
return
}
AnzeigeAktualisieren $AuswahlTyp $Pfad
return
}
Function VerzeichnisZurueck ($AuswahlTyp, $Pfad)
{
if ($Pfad.Length -gt 3)
{
# Weiter mit Ordnern
$Pfad = Split-Path $Pfad
}
elseif ($Pfad.Length -le 3)
{
# Weiter mit Laufwerken
$Pfad = ""
}
else
{
# Fehler/ Nichts tun?
# Ermitteln: wann tritt dieser Fall ein?
$Pfad = ""
}
AnzeigeAktualisieren $AuswahlTyp $Pfad
return
}
Function TastenReaktionPfadFeld($AuswahlTyp, $Taste)
{
if ($AuswahlTyp -eq "txt") {
switch ($Taste){
"Return" {
$Pfad = $TXTPfadFeld.Text
TXTReaktionReturn $Pfad
}
Default {
}
}
}
elseif ($AuswahlTyp -eq "ver") {
switch ($Taste) {
"Return" {
$Pfad = $VERPfadFeld.Text
AnzeigeAktualisieren "ver" $Pfad
}
Default {
}
}
}
return
}
Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste)
{
if ($AuswahlTyp -eq "txt"){
switch ($Taste){
"Return" {
$Auswahl = $TXTListeOrdnernamen.SelectedItem
$Pfad = $TXTPfadFeld.Text
VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl
}
"Back" {
$Pfad = $TXTPfadFeld.Text
# Pfad aktualisieren
VerzeichnisZurueck $AuswahlTyp $Pfad
}
Default {
}
}
}
elseif ($AuswahlTyp -eq "ver") {
switch ($Taste) {
"Return" {
$Auswahl = $VERListeOrdnernamen.SelectedItem
$Pfad = $VERPfadFeld.Text
VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl
}
"Back" {
$Pfad = $VERPfadFeld.Text
VerzeichnisZurueck $AuswahlTyp $Pfad
}
"ShiftKey" {
$Pfad = $VERPfadFeld.Text
$Auswahl = $VERListeOrdnernamen.SelectedItem
ReaktionShiftKey $Pfad $Auswahl
}
Default {
}
}
}
return
}
Function TastenReaktionButtons($AuswahlTyp, $Taste)
{
if ($AuswahlTyp -eq "txt") {
switch ($Taste){
"Back" {
$Pfad = $TXTPfadFeld.Text
# Pfad aktualisieren
VerzeichnisZurueck $AuswahlTyp $Pfad
}
Default {
}
}
}
elseif ($AuswahlTyp -eq "ver") {
switch ($Taste) {
"Back" {
$Pfad = $VERPfadFeld.Text
VerzeichnisZurueck $AuswahlTyp $Pfad
}
"ShiftKey" {
$Pfad = $VERPfadFeld.Text
$Auswahl = $VERListeOrdnernamen.SelectedItem
ReaktionShiftKey $Pfad $Auswahl
}
Default {
}
}
}
return
}
Function Optionen($AuswahlTyp, $Pfad)
{
# Unterordner und .txt-Dateien finden
# Typzuweisung noetig, da aus unbekanntem Grund sonst Unterordner, die mit "_" beginnen, nicht gefunden werden koennen
[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad
if ($AuswahlTyp -eq "txt") {
$TxtDateien = TxtDateienFinden $Pfad
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurueck
$Optionen = $UnterOrdner + $TxtDateien
}
elseif ($AuswahlTyp -eq "ver") {
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurueck
$Optionen = $UnterOrdner
}
return $Optionen
}
Function PfadExistiert ($Pfad)
{
#Um Abzufangen, dass Test-Path mit leerem Wert durchlaufen wird. Leere Verzeichnisse gelten als ungueltig.
if ($Pfad.Length -eq 0) {
return $false
}
if ($(Test-Path $Pfad -PathType Container) -or $(Test-Path $Pfad -Include "*.txt"))
{
return $true
}
else
{
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)
{
$UnterOrdner = $(Get-ChildItem $Pfad -Directory)
if ($($UnterOrdner.Length -gt 0))
{
$Ordner = $(Split-Path $UnterOrdner -Leaf)
}
else {
$Ordner = ""
}
return $Ordner
}
function KompatibilitaetsCheck ($SpeicherOrt){
$Inhalte = Get-Content $SpeicherOrt
if ($Inhalte.Length -eq 0) {
return $false
}
else {
foreach ($Zeile in $Inhalte) {
if (-not ($Zeile -match "'\w+','.+'") -and $Zeile.Length -gt 0) {
# -not (($Zeile -match "'\w+','\w+','\w+','\w+','\w*','\w*','\w*','\w*'") -and ($Zeile.Length -gt 0))
#todo: doesn't work, but old version accepts new IO-schematic
#Zeichenbereiche: [0-9], [A-Z] (jeweils ein Zeichen)
#Zahlen: \d eine Dezimalziffer, \D eine nicht-dezimale Ziffer
#Wortzeichen: \w entpspricht [a-zA-Z0-9], \W Nicht-Wortzzeichen
#Platzhalter .
#Leerzeichen \s, kein Leerzeichen \S
#Anzahl: * => 0-n; + => 1-n; ? => 0-1; {n,m} => n-m (, und m sind optional; nur n => muss n mal vorhanden sein; n, => muss mindestens n mal vorhanden sein)
return $false
}
}
}
return $true
}
Function TxtDateienFinden($Pfad)
{
$TxtDateien = $(Get-Childitem $Pfad\*.txt)
$KompatibleTxtDateien = @()
if ($TxtDateien.Length -gt 0)
{
foreach ($TxtDatei in $TxtDateien) {
if (KompatibilitaetsCheck $TxtDatei) {
$KompatibleTxtDateien += $TxtDatei
}
}
if ($KompatibleTxtDateien.Length -gt 0) {
return $(Split-Path $KompatibleTxtDateien -Leaf)
}
else {
Return
}
}
else
{
return
}
}
Function ReaktionShiftKey ($Pfad, $Auswahl)
{
if (PfadExistiert $Pfad)
{
VERAuswahlBestaetigt $Pfad $Auswahl
}
else
{
AnzeigeAktualisieren "ver" ""
}
return
}
Function AufgabenAktualisieren ($Aufgabe)
{
$FAListeErledigteAufgaben.Items.Add($FATextfeldAktuelleAufgabe.Text)
$FATextfeldAktuelleAufgabe.Text = $Aufgabe
}
Function DateiBeschreibenAktualisieren
{
$AnteilJeBeschriftung = 100 / $($FATextfeldGesamtEintraege.Text)
[System.double] $FATextfeldRealwertFortschrittsbar.Text += $AnteilJeBeschriftung
#Da $FAFortschrittsbar.Value anscheinend ein int ist, ist der letzte Wert i. d. R. hoeher als 100 -> Fehler, der hiermit abgefangen wird
if ($([System.Double]$FATextfeldRealwertFortschrittsbar.Text) -ge 100)
{
$FAFortschrittsbar.Value = 100
}
else
{
$FAFortschrittsbar.Value = $FATextfeldRealwertFortschrittsbar.Text
}
[System.Int64] $BearbeiteteEintraege = $FATextfeldBearbeiteteEintraege.Text
$BearbeiteteEintraege++
$FATextfeldBearbeiteteEintraege.Text = $BearbeiteteEintraege
}
#--------------------------------------- Start Funktionen fuer Einstellungen -------------------------------
Function BenutzerNameHolen () {
return $env:USERNAME
}
Function PfadEinstellungsDateiHolen () {
# Koennte man eigentlich in einer Zeile machen, PS macht da aber Probleme
$AktuellesVerzeichnis = Get-Location
$Benutzer = BenutzerNameHolen
$PfadEinstellungsDatei = $("$AktuellesVerzeichnis\" + "EinstellungenSkriptKonvertierung_" + $Benutzer + ".txt")
Write-Host "Pfad Einstellungsdatei: " $PfadEinstellungsDatei
return $PfadEinstellungsDatei
}
Function InhalteEinstellungsDateiHolen () {
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
if (-not (Test-Path $PfadEinstellungsDatei)) {
$A = EinstellungsDateiErstellen
}
else {
$EinstellungsInhalte = Get-Content $PfadEinstellungsDatei
return $EinstellungsInhalte
}
}
Function StartPfadHolen () {
$EinstellungsZeilen = InhalteEinstellungsDateiHolen
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
foreach ($EinstellungsZeile in $EinstellungsZeilen) {
$EinstellungsBestandteile = $EinstellungsZeile.Split("|")
if ($EinstellungsBestandteile[0] -eq "StartPfad") {
$StartPfad = $EinstellungsBestandteile[1]
#Pruefen, ob es den Pfad gibt. Falls er nicht existiert, wird das aktuelle Verzeichnis als StartPfad festgelegt
if (PfadExistiert $StartPfad) {
return $StartPfad
}
else {
#Todo: Muesste eigentlich auch in der Einstellungsdatei neu gespeichert werden. Neue Funktion erstellen, die dies auch fuer VerzeichnisAendern macht?
return Get-Location
}
}
}
# Falls kein StartPfad gefunden wurde, soll der Pfad der Einstellungsdatei als Pfad angegeben werden
$StartPfad = Split-Path $PfadEinstellungsDatei
Add-Content $PfadEinstellungsDatei $("StartPfad|" + $StartPfad)
return $StartPfad
}
Function ZielPfadHolen () {
$EinstellungsZeilen = InhalteEinstellungsDateiHolen
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
foreach ($EinstellungsZeile in $EinstellungsZeilen) {
$EinstellungsBestandteile = $EinstellungsZeile.Split("|")
if ($EinstellungsBestandteile[0] -eq "ZielPfad") {
$ZielPfad = $EinstellungsBestandteile[1]
return $ZielPfad
}
}
# Falls kein ZielPfad gefunden wurde, soll der Pfad des StartVerzeichnisses als Pfad angegeben werden
$ZielPfad = StartPfadHolen
Add-Content $PfadEinstellungsDatei $("ZielPfad|" + $ZielPfad)
return $ZielPfad
}
Function RadioButtonHolen () {
$EinstellungsZeilen = InhalteEinstellungsDateiHolen
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
foreach ($EinstellungsZeile in $EinstellungsZeilen) {
$EinstellungsBestandteile = $EinstellungsZeile.Split("|")
if ($EinstellungsBestandteile[0] -eq "VerzeichnisWahl") {
$RadioButton = $EinstellungsBestandteile[1]
return $RadioButton
}
}
#Falls kein VerzeichnisWahl gefunden wurde, soll die Einstellung auf gleich gesetzt werden
Add-Content $PfadEinstellungsDatei $("VerzeichnisWahl|Gleich")
return "Gleich"
}
Function ZielDateienHolen () {
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
# Ueberpruefen, ob Einstellungsdatei vorhanden ist, ggf. erstellen
if (Test-Path $PfadEinstellungsDatei) {
# Einstellungsdatei vorhanden -> auslesen
$EinstellungsInhalte = InhalteEinstellungsDateiHolen
foreach ($EinstellungsZeile in $EinstellungsInhalte) {
$EinstellungsInhalt = $EinstellungsZeile.Split("|")
if ($EinstellungsInhalt[0] -eq "Datei") {
$ZielDateien += @([PSCustomObject]@{
PrefixEingang = $EinstellungsInhalt[1]
PrefixAusgang = $EinstellungsInhalt[2]
DateiName = $EinstellungsInhalt[3]
WandlungsTyp = $EinstellungsInhalt[4]
})
}
}
$ZielDateienSicher = ZielDateienCheck $ZielDateien
return $ZielDateienSicher
}
else {
return EinstellungsDateiErstellen
}
}
Function ZielDateienCheck ($ZielDateien) {
#Iterieren durch die Eintraege von $ZielDateien
#Reihenfolge der Korrektur ist wichtig! WandlungsTyp muss zuerst korrigiert werden, da Prefixe und DateiName dort einen Wert brauchen
$i = 0
foreach ($ZielDatei in $ZielDateien) {
#Fehler: Keiner oder falscher Wandlungstyp angegeben
if (($ZielDatei.WandlungsTyp -ne "TIA") -and ($ZielDatei.WandlungsTyp -ne "WSCAD") -and ($ZielDatei.WandlungsTyp -ne "WSCAD_Bezug") -and ($ZielDatei.WandlungsTyp -ne "Simpel")) {
$ZielDatei.WandlungsTyp = "Simpel"
$ESListeEinstellungen.Rows[$i].Cells[3].Value = $ZielDatei.WandlungsTyp
$ESListeEinstellungen.Rows[$i].Cells[3].Style.BackColor = 'Red'
}
#Fehler: Zu langer Prefix fuer Eingaenge angegeben
if ($ZielDatei.PrefixEingang.Length -gt 3) {
$ZielDatei.PrefixEingang = $ZielDatei.PrefixEingang.Substring(0,3)
$ESListeEinstellungen.Rows[$i].Cells[0].Value = $ZielDatei.PrefixEingang
$ESListeEinstellungen.Rows[$i].Cells[0].Style.BackColor = 'Red'
}
#Fehler: Kein Prefix fuer Eingaenge angegeben
if ($ZielDatei.PrefixEingang.Length -eq 0) {
switch ($($ZielDatei.WandlungsTyp)) {
Simpel {
$ZielDatei.PrefixEingang = "E"
}
TIA {
$ZielDatei.PrefixEingang = "%E"
}
WSCAD {
$ZielDatei.PrefixEingang = "E"
}
WSCAD_Bezug {
$ZielDatei.PrefixEingang = "E"
}
Default {
$ZielDatei.PrefixEingang = "E"
}
}
$ESListeEinstellungen.Rows[$i].Cells[0].Value = $ZielDatei.PrefixEingang
$ESListeEinstellungen.Rows[$i].Cells[0].Style.BackColor = 'Red'
}
#Fehler: Zu langer Prefix fuer Ausgaenge angegeben
if ($ZielDatei.PrefixAusgang.Length -gt 3) {
$ZielDatei.PrefixAusgang = $ZielDatei.PrefixAusgang.Substring(0,3)
$ESListeEinstellungen.Rows[$i].Cells[1].Value = $ZielDatei.PrefixAusgang
$ESListeEinstellungen.Rows[$i].Cells[1].Style.BackColor = 'Red'
}
#Fehler: Kein Prefix fuer Ausgaenge angegeben
if ($ZielDatei.PrefixAusgang.Length -eq 0) {
switch ($($ZielDatei.WandlungsTyp)) {
Simpel {
$ZielDatei.PrefixAusgang = "A"
}
TIA {
$ZielDatei.PrefixAusgang = "%A"
}
WSCAD {
$ZielDatei.PrefixAusgang = "A"
}
WSCAD_Bezug {
$ZielDatei.PrefixAusgang = "A"
}
Default {
$ZielDatei.PrefixAusgang = "A"
}
}
$ESListeEinstellungen.Rows[$i].Cells[1].Value = $ZielDatei.PrefixAusgang
$ESListeEinstellungen.Rows[$i].Cells[1].Style.BackColor = 'Red'
}
#Fehler: Zu langer Dateiname angegeben
if ($ZielDatei.DateiName.Length -gt 150) {
$ZielDatei.DateiName = $ZielDatei.DateiName.Substring(0,150)
$ESListeEinstellungen.Rows[$i].Cells[2].Value = $ZielDatei.DateiName
$ESListeEinstellungen.Rows[$i].Cells[2].Style.BackColor = 'Red'
}
#Fehler: Kein Dateiname angegeben
if ($ZielDatei.DateiName.Length -eq 0) {
$ZielDatei.DateiName = $($ZielDatei.WandlungsTyp + "_[Ursprungsdatei]")
$ESListeEinstellungen.Rows[$i].Cells[2].Value = $ZielDatei.DateiName
$ESListeEinstellungen.Rows[$i].Cells[2].Style.BackColor = 'Red'
}
#Werte speichern fuer Rueckgabe
$GepruefteZielDateien += @([PSCustomObject]@{
PrefixEingang = $ZielDatei.PrefixEingang
PrefixAusgang = $ZielDatei.PrefixAusgang
DateiName = $ZielDatei.DateiName
WandlungsTyp = $ZielDatei.WandlungsTyp
})
$i++
}
return $GepruefteZielDateien
}
Function EinstellungsDateiErstellen () {
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
# Todo: Moegliches Problem mit der Funktion "StartVerzeichnisAktualisieren". Ueberpruefen!
New-Item $PfadEinstellungsDatei -ItemType File
$StartPfad = Get-Location
$ZielDateien = @([PSCustomObject]@{
PrefixEingang = "E"
PrefixAusgang = "A"
DateiName = "WSCAD_[Ursprungsdatei]"
WandlungsTyp = "WSCAD"
})
$ZielDateien += @([PSCustomObject]@{
PrefixEingang = "E"
PrefixAusgang = "A"
DateiName = "WSCAD_Bezug_[Ursprungsdatei]"
WandlungsTyp = "WSCAD_Bezug"
})
$ZielDateien += @([PSCustomObject]@{
PrefixEingang = "%E"
PrefixAusgang = "%A"
DateiName = "TIA_[Ursprungsdatei]"
WandlungsTyp = "TIA"
})
$ZielDateien += @([PSCustomObject]@{
PrefixEingang = "E"
PrefixAusgang = "A"
DateiName = "EA_[Ursprungsdatei]"
WandlungsTyp = "Simpel"
})
Add-Content $PfadEinstellungsDatei "Hinweise zur Einstellungsdatei: "
Add-Content $PfadEinstellungsDatei "1) Jeder Eintrag wird durch senkrechte Striche (|) geteilt. Der erste Bereich gibt die Art des Eintrags an."
Add-Content $PfadEinstellungsDatei " Moegliche Werte sind 'StartPfad' und 'Datei'. Es sollte nur ein StartPfad angegeben sein. Sind mehrere Angegeben,"
Add-Content $PfadEinstellungsDatei " wird der erste verwendet. Es koennen beliebig viele Dateien angegeben werden."
Add-Content $PfadEinstellungsDatei "2) Die rechte Spalte bei Dateien gibt das Konvertierungsformat fuer diese Datei an. Moeglich sind 'TIA', 'WSCAD'"
Add-Content $PfadEinstellungsDatei " und 'Simpel'. Ist ein falscher oder kein Wert angegeben, wird automatisch in 'Simpel' konvertiert."
Add-Content $PfadEinstellungsDatei "3) Die zweite Spalte von rechts bei Dateien gibt den Zieldateinamen an. Ist darin [Ursprungsdatei] enthalten,"
Add-Content $PfadEinstellungsDatei " wird dieser Teil durch den Namen der txt-Datei ersetzt, von der die Daten konvertiert werden."
Add-Content $PfadEinstellungsDatei "Nutzung des Konvertierers auf eigene Gefahr und ohne Haftungsuebernahme bei Schaeden!"
Add-Content $PfadEinstellungsDatei $("StartPfad|" + $StartPfad)
Add-Content $PfadEinstellungsDatei $("VerzeichnisWahl|WieZielDatei")
Add-Content $PfadEinstellungsDatei $("ZielPfad|" + $StartPfad)
foreach ($ZielDatei in $ZielDateien) {
Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDatei.PrefixEingang + "|" + $ZielDatei.PrefixAusgang + "|" + $ZielDatei.DateiName + "|" + $ZielDatei.WandlungsTyp)
}
return $ZielDateien
}
Function AnzeigeEinstellungenInitialisieren ()
{
# Neue Werte sollen nicht uebergeben werden, sondern aus der Einstellungsdatei ausgelesen werden, um Fehler zu vermeiden.
# Einzige Voraussetzung: es muss eine Einstellungsdatei geben!
# Erstellen der neuen Eintraege
$EinstellungsInhalte = InhalteEinstellungsDateiHolen
foreach ($EinstellungsZeile in $EinstellungsInhalte) {
$EinstellungsBestandteile = $EinstellungsZeile.Split("|")
if ($EinstellungsBestandteile[0] -eq "Datei") {
$ESListeEinstellungen.Rows.Add($($EinstellungsBestandteile[1]),$($EinstellungsBestandteile[2]),$($EinstellungsBestandteile[3]),$($EinstellungsBestandteile[4]))
}
}
$StartPfad = StartPfadHolen
$ESTextfeldStartPfad.Text = $StartPfad
# Radio-Button Einstellung und daraus folgend Anzeige der Zielverzeichnis-Schaltflaeche
$RadioButton = RadioButtonHolen
switch ($RadioButton) {
EigenerPfad {
$ESRadioButtonEigenerPfad.Checked = $true
$TabSeiteEigenschaften.Controls.Add($ESTextfeld3)
$TabSeiteEigenschaften.Controls.Add($ESTextfeldZielPfad)
$TabSeiteEigenschaften.Controls.Add($ESZielPfadAendernButton)
$ZielPfad = ZielPfadHolen
$ESTextfeldZielPfad.Text = $ZielPfad
}
WieTXT {
$ESRadioButtonWieTXT.Checked = $true
}
WieZielDatei {
$ESRadioButtonWieZieldatei.Checked = $true
}
Default {
$ESRadioButtonWieZieldatei.Checked = $true
}
}
}
Function VerzeichnisAendern ($SuchBereich)
{
$DateiInhalt = InhalteEinstellungsDateiHolen
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
Clear-Content $PfadEinstellungsDatei
foreach ($DateiZeile in $DateiInhalt) {
$DateiBestandTeile = $DateiZeile.Split("|")
if ($DateiBestandTeile[0] -eq $SuchBereich) {
$Explorer = New-Object System.Windows.Forms.FolderBrowserDialog
$Explorer.SelectedPath = $DateiBestandTeile[1]
$Explorer.ShowDialog()
$Pfad = $Explorer.SelectedPath
$DateiZeile = $($DateiBestandTeile[0] + "|" + $Pfad)
}
Add-Content $PfadEinstellungsDatei $DateiZeile
}
# Ansichten aktualisieren zum neuen Startverzeichnis
AnzeigeAktualisieren "txt" $Pfad
VERVorauswahlAnzeigeAktualisieren
switch ($SuchBereich) {
StartPfad {
$ESTextfeldStartPfad.Text = $Pfad
}
ZielPfad {
$ESTextfeldZielPfad.Text = $Pfad
}
Default {}
}
}
Function EinstellungenRadioButtonSpeichern () {
if ($ESRadioButtonEigenerPfad.Checked -eq $true) {
$Auswahl = "EigenerPfad"
$TabSeiteEigenschaften.Controls.Add($ESTextfeld3)
$TabSeiteEigenschaften.Controls.Add($ESTextfeldZielPfad)
$TabSeiteEigenschaften.Controls.Add($ESZielPfadAendernButton)
$ZielPfad = ZielPfadHolen
$ESTextfeldZielPfad.Text = $ZielPfad
}
elseif ($ESRadioButtonWieTXT.Checked -eq $true) {
$Auswahl = "WieTXT"
$TabSeiteEigenschaften.Controls.Remove($ESTextfeld3)
$TabSeiteEigenschaften.Controls.Remove($ESTextfeldZielPfad)
$TabSeiteEigenschaften.Controls.Remove($ESZielPfadAendernButton)
}
else {
$Auswahl = "WieZielDatei"
$TabSeiteEigenschaften.Controls.Remove($ESTextfeld3)
$TabSeiteEigenschaften.Controls.Remove($ESTextfeldZielPfad)
$TabSeiteEigenschaften.Controls.Remove($ESZielPfadAendernButton)
}
#Variablen deklarieren
$DateiInhalt = InhalteEinstellungsDateiHolen
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
#Anzeige fuer Verzeichnis aktualisieren, Einstellungsdatei loeschen
VERVorauswahlAnzeigeAktualisieren
Clear-Content $PfadEinstellungsDatei
#Durch die Einstellungsinhalte iterieren
foreach ($DateiZeile in $DateiInhalt) {
$DateiBestandTeile = $DateiZeile.Split("|")
#Zeile fuer VerzeichnisWahl finden und Einstellung durch neue Auswahl ersetzen
if ($DateiBestandTeile[0] -eq "VerzeichnisWahl") {
$DateiZeile = $($DateiBestandTeile[0] + "|" + $Auswahl)
}
Add-Content $PfadEinstellungsDatei $DateiZeile
}
}
Function EinstellungenZielDateienSpeichern ()
{
#Auslesen von $ZielDateien
for ($i = 0; $i -lt ($ESListeEinstellungen.RowCount-1); $i++) {
#Falls alle Felder leer sind, wird die Zeile nicht hinzugefuegt
if ($($($($ESListeEinstellungen.Rows[$i].Cells[0].Value).Length -ne 0) -or
$($($ESListeEinstellungen.Rows[$i].Cells[1].Value).Length -ne 0) -or
$($($ESListeEinstellungen.Rows[$i].Cells[2].Value).Length -ne 0) -or
$($($ESListeEinstellungen.Rows[$i].Cells[3].Value).Length -ne 0)
)) {
#Zeile fuer $ZielDateien hinzufuegen
$ZielDateien += @([PSCustomObject]@{
PrefixEingang = $ESListeEinstellungen.Rows[$i].Cells[0].Value
PrefixAusgang = $ESListeEinstellungen.Rows[$i].Cells[1].Value
DateiName = $ESListeEinstellungen.Rows[$i].Cells[2].Value
WandlungsTyp = $ESListeEinstellungen.Rows[$i].Cells[3].Value
})
}
}
$ZielDateien = ZielDateienCheck $ZielDateien
# Schreiben in Einstellungsdatei
$PfadEinstellungsDatei = PfadEinstellungsDateiHolen
$AlteEinstellungsDatei = Get-Content $PfadEinstellungsDatei
$NeueEinstellungsDatei = @()
#Alte Ziel-Dateien loeschen
foreach ($Zeile in $AlteEinstellungsDatei) {
$Einstellung = $Zeile.Split("|")
if ($Einstellung[0] -ne "Datei") {
$NeueEinstellungsDatei += $Zeile
}
}
#Neue Ziel-Dateien hinzufuegen
foreach ($ZielDatei in $ZielDateien) {
$ZielDateiensatz = $("Datei|" + $ZielDatei.PrefixEingang + "|" + $ZielDatei.PrefixAusgang + "|" + $ZielDatei.DateiName + "|" + $ZielDatei.WandlungsTyp)
$NeueEinstellungsDatei += $ZielDateiensatz
}
#Einstellungsdatei loeschen und neu befuellen
Clear-Content $PfadEinstellungsDatei
foreach ($Zeile in $NeueEinstellungsdatei) {
Add-Content $PfadEinstellungsDatei $Zeile
}
# Anzeige in Einstellungen aktualisieren (?)
# UngespeichterteAenderungen reseten! (?)
}
#--------------------------------------- Ende Funktionen fuer GUI -------------------------------
Function ExcelDateiNameErstellen ($EingestellterName, $PfadUrsprungsdatei, $PfadZielDatei)
{
$NameUrsprungsdatei = Split-Path $PfadUrsprungsdatei -Leaf
$NameUrsprungsdateiLaenge = $NameUrsprungsdatei.Length
$NameUrsprungsdateiKurz = $NameUrsprungsdatei.Substring(0, $($NameUrsprungsdateiLaenge - 4))
$GesamtPfadZielDatei = $PfadZielDatei + "\" + $EingestellterName.Replace("[Ursprungsdatei]",$NameUrsprungsdateiKurz) + ".xlsx"
return $GesamtPfadZielDatei
}
Function ExcelDateiBeschreibenSimpel ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei)
{
$Eingaenge = @()
$ZuEingang = @("FDI", "B", "S", "E", "I", "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")
$Ausgaenge = @()
$ZuAusgang = @("K", "O", "Q", "M", "A", "P", "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
AufgabenAktualisieren "Daten fuer Simpel konvertieren"
$i = 0
foreach ($Eintrag in $Ursprungdatei)
{
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
if ($($($BMKZahl -replace "[\d]") -in $ZuEingang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $PrefixEingang + $BMKZahl
$Eingaenge += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
})
}
elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $PrefixAusgang + $BMKZahl
$Ausgaenge += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
})
}
else
{
$BMKZahlLaenge = $($BMKZahl.length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
})
}
$i++
}
AufgabenAktualisieren "Daten fuer Simpel in Excel-Datei schreiben"
#Datei oeffnen und Arbeitsmappen erstellen
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Add()
$Mappe.SaveAs($ZielDatei)
$Blatt = $Mappe.WorkSheets.item(1)
$Datei.Visible = $false
#Header erstellen
#(kein Header vorhanden)
#Schleife fuer Fehler
$i = 1
$Fehler = $Fehler | Sort-Object "Name"
foreach ($EinzelFehler in $Fehler) {
$Blatt.Cells.Item($i,1) = $EinzelFehler.Name
$Blatt.Cells.Item($i,2) = $EinzelFehler.Kommentar
DateiBeschreibenAktualisieren
$i++
}
#Schleife fuer Eingaenge
$Eingaenge = $Eingaenge | Sort-Object "Name"
foreach ($Eingang in $Eingaenge) {
$Blatt.Cells.Item($i,1) = $Eingang.Name
$Blatt.Cells.Item($i,2) = $Eingang.Kommentar
DateiBeschreibenAktualisieren
$i++
}
#Schleife fuer Ausgaenge
$Ausgaenge = $Ausgaenge | Sort-Object "Name"
foreach ($Ausgang in $Ausgaenge) {
$Blatt.Cells.Item($i,1) = $Ausgang.Name
$Blatt.Cells.Item($i,2) = $Ausgang.Kommentar
DateiBeschreibenAktualisieren
$i++
}
$Mappe.Save()
$Datei.Quit()
$GleicheEingaenge = GleicheFinden $Eingaenge
$GleicheAusgaenge = GleicheFinden $Ausgaenge
if ( $($Fehler.Length -eq 0))
{
$Fehler += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $GleicheEingaenge, $GleicheAusgaenge, $Fehler
}
Function ExcelDateiBeschreibenTIA ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei)
{
$Eingaenge = @()
$ZuEingang = @("FDI", "B", "S", "E", "I", "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")
$Ausgaenge = @()
$ZuAusgang = @("K", "O", "Q", "M", "A", "P", "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
AufgabenAktualisieren "Daten fuer TIA konvertieren"
$i = 0
foreach ($Eintrag in $Ursprungdatei)
{
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$BMKZahlOriginal = $BMKZahl
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
if ($($($BMKZahl -replace "[\d]") -in $ZuEingang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKNurZahl = $BMKZahl
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $PrefixEingang + $BMKZahl
$BMKZahlConstant = "cIn" + $BMKZahlOriginal
$Eingaenge += @([PSCustomObject]@{
Name = $BMKZahl
NameOriginal = $BMKZahlOriginal
NameConstant = $BMKZahlConstant
Kommentar = $Kommentar
Zahl = $BMKNurZahl
Zeile = $i
})
}
elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKNurZahl = $BMKZahl
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $PrefixAusgang + $BMKZahl
$BMKZahlConstant = "cOut" + $BMKZahlOriginal
$Ausgaenge += @([PSCustomObject]@{
Name = $BMKZahl
NameOriginal = $BMKZahlOriginal
NameConstant = $BMKZahlConstant
Kommentar = $Kommentar
Zahl = $BMKNurZahl
Zeile = $i
})
}
else
{
$BMKNurZahl = $i
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahlConstant = "cErr" + $BMKZahlOriginal
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
NameOriginal = $BMKZahlOriginal
NameConstant = $BMKZahlConstant
Zahl = $BMKNurZahl
Zeile = $i
})
}
$i++
}
AufgabenAktualisieren "Daten fuer TIA in Excel-Datei schreiben"
#Datei oeffnen, Arbeitsmappen erstellen und umbennenen
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Add()
$Mappe.SaveAs($ZielDatei)
$BlattConstants = $Mappe.WorkSheets.item(1)
$BlattConstants.Name = "Constants"
$BlattPLCTags = $Mappe.WorkSheets.Add()
$BlattPLCTags.Name = "PLC Tags"
$Datei.Visible = $false
#Header fuer Blatt "Constants" erstellen
$BlattConstants.Cells.Item(1,1) = "Name"
$BlattConstants.Cells.Item(1,2) = "Path"
$BlattConstants.Cells.Item(1,3) = "Data Type"
$BlattConstants.Cells.Item(1,4) = "Value"
$BlattConstants.Cells.Item(1,5) = "Comment"
#Header fuer Blatt "PLC Tags" erstellen
$BlattPLCTags.Cells.Item(1,1) = "Name"
$BlattPLCTags.Cells.Item(1,2) = "Path"
$BlattPLCTags.Cells.Item(1,3) = "Data Type"
$BlattPLCTags.Cells.Item(1,4) = "Logical Address"
$BlattPLCTags.Cells.Item(1,5) = "Comment"
$BlattPLCTags.Cells.Item(1,6) = "Hmi Visible"
$BlattPLCTags.Cells.Item(1,7) = "Hmi Accessible"
$BlattPLCTags.Cells.Item(1,8) = "Hmi Writeable"
$BlattPLCTags.Cells.Item(1,9) = "Typeobject ID"
$BlattPLCTags.Cells.Item(1,10) = "Version ID"
#Schleife fuer Fehler
$i = 2
$j = 0
$Fehler = $Fehler | Sort-Object "Zahl"
foreach ($EinzelFehler in $Fehler) {
#In Blatt "Constants" schreiben
$BlattConstants.Cells.Item($i,1) = $EinzelFehler.NameConstant#Name
$BlattConstants.Cells.Item($i,2) = "Import" #Path
$BlattConstants.Cells.Item($i,3) = "Int" #Data Type
$BlattConstants.Cells.Item($i,4) = $j #Value
# $BlattConstants.Cells.Item($i,5) = #Comment
#In Blatt "PLC Tags" schreiben
$BlattPLCTags.Cells.Item($i,1) = $EinzelFehler.NameOriginal#Name
$BlattPLCTags.Cells.Item($i,2) = "Import" #Path
$BlattPLCTags.Cells.Item($i,3) = "Bool" #Data Type
$BlattPLCTags.Cells.Item($i,4) = $EinzelFehler.Name #Logical Address
$BlattPLCTags.Cells.Item($i,5) = $EinzelFehler.Kommentar #Comment
$BlattPLCTags.Cells.Item($i,6) = "'True" #Hmi Visible
$BlattPLCTags.Cells.Item($i,7) = "'True" #Hmi Accessible
$BlattPLCTags.Cells.Item($i,8) = "'True" #Hmi Writeable
# $BlattPLCTags.Cells.Item($i,9) = #Typeobject ID
# $BlattPLCTags.Cells.Item($i,10) = #Version ID
DateiBeschreibenAktualisieren
$i++
$j++
}
#Schleife fuer Eingaenge
$j = 0
$Eingaenge = $Eingaenge | Sort-Object "Zahl"
foreach ($Eingang in $Eingaenge) {
#In Blatt "Constants" schreiben
$BlattConstants.Cells.Item($i,1) = $Eingang.NameConstant #Name
$BlattConstants.Cells.Item($i,2) = "Import" #Path
$BlattConstants.Cells.Item($i,3) = "Int" #Data Type
$BlattConstants.Cells.Item($i,4) = $j #Value
# $BlattConstants.Cells.Item($i,5) = #Comment
#In Blatt "PLC Tags" schreiben
$BlattPLCTags.Cells.Item($i,1) = $Eingang.NameOriginal #Name
$BlattPLCTags.Cells.Item($i,2) = "Import" #Path
$BlattPLCTags.Cells.Item($i,3) = "Bool" #Data Type
$BlattPLCTags.Cells.Item($i,4) = $Eingang.Name #Logical Address
$BlattPLCTags.Cells.Item($i,5) = $Eingang.Kommentar #Comment
$BlattPLCTags.Cells.Item($i,6) = "'True" #Hmi Visible
$BlattPLCTags.Cells.Item($i,7) = "'True" #Hmi Accessible
$BlattPLCTags.Cells.Item($i,8) = "'True" #Hmi Writeable
# $BlattPLCTags.Cells.Item($i,9) = #Typeobject ID
# $BlattPLCTags.Cells.Item($i,10) = #Version ID
DateiBeschreibenAktualisieren
$i++
$j++
}
#Schleife fuer Ausgaenge
$j = 0
$Ausgaenge = $Ausgaenge | Sort-Object "Zahl"
foreach ($Ausgang in $Ausgaenge) {
#In Blatt "Constants" schreiben
$BlattConstants.Cells.Item($i,1) = $Ausgang.NameConstant #Name
$BlattConstants.Cells.Item($i,2) = "Import" #Path
$BlattConstants.Cells.Item($i,3) = "Int" #Data Type
$BlattConstants.Cells.Item($i,4) = $j #Value
# $BlattConstants.Cells.Item($i,5) = #Comment
#In Blatt "PLC Tags" schreiben
$BlattPLCTags.Cells.Item($i,1) = $Ausgang.NameOriginal #Name
$BlattPLCTags.Cells.Item($i,2) = "Import" #Path
$BlattPLCTags.Cells.Item($i,3) = "Bool" #Data Type
$BlattPLCTags.Cells.Item($i,4) = $Ausgang.Name #Logical Address
$BlattPLCTags.Cells.Item($i,5) = $Ausgang.Kommentar #Comment
$BlattPLCTags.Cells.Item($i,6) = "'True" #Hmi Visible
$BlattPLCTags.Cells.Item($i,7) = "'True" #Hmi Accessible
$BlattPLCTags.Cells.Item($i,8) = "'True" #Hmi Writeable
# $BlattPLCTags.Cells.Item($i,9) = #Typeobject ID
# $BlattPLCTags.Cells.Item($i,10) = #Version ID
DateiBeschreibenAktualisieren
$i++
$j++
}
$Mappe.Save()
$Datei.Quit()
$GleicheEingaenge = GleicheFinden $Eingaenge
$GleicheAusgaenge = GleicheFinden $Ausgaenge
if ( $($Fehler.Length -eq 0))
{
$Fehler += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $GleicheEingaenge, $GleicheAusgaenge, $Fehler
}
Function ExcelDateiBeschreibenWSCAD ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei)
{
$Eingaenge = @()
$ZuEingang = @("FDI", "B", "S", "E", "I", "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")
$Ausgaenge = @()
$ZuAusgang = @("K", "KF", "O", "Q", "M", "A", "P", "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", "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 = @()
$Ursprungsdatei = Get-Content $PfadUrsprungsdatei
AufgabenAktualisieren "Daten fuer WSCAD konvertieren"
$i = 0
foreach ($Eintrag in $Ursprungsdatei) {
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
if ($($($BMKZahl -replace "[\d]") -in $ZuEingang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
#Bis zu zwei Voranstehende Nullen entfernen
if ($BMKZahl.Length -ge 4 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
if ($BMKZahl.Length -ge 4 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
}
}
$BMKZahl = $PrefixEingang + $BMKZahl
$Eingaenge += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
})
}
elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
#Bis zu zwei Voranstehende Nullen entfernen
if ($BMKZahl.Length -ge 3 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
if ($BMKZahl.Length -ge 3 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
}
}
$BMKZahl = $PrefixAusgang + $BMKZahl
$Ausgaenge += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
})
}
else
{
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
})
}
$i++
}
AufgabenAktualisieren "Anschluesse fuer Eingaenge ergaenzen"
$Eingaenge = AnschluesseErgaenzen $Eingaenge
AufgabenAktualisieren "Anschluesse fuer Ausgaenge ergaenzen"
$Ausgaenge = AnschluesseErgaenzen $Ausgaenge
AufgabenAktualisieren "Daten fuer WSCAD in Excel-Datei schreiben"
#Datei oeffnen und Arbeitmappe erstellen
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Add()
$Mappe.SaveAs($ZielDatei)
$Blatt = $Mappe.WorkSheets.item(1)
$Datei.Visible = $false
#Header erstellen
$Blatt.Cells.Item(1,1) = "Anschluss"
$Blatt.Cells.Item(1,2) = "Kommentar"
$Blatt.Cells.Item(1,3) = "Symboltext"
$Blatt.Cells.Item(1,4) = "Bezug"
$Blatt.Cells.Item(1,5) = "Sondertext 1"
$Blatt.Cells.Item(1,6) = "Sondertext 2"
$Blatt.Cells.Item(1,7) = "Sondertext 3"
$Blatt.Cells.Item(1,8) = "Sondertext 4"
$Blatt.Cells.Item(1,9) = "Sondertext 5"
$Blatt.Cells.Item(1,10) = "Sondertext 6"
$Blatt.Cells.Item(1,11) = "Sondertext 7"
$Blatt.Cells.Item(1,12) = "Sondertext 8"
#Schleife fuer Fehler
$i = 2
$Fehler = $Fehler | Sort-Object "Name"
foreach ($EinzelFehler in $Fehler) {
#In Blatt schreiben
$Blatt.Cells.Item($i,1) = $EinzelFehler.Name #Anschluss
$Blatt.Cells.Item($i,2) = $EinzelFehler.Kommentar #Kommentar
# $Blatt.Cells.Item($i,3) = "" #Symboltext
# $Blatt.Cells.Item($i,4) = "" #Bezug
DateiBeschreibenAktualisieren
$i++
}
#Schleife fuer Eingaenge
$Eingaenge = $Eingaenge | Sort-Object "Name"
foreach ($Eingang in $Eingaenge) {
#In Blatt schreiben
$Blatt.Cells.Item($i,1) = $Eingang.Name #Anschluss
$Blatt.Cells.Item($i,2) = $Eingang.Kommentar #Kommentar
# $Blatt.Cells.Item($i,3) = "" #Symboltext
# $Blatt.Cells.Item($i,4) = "" #Bezug
DateiBeschreibenAktualisieren
$i++
}
#Schleife fuer Ausgaenge
$Ausgaenge = $Ausgaenge | Sort-Object "Name"
foreach ($Ausgang in $Ausgaenge) {
#In Blatt schreiben
$Blatt.Cells.Item($i,1) = $Ausgang.Name #Anschluss
$Blatt.Cells.Item($i,2) = $Ausgang.Kommentar #Kommentar
# $Blatt.Cells.Item($i,3) = "" #Symboltext
# $Blatt.Cells.Item($i,4) = "" #Bezug
DateiBeschreibenAktualisieren
$i++
}
$Mappe.Save()
$Datei.Quit()
$GleicheEingaenge = GleicheFinden $Eingaenge
$GleicheAusgaenge = GleicheFinden $Ausgaenge
if ( $($Fehler.Length -eq 0))
{
$Fehler += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $GleicheEingaenge, $GleicheAusgaenge, $Fehler
}
Function ExcelDateiBeschreibenWSCAD_Bezug ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei)
{
$Eingaenge = @()
$ZuEingang = @("FDI", "B", "S", "E", "I", "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")
$Ausgaenge = @()
$ZuAusgang = @("K", "KF", "O", "Q", "M", "A", "P", "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", "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 = @()
$Ursprungsdatei = Get-Content $PfadUrsprungsdatei
AufgabenAktualisieren "Daten fuer WSCAD_Bezug konvertieren"
$i = 0
foreach ($Eintrag in $Ursprungsdatei) {
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
$Bezug = $Eintragszeile[7]
$Bezug = $Bezug.TrimEnd("'")
#$Bezug = "'" + $Bezug
if ($($($BMKZahl -replace "[\d]") -in $ZuEingang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
#Bis zu zwei Voranstehende Nullen entfernen
if ($BMKZahl.Length -ge 4 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
if ($BMKZahl.Length -ge 4 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
}
}
$BMKZahl = $PrefixEingang + $BMKZahl
$Eingaenge += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
Bezug = $Bezug
})
}
elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
#Bis zu zwei Voranstehende Nullen entfernen
if ($BMKZahl.Length -ge 3 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
if ($BMKZahl.Length -ge 3 -and $BMKZahl.Substring(0,1) -eq "0") {
$BMKZahl = $BMKZahl.Substring(1)
}
}
$BMKZahl = $PrefixAusgang + $BMKZahl
$Ausgaenge += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
Bezug = $Bezug
})
}
else
{
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = $Kommentar
Zeile = $i
Bezug = $Bezug
})
}
$i++
}
AufgabenAktualisieren "Anschluesse fuer Eingaenge ergaenzen"
$Eingaenge = AnschluesseErgaenzen $Eingaenge
AufgabenAktualisieren "Anschluesse fuer Ausgaenge ergaenzen"
$Ausgaenge = AnschluesseErgaenzen $Ausgaenge
AufgabenAktualisieren "Daten fuer WSCAD_Bezug in Excel-Datei schreiben"
#Datei oeffnen und Arbeitmappe erstellen
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Add()
$Mappe.SaveAs($ZielDatei)
$Blatt = $Mappe.WorkSheets.item(1)
$Datei.Visible = $false
$Blatt.Columns("D").NumberFormat = "@"
#Header erstellen
$Blatt.Cells.Item(1,1) = "Anschluss"
$Blatt.Cells.Item(1,2) = "Kommentar"
$Blatt.Cells.Item(1,3) = "Symboltext"
$Blatt.Cells.Item(1,4) = "Bezug"
$Blatt.Cells.Item(1,5) = "Sondertext 1"
$Blatt.Cells.Item(1,6) = "Sondertext 2"
$Blatt.Cells.Item(1,7) = "Sondertext 3"
$Blatt.Cells.Item(1,8) = "Sondertext 4"
$Blatt.Cells.Item(1,9) = "Sondertext 5"
$Blatt.Cells.Item(1,10) = "Sondertext 6"
$Blatt.Cells.Item(1,11) = "Sondertext 7"
$Blatt.Cells.Item(1,12) = "Sondertext 8"
#Schleife fuer Fehler
$i = 2
$Fehler = $Fehler | Sort-Object "Name"
foreach ($EinzelFehler in $Fehler) {
#In Blatt schreiben
$Blatt.Cells.Item($i,1) = $EinzelFehler.Name #Anschluss
$Blatt.Cells.Item($i,2) = $EinzelFehler.Kommentar #Kommentar
# $Blatt.Cells.Item($i,3) = "" #Symboltext
$Blatt.Cells.Item($i,4) = $EinzelFehler.Bezug #Bezug
DateiBeschreibenAktualisieren
$i++
}
#Schleife fuer Eingaenge
$Eingaenge = $Eingaenge | Sort-Object "Name"
foreach ($Eingang in $Eingaenge) {
#In Blatt schreiben
$Blatt.Cells.Item($i,1) = $Eingang.Name #Anschluss
$Blatt.Cells.Item($i,2) = $Eingang.Kommentar #Kommentar
# $Blatt.Cells.Item($i,3) = "" #Symboltext
$Blatt.Cells.Item($i,4) = $Eingang.Bezug #Bezug
DateiBeschreibenAktualisieren
$i++
}
#Schleife fuer Ausgaenge
$Ausgaenge = $Ausgaenge | Sort-Object "Name"
foreach ($Ausgang in $Ausgaenge) {
#In Blatt schreiben
$Blatt.Cells.Item($i,1) = $Ausgang.Name #Anschluss
$Blatt.Cells.Item($i,2) = $Ausgang.Kommentar #Kommentar
# $Blatt.Cells.Item($i,3) = "" #Symboltext
$Blatt.Cells.Item($i,4) = $Ausgang.Bezug #Bezug
DateiBeschreibenAktualisieren
$i++
}
$Mappe.Save()
$Datei.Quit()
$GleicheEingaenge = GleicheFinden $Eingaenge
$GleicheAusgaenge = GleicheFinden $Ausgaenge
if ( $($Fehler.Length -eq 0))
{
$Fehler += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $GleicheEingaenge, $GleicheAusgaenge, $Fehler
}
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 hinzufuegen
if (-not $($Gleiche[-1].Zeile -eq $ZuUeberpruefen[$i].Zeile))
{
$Gleiche += $ZuUeberpruefen[$i]
}
$Gleiche += $ZuUeberpruefen[$($i+1)]
}
}
if ( $($Gleiche.Length -eq 0))
{
$Gleiche += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $Gleiche
}
Function AnschluesseErgaenzen ($Anschluesse)
{
$Anschluesse = $Anschluesse | Sort-Object "Name"
# $Pfad = $TXTPfadFeld.Text
# $Datei = Get-Content $Pfad
# $ZielDateien = ZielDateienHolen
# $GesamtEintraege = $($ZielDateien.count) * $($Datei.Length)
# Write-Host "Initiale GesamtEintraege: " $GesamtEintraege
# Write-Host "Uebergebene Anschluesse: " $Anschluesse
foreach ($Anschluss in $Anschluesse) {
# Write-Host "Aktueller Anschluss: " $Anschluss.Name
$AnschlussBauteil = $Anschluss.Name.Substring(0,$Anschluss.Name.Length - 2)
$SollAnschluesse = @(0,1,2,3,4,5,6,7)
foreach ($SubAnschluss in $Anschluesse) {
# Write-Host "Aktueller Sub-Anschluss: " $SubAnschluss.Name
$SubAnschlussBauteil = $SubAnschluss.Name.Substring(0,$SubAnschluss.Name.Length - 2)
if ($SubAnschlussBauteil -eq $AnschlussBauteil) {
# Write-Host "Fall eingetreten: Vorletzte Stelle von Anschluss und SubAnschluss sind gleich"
$SubAnschlussLetzteStelle = $($SubAnschluss.Name).Substring($SubAnschluss.Name.Length - 1,1)
# Write-Host "Inhalt von SubAnschlussLetzteStelle: " $SubAnschlussLetzteStelle
# Write-Host "Alte SollAnschluesse: " $SollAnschluesse
$SollAnschluesse = $SollAnschluesse | Where-Object {$_ -ne $SubAnschlussLetzteStelle}
# Write-Host "Neue SollAnschluesse: " $SollAnschluesse
}
}
# Write-Host "Uebergebene fehlende Anschluesse: " $SollAnschluesse
foreach ($FehlenderAnschluss in $SollAnschluesse) {
# Write-Host "Aktuell fehlender Anschluss: " $FehlenderAnschluss
#Fur die FortschrittsAnzeige die Anzahl der GesamtEintraege nach oben korrigieren
[System.Double] $GesamtEintraege = $FATextfeldGesamtEintraege.Text
$GesamtEintraege++
$FATextfeldGesamtEintraege.Text = $GesamtEintraege
$Name = $Anschluss.Name
$BMKZahl = $($($Name.Substring(0,$Name.Length - 1)) + $FehlenderAnschluss)
$Anschluesse += @([PSCustomObject]@{
Name = $BMKZahl
Kommentar = ""
#Zeile = "" wird nich gebraucht, da hier keine Duplikate auftreten koennen. Ausserdem gibt es ohnehin keine zugehoerige Zeile in der UrsprungsDatei
Bezug = ""
})
# Write-Host "Neue Anschluesse: " $Anschluesse
}
}
Write-Host "Aktualisierte Zahl GesamtEintraege: " $GesamtEintraege
$Anschluesse = $Anschluesse | Sort-Object "Name"
# Write-Host "Neue Anschluesse: " $Anschluesse
return $Anschluesse
}
Main