diff --git a/IO-Konvertierer.ps1 b/IO-Konvertierer.ps1 new file mode 100644 index 0000000..bc38272 --- /dev/null +++ b/IO-Konvertierer.ps1 @@ -0,0 +1,2163 @@ +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 \ No newline at end of file diff --git a/Test-Dateien/BELYARN_20230404.txt b/Test-Dateien/BELYARN_20230404.txt new file mode 100644 index 0000000..0c6c1bc --- /dev/null +++ b/Test-Dateien/BELYARN_20230404.txt @@ -0,0 +1,554 @@ +'DI0023','STEUERSPANNUNG 24V UC200 OK','24V OK','=A01+UH000-KF02i','STEUERSPANNUNG 24V UC200 OK','CONTROL VOLTAGE 24V UC200 OK','TENSION DE MANIOBRA 24V UC200 OK','' +'DI0020','STEUERSPANNUNG 24V UH000 OK','24V OK UH000','=A01+UH000-KF02i','STEUERSPANNUNG 24V UH000 OK','CONTROL VOLTAGE 24V UH000 OK','TENSION DE MANIOBRA 24V UH000 OK','' +'DI0022','STEUERSPANNUNG 24V UC103 ','24V OK','=A01+UH000-KF02i','STEUERSPANNUNG 24V UC103 OK','CONTROL VOLTAGE 24V UC103 OK','TENSION DE MANIOBRA 24V UC103 OK','' +'DI0021','STEUERSPANNUNG 24V UC102-UC101 OK','24V OK','=A01+UH000-KF02i','STEUERSPANNUNG 24V UC102-UC101 OK','CONTROL VOLTAGE 24V UC102-UC101 OK','TENSION DE MANIOBRA 24V UC102-UC101 OK','' +'KF0013','DRUCKL.-WARTUNGSEINH. SCHLIESSEN','COMPR. AIR OFF','=A01+UH000-KF01Q','DRUCKL.-WARTUNGSEINH. SCHLIESSEN','CLOSE PRESS.-MAINTENANCE UNIT','AIRE COMPRIMIDO/VÁLVULA DE AISLAMIENTO C','' +'KF0012','RESET NOT HALT','RESET E-STOP','=A01+UH000-KF01Q','RESET NOT HALT','RESET EMERGENCY STOP','RESET PARO DE EMERGENCIA','' +'PF0011','ÜBERSTROM/SICHERUNGSFALL','IL-YE-LED','=A01+UH000-KF01Q','ÜBERSTROM/SICHERUNGSFALL','OVERCURRENT/MIN. CIRCUIT BREAKERS','SOBREINTENSIDAD/FUSIBLE AUTOMÁTICO','' +'PF0010','DRUCKLUFT FEHLT','IL-YE-LED','=A01+UH000-KF01Q','DRUCKLUFT FEHLT','COMPRESSED AIR MISSING','AIRE COMPRIMIDO DESCONECTADO','' +'PF0002','START NACH STÖRUNG','IPB-CL-LED','=A01+UH000-KF00Q','START NACH STÖRUNG','START AFTER TROUBLE','ARRANQUE DESPUÉS DE AVERÍA','' +'PF0004','STÖRUNG KOMMUNIKATION PC-SPS','IL-YE-LED','=A01+UH000-KF00Q','STÖRUNG KOMMUNIKATION PC-SPS','TROUBLE COMMUNICATION PC-PLC','AVERÍA COMMUNICATIÓN PC-CPP','' +'PF0006','ABHEBEN AKTIV','IL-YE-LED','=A01+UH000-KF00Q','ABHEBEN AKTIV','LIFT OFF ACTIVE','SEPARAR ACTIVO','' +'PF0005','LAUFZEITFEHLER','IPB-YE-LED','=A01+UH000-KF00Q','LAUFZEITFEHLER','TRAVEL TIME ERROR','ERROR DE TIEMPO','' +'PF0003','NOT HALT BETÄTIGT','IL-YE-LED','=A01+UH000-KF00Q','NOT HALT BETÄTIGT','EMERGENCY STOP PUSHED','PARO EMERGENCIA OK','' +'PF0001','ANLAGE EIN','IPB-GN-LED','=A01+UH000-KF00Q','ANLAGE EIN','SYSTEM ON','SISTEMA ENCENDIDO','' +'PF0000','STÖRUNG ALLGEMEIN','IL-YE-LED','=A01+UH000-KF00Q','STÖRUNG ALLGEMEIN','GENERAL TROUBLE','AVERÍA','' +'DI0017','PHASENÜBERWACHUNGSRELAIS 400VAC EIN','MONITOR. RELAY','=A01+UH000-KF01i','PHASENÜBERWACHUNGSRELAIS 400VAC EIN','PHASE MONITORING RELAY 400VAC ON','VIGILANCIA DE FASE EL RELE´','' +'SF0015','RESET AKTIV','PB-BK-NO','=A01+UH000-KF01i','RESET AKTIV','RESET ACTIVE','RESET AKTIVA','' +'DI0014','HAUPTSCHÜTZE EIN','MAIN CONTACT.','=A01+UH000-KF01i','HAUPTSCHÜTZE EIN','MAIN CONTACTORS ON','ENCENDIDO CONTACTOR PRINCIPAL','' +'DI0013','SICHERHEITSRELAIS EIN','SAFETY RELAY','=A01+UH000-KF01i','SICHERHEITSRELAIS EIN','SAFETY RELAY ON','RELÉ DE SEGURIDAD ENCENDIDO','' +'DI0012','SICHERUNGSAUTOMATENFALL','CIRCUIT BR.','=A01+UH000-KF01i','SICHERUNGSAUTOMATENFALL','MINIATURE CIRCUIT BREAKERS','FUSIBLE AUTOMÁTICO','' +'DI0011','ÜBERSTROM','MOTORS','=A01+UH000-KF01i','ÜBERSTROM','OVERCURRENT','SOBREINTENSIDAD','' +'BG0010','DRUCKLUFT OK','COMPR. AIR','=A01+UH000-KF01i','DRUCKLUFT OK','COMPRESSED AIR OK','AIRE COMPRIMIDO OK','' +'SF0004','LAMPENTEST','PB-WH-NO','=A01+UH000-KF00i','LAMPENTEST','LAMP TEST','ENSAYO LAMPARA','' +'SF0006','ANTRIEBE ABHEBEN','SS-BK-NO','=A01+UH000-KF00i','ANTRIEBE ABHEBEN','LIFT OFF CONVEYORS','SEPARAR MOTOR','' +'SF0005','LAUFZEITFEHLER','IPB-YE-N0','=A01+UH000-KF00i','LAUFZEITFEHLER','TRAVEL TIME ERROR','ERROR DE TIEMPO','' +'SF0003','NOT HALT SCHALTSCHRANK','EPB-RD-NC','=A01+UH000-KF00i','NOT HALT','EMERGENCY STOP','PARO DE EMERGENCIA ARMARIO DE DISTRIBUCI','' +'SF0002','START NACH STÖRUNG','IPB-CL-NO','=A01+UH000-KF00i','START NACH STÖRUNG','START AFTER TROUBLE','ARRANQUE DESPUÉS DE AVERÍA','' +'SF0001','ANLAGE EIN','IPB-GN-NO','=A01+UH000-KF00i','ANLAGE EIN','SYSTEM ON','SISTEMA ENCENDIDO','' +'SF0000','ANLAGE AUS','PB-BK-NC','=A01+UH000-KF00i','ANLAGE AUS','SYSTEM OFF','SISTEMA APAGADO','' +'BG1303','SENSOR HAUPTSTR. FB213','LT-FB213','=A01+UC102-KF04i','','','','' +'BG1424','SENSOR HAUPTSTR. EINFAHRT FB211','LT-ENTER FB211','=A01+UH000-KF05i','','','','' +'BG1462','SENSOR HAUPTSTR. AUSFAHRT FB222','LT-EXIT-FB222','=A01+UH000-KF08i','','','','' +'BG3233','SENSOR HAUPTSTR. FB322','LT-FB322','=A01+UH000-KF16i','','','','' +'BG3133','SENSOR HAUPTSTR. FB312','LT-FB312','=A01+UH000-KF12i','','','','' +'MB1487','WEICHE ABZWEIG AUSFAHRT FB222','SW EXIT FB222','=A01+UH000-KF10Q','','','','' +'MA1437','ANTRIEB HAUPTSTR. AUSFAHRT RF - RSM FB212','M-BI FB212','=A01+UH000-KF05Q','','','','' +'MA1436','ANTRIEB HAUPTSTR. EINFAHRT RF - RSM FB211','M-BI FB211','=A01+UH000-KF05Q','','','','' +'BG1460','SENSOR HAUPTSTR. AUSFAHRT FB221','LT- EXIT FB221','=A01+UH000-KF08i','','','','' +'BG1417','SENSOR HAUPTSTR. FLYER 6','LT-ENTER RF6','=A01+UH000-KF04i','','','','' +'MA1480','ANTRIEB HAUPTSTR. EINFAHRT RF - RSM FB221','M-BI FB221','=A01+UH000-KF10Q','','','','' +'QA1525','ANTRIEB HAUPTSTR. RF 8','M-BI RF 8','=A01+UC103-KF02Q','','','','' +'MA1524','ANTRIEB HAUPTSTR. RF 8','M-BI RF 8','=A01+UC103-KF02Q','','','','' +'BG1140','SENSOR HAUPTSTR. FLYER 3 FB215','LT RF3 FB215','=A01+UC101-KF06i','','','','' +'MB1486','WEICHE ABZWEIG HAUPTSTR. EINFAHRT FB73','SW ENTER ','=A01+UH000-KF10Q','','','','' +'QA1483','ANTRIEB HAUPTSTR. RF - RSM','M-BI RSM-RF','=A01+UH000-KF10Q','','','','' +'MA1482','ANTRIEB HAUPTSTR. RF - RSM','M-BI RF-RSM','=A01+UH000-KF10Q','','','','' +'BG1457','SENSOR HAUPTSTR. EINFAHRT FB222','LT-ENTER-FB222','=A01+UH000-KF07i','','','','' +'BG1461','SENSOR HAUPTSTR. EINFAHRT FB221','LT-ENTER-FB221','=A01+UH000-KF08i','','','','' +'BG1420','SENSOR HAUPTSTR. AUSFAHRT FB213','LT- EXIT FB213','=A01+UH000-KF05i','','','','' +'MA1484','ANTRIEB HAUPTSTR. AUSFAHRT RF - RSM FB222','M-BI FB222','=A01+UH000-KF10Q','','','','' +'BG1421','SENSOR HAUPTSTR. FB212','LT-FB212','=A01+UH000-KF05i','','','','' +'QA1477','ANTRIEB EIN-AUSFAHRT HAUPTSTR. RF - RSM','M-BI RSM-RF','=A01+UH000-KF09Q','','','','' +'MA1476','ANTRIEB EIN-AUSFAHRT HAUPTSTR. RF - RSM','M-BI RF-RSM','=A01+UH000-KF09Q','','','','' +'MB3236','WEICHE GERADE FB320','STRAIGHT','=A01+UH000-KF20Q','','','','' +'MB3237','WEICHE ABZWEIG FB320','BRANCH ','=A01+UH000-KF20Q','','','','' +'BG3231','SENSOR HAUPTSTR. FB321','LT-FB321','=A01+UH000-KF16i','','','','' +'BG3132','SENSOR HAUPTSTR. FB310-FB320','LT-FB310-FB320','=A01+UH000-KF12i','','','','' +'MB3136','WEICHE GERADE FB310','STRAIGHT','=A01+UH000-KF14Q','','','','' +'MB3137','WEICHE ABZWEIG FB310','BRANCH ','=A01+UH000-KF14Q','','','','' +'QA1433','ANTRIEB EIN-AUSFAHRT HAUPTSTR. RF - RSM','M-BI RSM-RF','=A01+UH000-KF05Q','','','','' +'MA1432','ANTRIEB EIN-AUSFAHRT HAUPTSTR. RF - RSM','M-BI RF-RSM','=A01+UH000-KF05Q','','','','' +'MB1422','WEICHE ABZWEIG PUFFER FB212','SW EXIT FB212','=A01+UH000-KF04Q','','','','' +'BG1423','SENSOR HAUPTSTR. AUSFAHRT FB212','LT-EXIT FB212','=A01+UH000-KF05i','','','','' +'QA3235','ANTRIEB HAUPTSTRECKE -> RSM 28-21 ','RA-BI','=A01+UH000-KF20Q','','','','' +'MA3234','ANTRIEB HAUPTSTRECKE -> RSM 21-28 ','RA-BI','=A01+UH000-KF20Q','','','','A' +'QA3135','ANTRIEB HAUPTSTRECKE -> RSM 10-1','RA-BI','=A01+UH000-KF14Q','','','','' +'MA3134','ANTRIEB HAUPTSTRECKE -> RSM 1-10','RA-BI','=A01+UH000-KF14Q','','','','A' +'QA3035','ANTRIEB HAUPTSTRECKE -> RSM 10-1','RA-BI','=A01+UC200-KF03Q','','','','' +'MA3034','ANTRIEB HAUPTSTRECKE -> RSM 1-10','RA-BI','=A01+UC200-KF03Q','','','','A' +'PF3214','RUNDUMLEUCHTE STÖRUNG RSM 11-20','LED-YE_FAULT','=A01+UH000-KF18Q','','','','' +'SF3216','RESET/START NACH NOT HALT RSM 21-25','IPB-YE-NO','=A01+UH000-KF14i','RESET','RESET','RESET','' +'PF3216','RESET/START NACH NOT HALT RSM 21-25','IPB-YE-LED ','=A01+UH000-KF18Q','','','','' +'SF3215','NOT HALT RSM 21-25','EPB-NC','=A01+UH000-KF14i','NOT-HALT','E-STOP','E-STOP','' +'PF3114','RUNDUMLEUCHTE STÖRUNG RSM 11-20','LED-YE_FAULT','=A01+UH000-KF12Q','','','','' +'SF3116','RESET/START NACH NOT HALT RSM 11-20','IPB-YE-NO','=A01+UH000-KF10i','RESET','RESET','RESET','' +'PF3116','RESET/START NACH NOT HALT RSM 11-20','IPB-YE-LED ','=A01+UH000-KF12Q','','','','' +'SF3115','NOT HALT RSM 11-20','EPB-NC','=A01+UH000-KF10i','NOT-HALT','E-STOP','E-STOP','' +'SF3226','ZUG WECHSELN RSM 30','LDT-GN-NO','=A01+UH000-KF15i','-UZ3226','-UZ3226','','' +'PF3254','ZUG WECHSELN RSM 30','LDT-GN-LED ','=A01+UH000-KF22Q','','','','' +'QA3257','ANTRIEB AUSFAHREN RSM 30','RA-BI','=A01+UH000-KF22Q','','','','' +'MA3256','ANTRIEB EINFAHREN RSM 30','RA-BI','=A01+UH000-KF22Q','','','','A' +'BG3227','SENSOR OPTISCH RSM 30','OPT. AP110','=A01+UH000-KF15i','','','','' +'SF3224','ZUG WECHSELN RSM 29','LDT-GN-NO','=A01+UH000-KF15i','-UZ3224','-UZ3224','','' +'PF3250','ZUG WECHSELN RSM 29','LDT-GN-LED ','=A01+UH000-KF22Q','','','','' +'MB3251','WEICHE ABZWEIG RSM 29','SW RSM 29','=A01+UH000-KF22Q','','','','' +'QA3253','ANTRIEB AUSFAHREN RSM 29','RA-BI','=A01+UH000-KF22Q','','','','' +'MA3252','ANTRIEB EINFAHREN RSM 29','RA-BI','=A01+UH000-KF22Q','','','','A' +'BG3225','SENSOR OPTISCH RSM 29','OPT. AP110','=A01+UH000-KF15i','','','','' +'MB3241','WEICHE ABZWEIG RSM 27','SW RSM 27','=A01+UH000-KF21Q','','','','' +'MB3231','WEICHE ABZWEIG RSM 26','SW RSM 26','=A01+UH000-KF20Q','','','','' +'MB3245','WEICHE ABZWEIG RSM 28','SW RSM 28','=A01+UH000-KF21Q','','','','' +'QA3247','ANTRIEB AUSFAHREN RSM 28','RA-BI','=A01+UH000-KF21Q','','','','' +'MA3246','ANTRIEB EINFAHREN RSM 28','RA-BI','=A01+UH000-KF21Q','','','','A' +'BG3223','SENSOR OPTISCH RSM 28','OPT. AP110','=A01+UH000-KF15i','','','','' +'QA3243','ANTRIEB AUSFAHREN RSM 27','RA-BI','=A01+UH000-KF21Q','','','','' +'MA3242','ANTRIEB EINFAHREN RSM 27','RA-BI','=A01+UH000-KF21Q','','','','A' +'BG3221','SENSOR OPTISCH RSM 27','OPT. AP110','=A01+UH000-KF15i','','','','' +'QA3233','ANTRIEB AUSFAHREN RSM 26','RA-BI','=A01+UH000-KF20Q','','','','' +'MA3232','ANTRIEB EINFAHREN RSM 26','RA-BI','=A01+UH000-KF20Q','','','','A' +'BG3213','SENSOR OPTISCH RSM 26','OPT. AP110','=A01+UH000-KF14i','','','','' +'MB3225','WEICHE ABZWEIG RSM 25','SW RSM 25','=A01+UH000-KF19Q','','','','' +'QA3227','ANTRIEB AUSFAHREN RSM 25','RA-BI','=A01+UH000-KF19Q','','','','' +'MA3226','ANTRIEB EINFAHREN RSM 25','RA-BI','=A01+UH000-KF19Q','','','','A' +'BG3211','SENSOR OPTISCH RSM 25','OPT. AP110','=A01+UH000-KF14i','','','','' +'QA3223','ANTRIEB AUSFAHREN RSM 24','RA-BI','=A01+UH000-KF19Q','','','','' +'MA3222','ANTRIEB EINFAHREN RSM 24','RA-BI','=A01+UH000-KF19Q','','','','A' +'BG3207','SENSOR OPTISCH RSM 24','OPT. AP110','=A01+UH000-KF13i','','','','' +'MB3221','WEICHE ABZWEIG RSM 24','SW RSM 24','=A01+UH000-KF19Q','','','','' +'QA3213','ANTRIEB AUSFAHREN RSM 23','RA-BI','=A01+UH000-KF18Q','','','','' +'MA3212','ANTRIEB EINFAHREN RSM 23','RA-BI','=A01+UH000-KF18Q','','','','A' +'BG3205','SENSOR OPTISCH RSM 23','OPT. AP110','=A01+UH000-KF13i','','','','' +'QA3207','ANTRIEB AUSFAHREN RSM 22','RA-BI','=A01+UH000-KF17Q','','','','' +'MA3206','ANTRIEB EINFAHREN RSM 22','RA-BI','=A01+UH000-KF17Q','','','','A' +'BG3203','SENSOR OPTISCH RSM 22','OPT. AP110','=A01+UH000-KF13i','','','','' +'QA3203','ANTRIEB AUSFAHREN RSM 21','RA-BI','=A01+UH000-KF17Q','','','','' +'MA3202','ANTRIEB EINFAHREN RSM 21','RA-BI','=A01+UH000-KF17Q','','','','A' +'BG3201','SENSOR OPTISCH RSM 21','OPT. AP110','=A01+UH000-KF13i','','','','' +'MB3211','WEICHE ABZWEIG RSM 23','SW RSM 23','=A01+UH000-KF18Q','','','','' +'MB3205','WEICHE ABZWEIG RSM 22','SW RSM 22','=A01+UH000-KF17Q','','','','' +'MB3201','WEICHE ABZWEIG RSM 21','SW RSM 21','=A01+UH000-KF17Q','','','','' +'SF3222','ZUG WECHSELN RSM 28','LDT-GN-NO','=A01+UH000-KF15i','-UZ3222','-UZ3222','','' +'PF3244','ZUG WECHSELN RSM 28','LDT-GN-LED ','=A01+UH000-KF21Q','','','','' +'SF3220','ZUG WECHSELN RSM 27','LDT-GN-NO','=A01+UH000-KF15i','-UZ3220','-UZ3220','','' +'PF3240','ZUG WECHSELN RSM 27','LDT-GN-LED ','=A01+UH000-KF21Q','','','','' +'SF3212','ZUG WECHSELN RSM 26','LDT-GN-NO','=A01+UH000-KF14i','-UZ3300','-UZ3300','','' +'PF3230','ZUG WECHSELN RSM 26','LDT-GN-LED ','=A01+UH000-KF20Q','','','','' +'SF3210','ZUG WECHSELN RSM 25','LDT-GN-NO','=A01+UH000-KF14i','-UZ3210','-UZ3210','','' +'PF3224','ZUG WECHSELN RSM 25','LDT-GN-LED ','=A01+UH000-KF19Q','','','','' +'SF3206','ZUG WECHSELN RSM 24','LDT-GN-NO','=A01+UH000-KF13i','-UZ3206','-UZ3206','','' +'PF3220','ZUG WECHSELN RSM 24','LDT-GN-LED ','=A01+UH000-KF19Q','','','','' +'SF3204','ZUG WECHSELN RSM 23','LDT-GN-NO','=A01+UH000-KF13i','-UZ3204','-UZ3204','','' +'PF3210','ZUG WECHSELN RSM 23','LDT-GN-LED ','=A01+UH000-KF18Q','','','','' +'SF3202','ZUG WECHSELN RSM 22','LDT-GN-NO','=A01+UH000-KF13i','-UZ3202','-UZ3202','','' +'PF3204','ZUG WECHSELN RSM 22','LDT-GN-LED ','=A01+UH000-KF17Q','','','','' +'SF3200','ZUG WECHSELN RSM 21','LDT-GN-NO','=A01+UH000-KF13i','-UZ3200','-UZ3200','','' +'PF3200','ZUG WECHSELN RSM 21','LDT-GN-LED ','=A01+UH000-KF17Q','','','','' +'MB3155','WEICHE ABZWEIG RSM 20','SW RSM 20','=A01+UH000-KF16Q','','','','' +'QA3157','ANTRIEB AUSFAHREN RSM 20','RA-BI','=A01+UH000-KF16Q','','','','' +'MA3156','ANTRIEB EINFAHREN RSM 20','RA-BI','=A01+UH000-KF16Q','','','','A' +'BG3127','SENSOR OPTISCH RSM 20','OPT. AP110','=A01+UH000-KF11i','','','','' +'QA3153','ANTRIEB AUSFAHREN RSM 19','RA-BI','=A01+UH000-KF16Q','','','','' +'MA3152','ANTRIEB EINFAHREN RSM 19','RA-BI','=A01+UH000-KF16Q','','','','A' +'BG3125','SENSOR OPTISCH RSM 19','OPT. AP110','=A01+UH000-KF11i','','','','' +'QA3147','ANTRIEB AUSFAHREN RSM 18','RA-BI','=A01+UH000-KF15Q','','','','' +'MA3146','ANTRIEB EINFAHREN RSM 18','RA-BI','=A01+UH000-KF15Q','','','','A' +'BG3123','SENSOR OPTISCH RSM 18','OPT. AP110','=A01+UH000-KF11i','','','','' +'QA3143','ANTRIEB AUSFAHREN RSM 17','RA-BI','=A01+UH000-KF15Q','','','','' +'MA3142','ANTRIEB EINFAHREN RSM 17','RA-BI','=A01+UH000-KF15Q','','','','A' +'BG3121','SENSOR OPTISCH RSM 17','OPT. AP110','=A01+UH000-KF11i','','','','' +'QA3133','ANTRIEB AUSFAHREN RSM 16','RA-BI','=A01+UH000-KF14Q','','','','' +'MA3132','ANTRIEB EINFAHREN RSM 16','RA-BI','=A01+UH000-KF14Q','','','','A' +'BG3113','SENSOR OPTISCH RSM 16','OPT. AP110','=A01+UH000-KF10i','','','','' +'QA3127','ANTRIEB AUSFAHREN RSM 15','RA-BI','=A01+UH000-KF13Q','','','','' +'MA3126','ANTRIEB EINFAHREN RSM 15','RA-BI','=A01+UH000-KF13Q','','','','A' +'BG3111','SENSOR OPTISCH RSM 15','OPT. AP110','=A01+UH000-KF10i','','','','' +'QA3123','ANTRIEB AUSFAHREN RSM 14','RA-BI','=A01+UH000-KF13Q','','','','' +'MA3122','ANTRIEB EINFAHREN RSM 14','RA-BI','=A01+UH000-KF13Q','','','','A' +'BG3107','SENSOR OPTISCH RSM 14','OPT. AP110','=A01+UH000-KF09i','','','','' +'MB3151','WEICHE ABZWEIG RSM 19','SW RSM 19','=A01+UH000-KF16Q','','','','' +'MB3145','WEICHE ABZWEIG RSM 18','SW RSM 18','=A01+UH000-KF15Q','','','','' +'MB3141','WEICHE ABZWEIG RSM 17','SW RSM 17','=A01+UH000-KF15Q','','','','' +'MB3131','WEICHE ABZWEIG RSM 16','SW RSM 16','=A01+UH000-KF14Q','','','','' +'MB3125','WEICHE ABZWEIG RSM 15','SW RSM 15','=A01+UH000-KF13Q','','','','' +'MB3121','WEICHE ABZWEIG RSM 14','SW RSM 14','=A01+UH000-KF13Q','','','','' +'SF3126','ZUG WECHSELN RSM 20','LDT-GN-NO','=A01+UH000-KF11i','-UZ3122','-UZ3122','','' +'PF3154','ZUG WECHSELN RSM 20','LDT-GN-LED ','=A01+UH000-KF16Q','','','','' +'SF3124','ZUG WECHSELN RSM 19','LDT-GN-NO','=A01+UH000-KF11i','-UZ3120','-UZ3120','','' +'PF3150','ZUG WECHSELN RSM 19','LDT-GN-LED ','=A01+UH000-KF16Q','','','','' +'SF3122','ZUG WECHSELN RSM 18','LDT-GN-NO','=A01+UH000-KF11i','-UZ3116','-UZ3116','','' +'PF3144','ZUG WECHSELN RSM 18','LDT-GN-LED ','=A01+UH000-KF15Q','','','','' +'SF3120','ZUG WECHSELN RSM 17','LDT-GN-NO','=A01+UH000-KF11i','-UZ3120','-UZ3102','','' +'PF3140','ZUG WECHSELN RSM 17','LDT-GN-LED ','=A01+UH000-KF15Q','','','','' +'SF3112','ZUG WECHSELN RSM 16','LDT-GN-NO','=A01+UH000-KF10i','-UZ3112','-UZ3112','','' +'PF3130','ZUG WECHSELN RSM 16','LDT-GN-LED ','=A01+UH000-KF14Q','','','','' +'SF3110','ZUG WECHSELN RSM 15','LDT-GN-NO','=A01+UH000-KF10i','-UZ3110','-UZ3110','','' +'PF3124','ZUG WECHSELN RSM 15','LDT-GN-LED ','=A01+UH000-KF13Q','','','','' +'SF3106','ZUG WECHSELN RSM 14','LDT-GN-NO','=A01+UH000-KF09i','-UZ3106','-UZ3106','','' +'PF3120','ZUG WECHSELN RSM 14','LDT-GN-LED ','=A01+UH000-KF13Q','','','','' +'QA3113','ANTRIEB AUSFAHREN RSM 13','RA-BI','=A01+UH000-KF12Q','','','','' +'MA3112','ANTRIEB EINFAHREN RSM 13','RA-BI','=A01+UH000-KF12Q','','','','A' +'BG3105','SENSOR OPTISCH RSM 13','OPT. AP110','=A01+UH000-KF09i','','','','' +'MB3111','WEICHE ABZWEIG RSM 13','SW RSM 13','=A01+UH000-KF12Q','','','','' +'SF3104','ZUG WECHSELN RSM 13','LDT-GN-NO','=A01+UH000-KF09i','-UZ3104','-UZ3104','','' +'PF3110','ZUG WECHSELN RSM 13','LDT-GN-LED ','=A01+UH000-KF12Q','','','','' +'QA3107','ANTRIEB AUSFAHREN RSM 12','RA-BI','=A01+UH000-KF11Q','','','','' +'MA3106','ANTRIEB EINFAHREN RSM 12','RA-BI','=A01+UH000-KF11Q','','','','A' +'BG3103','SENSOR OPTISCH RSM 12','OPT. AP110','=A01+UH000-KF09i','','','','' +'MB3105','WEICHE ABZWEIG RSM 12','SW RSM 12','=A01+UH000-KF11Q','','','','' +'SF3102','ZUG WECHSELN RSM 12','LDT-GN-NO','=A01+UH000-KF09i','-UZ3102','-UZ3102','','' +'PF3104','ZUG WECHSELN RSM 12','LDT-GN-LED ','=A01+UH000-KF11Q','','','','' +'SF3100','ZUG WECHSELN RSM 11','LDT-GN-NO','=A01+UH000-KF09i','-UZ3100','-UZ3100','','' +'PF3100','ZUG WECHSELN RSM 11','LDT-GN-LED ','=A01+UH000-KF11Q','','','','' +'QA3103','ANTRIEB AUSFAHREN RSM 11','RA-BI','=A01+UH000-KF11Q','','','','' +'MA3102','ANTRIEB EINFAHREN RSM 11','RA-BI','=A01+UH000-KF11Q','','','','A' +'BG3101','SENSOR OPTISCH RSM 11','OPT. AP110','=A01+UH000-KF09i','','','','' +'MB3101','WEICHE ABZWEIG RSM 11','SW RSM 11','=A01+UH000-KF11Q','','','','' +'BG3130','SENSOR HAUPTSTR. FB310 ','LT-FB310','=A01+UH000-KF12i','','','','' +'BG3230','SENSOR HAUPTSTR. FB320 ','LT-FB320','=A01+UH000-KF16i','','','','' +'BG3131','SENSOR HAUPTSTR. FB311','LT-FB311','=A01+UH000-KF12i','','','','' +'BG1541','SENSOR AUSFAHRT PUFFER F0902 FLYER 9','LT-EXIT F0902','=A01+UC103-KF02i','','','','' +'BG1540','SENSOR AUSFAHRT PUFFER F0901 FLYER 9','LT-EXIT F0901','=A01+UC103-KF02i','','','','' +'MB1574','ANPRESSEN NACHPUFFER F0901 FLYER 9','PRESS F0901','=A01+UC103-KF07Q','','','','' +'MB1575','ANPRESSEN NACHPUFFER F0902 FLYER 9','PRESS F0902','=A01+UC103-KF07Q','','','','' +'QA1571','ANTRIEB NACHPUFFER F0707 FLYER 9','M-BI-LE','=A01+UC103-KF07Q','','','','' +'MA1570','ANTRIEB NACHPUFFER F0901 FLYER 9','M-BI-RI','=A01+UC103-KF07Q','','','','' +'MB1544','ANPRESSEN PUFFER F0901 FLYER 9','PRESS F0901','=A01+UC103-KF04Q','','','','' +'MB1545','ANPRESSEN PUFFER F0902 FLYER 9','PRESS F0902','=A01+UC103-KF04Q','','','','' +'QA1561','ANTRIEB PUFFER F0901 FLYER 9','M-BI-RI','=A01+UC103-KF06Q','','','','' +'MA1560','ANTRIEB PUFFER F0901 FLYER 9','M-BI-LE','=A01+UC103-KF06Q','','','','' +'BG1546','SENSOR AUSFAHRT NACHPUFFER F0902 RF 9','LT-EXIT F0902','=A01+UC103-KF02i','','','','' +'BG1545','SENSOR AUSFAHRT NACHPUFFER F0901 RF 9','LT-EXIT F0901','=A01+UC103-KF02i','','','','' +'MB1541','WEICHE ABZWEIG EINFAHRT PUFFER F0902 FLYER 9','SW ENTER F0901','=A01+UC103-KF04Q','','','','' +'MB1540','WEICHE ABZWEIG EINFAHRT RF 9','SW ENTER RF 9','=A01+UC103-KF04Q','','','','' +'MB1567','WEICHE ABZWEIG EINFAHRT NACHP. RF 9','SW-STRAIGHT','=A01+UC103-KF06Q','','','','' +'MB1566','WEICHE ABZWEIG EINFAHRT NACHP. RF 9','SW-BRANCH','=A01+UC103-KF06Q','','','','' +'KF1555','IF RF 09: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC103-KF05Q','IF RF 09: START SPULENWECHSEL 2','IF RF 09: START EXCHANGE 2','','' +'DI1554','IF RF 09 : NEUE SPULE','IF-RELAIS','=A01+UC103-KF03i','IF RF 09: NEUE SPULE ','IF RF 09: NEW BOBBIN','','' +'KF1554','IF RF 09: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC103-KF05Q','IF RF 09: START SPULENWECHSEL 1','IF RF 09: START EXCHANGE 1','','' +'PF1547','RUNDUMLEUCHTE STÖRUNG FLYER 9','LED-YE_FAULT','=A01+UC103-KF04Q','','','','' +'SF1553','RESET FLYER 9','IPB-YE-NO','=A01+UC103-KF03i','RESET','RESET','RESET','' +'PF1553','RESET FLYER 9','IPB-YE-LED','=A01+UC103-KF05Q','','','','' +'SF1552','NOT HALT FLYER 9','EPB-NC','=A01+UC103-KF03i','NOT-HALT','E-STOP','E-STOP','' +'BG1556','SENSOR SPULE IN POSITION FLYER 9','BOBBIN IN POS','=A01+UC103-KF03i','','','','' +'BG1544','SENSOR ZUG IN DOFFER FLYER 9','LT-TRAIN IN DOF','=A01+UC103-KF02i','','','','' +'BG1543','SENSOR ZUG IN DOFFER PM 9','LT-TRAIN IN DOF','=A01+UC103-KF02i','','','','' +'MB1551','ABHEBEN ANTRIEBE PM 9','LIFT OFF BS 9','=A01+UC103-KF05Q','','','','' +'MA1556','ANTRIEBE FLYER 9','M-BI','=A01+UC103-KF05Q','','','','' +'MB1502','WEICHE ABZWEIG EINFAHRT PUFFER F0802 FLYER 8','SW ENTER F0802','=A01+UC103-KF00Q','','','','' +'MB1500','WEICHE ABZWEIG EINFAHRT FLYER 8','SW ENTER RF 8','=A01+UC103-KF00Q','','','','' +'MB1501','WEICHE ABZWEIG EINFAHRT RF 8','SW ENTER RF 8','=A01+UC103-KF00Q','','','','' +'MB1534','ANPRESSEN NACHPUFFER F0801 FLYER 8','PRESS F0801','=A01+UC103-KF03Q','','','','' +'MB1535','ANPRESSEN NACHPUFFER F0802 FLYER 8','PRESS F0802','=A01+UC103-KF03Q','','','','' +'QA1531','ANTRIEB NACHPUFFER F0802 RF 8','M-BI','=A01+UC103-KF03Q','','','','' +'MA1530','ANTRIEB NACHPUFFER F0801 RF 8','M-BI','=A01+UC103-KF03Q','','','','' +'MB1504','ANPRESSEN PUFFER F0801 FLYER 8','PRESS F0801','=A01+UC103-KF00Q','','','','' +'MB1505','ANPRESSEN PUFFER F0802 FLYER 8','PRESS F0802','=A01+UC103-KF00Q','','','','' +'QA1521','ANTRIEB PUFFER F0802 FLYER 8','M-BI-RI','=A01+UC103-KF02Q','','','','' +'MA1520','ANTRIEB PUFFER F0801 FLYER 8','M-BI-LE','=A01+UC103-KF02Q','','','','' +'BG1505','SENSOR AUSFAHRT NACHPUFFER F0801 FLYER 8','LT-EXIT F0801','=A01+UC103-KF00i','','','','' +'BG1506','SENSOR AUSFAHRT NACHPUFFER F0802 FLYER 8','LT-EXIT F0802','=A01+UC103-KF00i','','','','' +'BG1501','SENSOR AUSFAHRT PUFFER F0802 FLYER 8','LT-EXIT F0802','=A01+UC103-KF00i','','','','' +'BG1500','SENSOR AUSFAHRT PUFFER F0801 FLYER 8','LT-EXIT F0801','=A01+UC103-KF00i','','','','' +'SF1511','HAUPTSCHALTER EIN +UC103','I-MS ON','=A01+UC103-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1510','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC103-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1510','LM-ÜBERSTROM +UC103','IL-YE-LED','=A01+UC103-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'MB1527','WEICHE ABZWEIG EINFAHRT NACHP. RF 8','SW-BRANCH','=A01+UC103-KF02Q','','','','' +'MB1526','WEICHE ABZWEIG EINFAHRT NACHP. RF 8','SW-STRAIGHT','=A01+UC103-KF02Q','','','','' +'BG1503','SENSOR ZUG IN DOFFER PM 8','LT-TRAIN IN DOF','=A01+UC103-KF00i','','','','' +'BG1516','SENSOR SPULE IN POSITION FLYER 8','BOBBIN IN POS','=A01+UC103-KF01i','','','','' +'BG1504','SENSOR ZUG IN DOFFER FLYER 8','LT-TRAIN IN DOF','=A01+UC103-KF00i','','','','' +'MB1511','ABHEBEN ANTRIEBE PM 8','LIFT OFF BS 8','=A01+UC103-KF01Q','','','','' +'MA1516','ANTRIEBE FLYER 8','M-BI','=A01+UC103-KF01Q','','','','' +'KF1515','IF RF 08: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC103-KF01Q','IF RF 08: START SPULENWECHSEL 2','IF RF 08: START EXCHANGE 2','','' +'DI1514','IF RF 08 : NEUE SPULE','IF-RELAIS','=A01+UC103-KF01i','IF RF 08: NEUE SPULE ','IF RF 08: NEW BOBBIN','','' +'KF1514','IF RF 08: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC103-KF01Q','IF RF 08: START SPULENWECHSEL 1','IF RF 08: START EXCHANGE 1','','' +'PF1507','RUNDUMLEUCHTE STÖRUNG FLYER 8','LED-YE_FAULT','=A01+UC103-KF00Q','','','','' +'SF1513','RESET FLYER 8','IPB-YE-NO','=A01+UC103-KF01i','RESET','RESET','RESET','' +'PF1513','RESET FLYER 8','IPB-YE-LED','=A01+UC103-KF01Q','','','','' +'SF1512','NOT HALT FLYER 8','EPB-NC','=A01+UC103-KF01i','NOT-HALT','E-STOP','E-STOP','' +'BG1446','SENSOR AUSFAHRT NACHPUFFER F0702 RF 7','LT-EXIT F0702','=A01+UH000-KF06i','','','','' +'BG1445','SENSOR AUSFAHRT NACHPUFFER F0701 RF 7','LT-EXIT F0701','=A01+UH000-KF06i','','','','' +'MB1441','WEICHE ABZWEIG EINFAHRT F0701 RF 7','SW ENTER F0701 ','=A01+UH000-KF06Q','','','','' +'MB1443','WEICHE ABZWEIG AUSFAHRT NACHP. FLYER 7','SW EXIT RF7','=A01+UH000-KF06Q','','','','' +'MB1440','WEICHE ABZWEIG EINFAHRT RF 7','SW ENTER RF 7','=A01+UH000-KF06Q','','','','' +'MB1442','WEICHE ABZWEIG EINFAHRT F0702 RF 7','SW ENTER F0702','=A01+UH000-KF06Q','','','','' +'MB1474','ANPRESSEN NACHPUFFER F0701 FLYER 7','PRESS F0701','=A01+UH000-KF09Q','','','','' +'MB1475','ANPRESSEN NACHPUFFER F0702 FLYER 7','PRESS F0702','=A01+UH000-KF09Q','','','','' +'QA1471','ANTRIEB NACHPUFFER F0707 FLYER 7','M-BI-LE','=A01+UH000-KF09Q','','','','' +'MA1470','ANTRIEB NACHPUFFER F0701 FLYER 7','M-BI-RI','=A01+UH000-KF09Q','','','','' +'MB1444','ANPRESSEN PUFFER F0701 FLYER 7','PRESS F0701','=A01+UH000-KF06Q','','','','' +'MB1445','ANPRESSEN PUFFER F0702 FLYER 7','PRESS F0702','=A01+UH000-KF06Q','','','','' +'QA1461','ANTRIEB PUFFER F0701 FLYER 7','M-BI-RI','=A01+UH000-KF08Q','','','','' +'MA1460','ANTRIEB PUFFER F0701 FLYER 7','M-BI-LE','=A01+UH000-KF08Q','','','','' +'BG1441','SENSOR AUSFAHRT PUFFER F0702 FLYER 7','LT-EXIT F0702','=A01+UH000-KF06i','','','','' +'BG1440','SENSOR AUSFAHRT PUFFER F0701 FLYER 7','LT-EXIT F0701','=A01+UH000-KF06i','','','','' +'BG1456','SENSOR SPULE IN POSITION FLYER 7','BOBBIN IN POS','=A01+UH000-KF07i','','','','' +'BG1444','SENSOR ZUG IN DOFFER FLYER 7','LT-TRAIN IN DOF','=A01+UH000-KF06i','','','','' +'BG1443','SENSOR ZUG IN DOFFER PM 7','LT-TRAIN IN DOF','=A01+UH000-KF06i','','','','' +'MB1451','ABHEBEN ANTRIEBE PM 7','LIFT OFF BS 7','=A01+UH000-KF07Q','','','','' +'MA1456','ANTRIEBE FLYER 7','M-BI','=A01+UH000-KF07Q','','','','' +'MB1467','WEICHE ABZWEIG EINFAHRT NACHP. RF7','SW-STRAIGHT','=A01+UH000-KF08Q','','','','' +'MB1466','WEICHE ABZWEIG EINFAHRT NACHP. RF7','SW-BRANCH','=A01+UH000-KF08Q','','','','' +'KF1455','IF RF 07: START SPULENWECHSEL 2','IF-RELAIS','=A01+UH000-KF07Q','IF RF 07: START SPULENWECHSEL 2','IF RF 07: START EXCHANGE 2','','' +'DI1454','IF RF 07 : NEUE SPULE','IF-RELAIS','=A01+UH000-KF07i','IF RF 07: NEUE SPULE ','IF RF 07: NEW BOBBIN','','' +'KF1454','IF RF 07: START SPULENWECHSEL 1','IF-RELAIS','=A01+UH000-KF07Q','IF RF 07: START SPULENWECHSEL 1','IF RF 07: START EXCHANGE 1','','' +'PF1447','RUNDUMLEUCHTE STÖRUNG FLYER 7','LED-YE_FAULT','=A01+UH000-KF06Q','','','','' +'SF1453','RESET FLYER 7','IPB-YE-NO','=A01+UH000-KF07i','RESET','RESET','RESET','' +'PF1453','RESET FLYER 7','IPB-YE-LED','=A01+UH000-KF07Q','','','','' +'SF1452','NOT HALT FLYER 7','EPB-NC','=A01+UH000-KF07i','NOT-HALT','E-STOP','E-STOP','' +'SF3026','ZUG WECHSELN RSM 10','LDT-GN-NO','=A01+UC200-KF02i','-UZ3026','-UZ3026','','' +'PF3054','ZUG WECHSELN RSM 10','LDT-GN-LED ','=A01+UC200-KF05Q','','','','' +'SF3024','ZUG WECHSELN RSM 9','LDT-GN-NO','=A01+UC200-KF02i','-UZ3024','-UZ3024','','' +'PF3050','ZUG WECHSELN RSM 9','LDT-GN-LED ','=A01+UC200-KF05Q','','','','' +'QA3057','ANTRIEB AUSFAHREN RSM 10','RA-BI','=A01+UC200-KF05Q','','','','' +'MA3056','ANTRIEB EINFAHREN RSM 10','RA-BI','=A01+UC200-KF05Q','','','','A' +'BG3027','SENSOR OPTISCH RSM 10','OPT. AP110','=A01+UC200-KF02i','','','','' +'MB3055','WEICHE ABZWEIG RSM 10','SW RSM 10','=A01+UC200-KF05Q','','','','' +'QA3053','ANTRIEB AUSFAHREN RSM 9','RA-BI','=A01+UC200-KF05Q','','','','' +'MA3052','ANTRIEB EINFAHREN RSM 9','RA-BI','=A01+UC200-KF05Q','','','','A' +'BG3025','SENSOR OPTISCH RSM 9','OPT. AP110','=A01+UC200-KF02i','','','','' +'MB3051','WEICHE ABZWEIG RSM 9','SW RSM 09','=A01+UC200-KF05Q','','','','' +'SF3014','HAUPTSCHALTER EIN +UC200','I-MS ON','=A01+UC200-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF3017','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC200-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF3017','LM-ÜBERSTROM +UC200 RSM 1-10','IL-YE-LED','=A01+UC200-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'SF3020','ZUG WECHSELN RSM 7','LDT-GN-NO','=A01+UC200-KF02i','-UZ3020','-UZ3020','','' +'PF3040','ZUG WECHSELN RSM 7','LDT-GN-LED ','=A01+UC200-KF04Q','','','','' +'QA3043','ANTRIEB AUSFAHREN RSM 7','RA-BI','=A01+UC200-KF04Q','','','','' +'MA3042','ANTRIEB EINFAHREN RSM 7','RA-BI','=A01+UC200-KF04Q','','','','A' +'BG3021','SENSOR OPTISCH RSM 7','OPT. AP110','=A01+UC200-KF02i','','','','' +'MB3041','WEICHE ABZWEIG RSM 7','SW RSM 07','=A01+UC200-KF04Q','','','','' +'SF3022','ZUG WECHSELN RSM 8','LDT-GN-NO','=A01+UC200-KF02i','-UZ3022','-UZ3022','','' +'PF3044','ZUG WECHSELN RSM 8','LDT-GN-LED ','=A01+UC200-KF04Q','','','','' +'QA3047','ANTRIEB AUSFAHREN RSM 8','RA-BI','=A01+UC200-KF04Q','','','','' +'MA3046','ANTRIEB EINFAHREN RSM 8','RA-BI','=A01+UC200-KF04Q','','','','A' +'BG3023','SENSOR OPTISCH RSM 8','OPT. AP110','=A01+UC200-KF02i','','','','' +'MB3045','WEICHE ABZWEIG RSM 8','SW RSM 08','=A01+UC200-KF04Q','','','','' +'PF3014','RUNDUMLEUCHTE STÖRUNG RSM 01-10','LED-YE_FAULT','=A01+UC200-KF01Q','','','','' +'SF3016','RESET/START NACH NOT HALT RSM 1-10','IPB-YE-NO','=A01+UC200-KF01i','RESET','RESET','RESET','' +'PF3016','RESET/START NACH NOT HALT RSM 1-10','IPB-YE-LED ','=A01+UC200-KF01Q','','','','' +'SF3015','NOT HALT RSM 1-10','EPB-NC','=A01+UC200-KF01i','NOT-HALT','E-STOP','E-STOP','' +'SF3012','ZUG WECHSELN RSM 6','LDT-GN-NO','=A01+UC200-KF01i','-UZ3012','-UZ3012','','' +'PF3030','ZUG WECHSELN RSM 6','LDT-GN-LED ','=A01+UC200-KF03Q','','','','' +'QA3033','ANTRIEB AUSFAHREN RSM 6','RA-BI','=A01+UC200-KF03Q','','','','' +'MA3032','ANTRIEB EINFAHREN RSM 6','RA-BI','=A01+UC200-KF03Q','','','','A' +'BG3013','SENSOR OPTISCH RSM 6','OPT. AP110','=A01+UC200-KF01i','','','','' +'MB3031','WEICHE ABZWEIG RSM 6','SW RSM 06','=A01+UC200-KF03Q','','','','' +'SF3010','ZUG WECHSELN RSM 5','LDT-GN-NO','=A01+UC200-KF01i','-UZ3010','-UZ3010','','' +'PF3024','ZUG WECHSELN RSM 5','LDT-GN-LED ','=A01+UC200-KF02Q','','','','' +'QA3027','ANTRIEB AUSFAHREN RSM 5','RA-BI','=A01+UC200-KF02Q','','','','' +'MA3026','ANTRIEB EINFAHREN RSM 5','RA-BI','=A01+UC200-KF02Q','','','','A' +'BG3011','SENSOR OPTISCH RSM 5','OPT. AP110','=A01+UC200-KF01i','','','','' +'MB3025','WEICHE ABZWEIG RSM 5','SW RSM 05','=A01+UC200-KF02Q','','','','' +'SF3006','ZUG WECHSELN RSM 4','LDT-GN-NO','=A01+UC200-KF00i','-UZ3006','-UZ3006','','' +'PF3020','ZUG WECHSELN RSM 4','LDT-GN-LED ','=A01+UC200-KF02Q','','','','' +'SF3004','ZUG WECHSELN RSM 3','LDT-GN-NO','=A01+UC200-KF00i','-UZ3004','-UZ3004','','' +'PF3010','ZUG WECHSELN RSM 3','LDT-GN-LED ','=A01+UC200-KF01Q','','','','' +'QA3023','ANTRIEB AUSFAHREN RSM 4','RA-BI','=A01+UC200-KF02Q','','','','' +'MA3022','ANTRIEB EINFAHREN RSM 4','RA-BI','=A01+UC200-KF02Q','','','','A' +'BG3007','SENSOR OPTISCH RSM 4','OPT. AP110','=A01+UC200-KF00i','','','','' +'MB3021','WEICHE ABZWEIG RSM 4','SW RSM 04','=A01+UC200-KF02Q','','','','' +'QA3013','ANTRIEB AUSFAHREN RSM 3','RA-BI','=A01+UC200-KF01Q','','','','' +'MA3012','ANTRIEB EINFAHREN RSM 3','RA-BI','=A01+UC200-KF01Q','','','','A' +'BG3005','SENSOR OPTISCH RSM 3','OPT. AP110','=A01+UC200-KF00i','','','','' +'MB3011','WEICHE ABZWEIG RSM 3','SW RSM 03','=A01+UC200-KF01Q','','','','' +'SF3002','ZUG WECHSELN RSM 2','LDT-GN-NO','=A01+UC200-KF00i','-UZ3002','-UZ3002','','' +'PF3004','ZUG WECHSELN RSM 2','LDT-GN-LED ','=A01+UC200-KF00Q','','','','' +'QA3007','ANTRIEB AUSFAHREN RSM 2','RA-BI','=A01+UC200-KF00Q','','','','' +'MA3006','ANTRIEB EINFAHREN RSM 2','RA-BI','=A01+UC200-KF00Q','','','','A' +'BG3003','SENSOR OPTISCH RSM 2','OPT. AP110','=A01+UC200-KF00i','','','','' +'MB3005','WEICHE ABZWEIG RSM 2','SW RSM 02','=A01+UC200-KF00Q','','','','' +'SF3000','ZUG WECHSELN RSM 1','LDT-GN-NO','=A01+UC200-KF00i','-UZ3000','-UZ3000','','' +'PF3000','ZUG WECHSELN RSM 1 ','LDT-GN-LED ','=A01+UC200-KF00Q','','','','' +'QA3003','ANTRIEB AUSFAHREN RSM 1','RA-BI','=A01+UC200-KF00Q','','','','' +'MA3002','ANTRIEB EINFAHREN RSM 1','RA-BI','=A01+UC200-KF00Q','','','','A' +'BG3001','SENSOR OPTISCH RSM 1 ','OPT. AP110','=A01+UC200-KF00i','','','','' +'MA1464','ANTRIEB HAUPTSTR. AUSFAHRT RF - RSM FB212','M-BI FB212','=A01+UH000-KF08Q','','','','' +'MA1462','ANTRIEB HAUPTSTR. EINFAHRT FB211','M-BI FB211','=A01+UH000-KF08Q','','','','' +'MB1423','WEICHE ABZWEIG FB213','SW FB213','=A01+UH000-KF04Q','','','','' +'QA1425','ANTRIEB HAUPTSTECKE RF 6','M-BI-RF6 FB63','=A01+UH000-KF04Q','','','','' +'MA1424','ANTRIEB HAUPTSTECKE RF 6','M-BI-RF6 FB63','=A01+UH000-KF04Q','','','','' +'BG1405','SENSOR AUSFAHRT NACHPUFFER F0601 FLYER 6','LT-EXIT F0601','=A01+UH000-KF03i','','','','' +'BG1406','SENSOR AUSFAHRT NACHPUFFER F0602 FLYER 6','LT-EXIT F0602','=A01+UH000-KF03i','','','','' +'MB1401','WEICHE ABZWEIG EINFAHRT PUFFER F0601 FLYER 6','SW F0601','=A01+UH000-KF02Q','','','','' +'BG1422','SENSOR HAUPTSTR. FB212','LT-FB212','=A01+UH000-KF05i','','','','' +'MB1400','WEICHE ABZWEIG EINFAHRT FLYER 6','SW ENTER RF6','=A01+UH000-KF02Q','','','','' +'MB1403','WEICHE ABZWEIG NACHPUFFER F0601-F0602 ','SW EXIT','=A01+UH000-KF02Q','','','','' +'MB1434','ANPRESSEN NACHPUFFER F0601 FLYER 6','PRESS F0601','=A01+UH000-KF05Q','','','','' +'MB1435','ANPRESSEN NACHPUFFER F0602 FLYER 6','PRESS F0602','=A01+UH000-KF05Q','','','','' +'QA1431','ANTRIEB NACHPUFFER F0602 RF6','M-BI','=A01+UH000-KF05Q','','','','' +'MA1430','ANTRIEB NACHPUFFER F0601 RF6','M-BI','=A01+UH000-KF05Q','','','','' +'MB1404','ANPRESSEN PUFFER F0601 FLYER 6','PRESS F0601','=A01+UH000-KF02Q','','','','' +'MB1405','ANPRESSEN PUFFER F0602 FLYER 6','PRESS F0602','=A01+UH000-KF02Q','','','','' +'QA1421','ANTRIEB PUFFER F0602 FLYER 6','M-BI-RI','=A01+UH000-KF04Q','','','','' +'MA1420','ANTRIEB PUFFER F0601 FLYER 6','M-BI-LE','=A01+UH000-KF04Q','','','','' +'MB1427','WEICHE ABZWEIG EINFAHRT NACHP. RF 6','SW-BRANCH','=A01+UH000-KF04Q','','','','' +'MB1426','WEICHE ABZWEIG EINFAHRT NACHP. RF 6','SW-STRAIGHT','=A01+UH000-KF04Q','','','','' +'BG1401','SENSOR AUSFAHRT PUFFER F0602 FLYER 6','LT-EXIT F0602','=A01+UH000-KF03i','','','','' +'BG1400','SENSOR AUSFAHRT PUFFER F0601 FLYER 6','LT-EXIT F0601','=A01+UH000-KF03i','','','','' +'KF1415','IF RF 06: START SPULENWECHSEL 2','IF-RELAIS','=A01+UH000-KF03Q','IF RF 06: START SPULENWECHSEL 2','IF RF 06: START EXCHANGE 2','','' +'DI1414','IF RF 06 : NEUE SPULE','IF-RELAIS','=A01+UH000-KF04i','IF RF 06: NEUE SPULE ','IF RF 06: NEW BOBBIN','','' +'KF1414','IF RF 06: START SPULENWECHSEL 1','IF-RELAIS','=A01+UH000-KF03Q','IF RF 06: START SPULENWECHSEL 1','IF RF 06: START EXCHANGE 1','','' +'PF1407','RUNDUMLEUCHTE STÖRUNG FLYER 6','LED-YE_FAULT','=A01+UH000-KF02Q','','','','' +'SF1413','RESET FLYER 6','IPB-YE-NO','=A01+UH000-KF04i','RESET','RESET','RESET','' +'PF1413','RESET FLYER 6','IPB-YE-LED','=A01+UH000-KF03Q','','','','' +'SF1412','NOT HALT FLYER 6','EPB-NC','=A01+UH000-KF04i','NOT-HALT','E-STOP','E-STOP','' +'BG1403','SENSOR ZUG IN DOFFER PM 6','LT-TRAIN IN DOF','=A01+UH000-KF03i','','','','' +'BG1416','SENSOR SPULE IN POSITION FLYER 6','BOBBIN IN POS','=A01+UH000-KF04i','','','','' +'BG1404','SENSOR ZUG IN DOFFER FLYER 6','LT-TRAIN IN DOF','=A01+UH000-KF03i','','','','' +'MB1411','ABHEBEN ANTRIEBE PM 6','LIFT OFF RF 6','=A01+UH000-KF03Q','','','','' +'MA1416','ANTRIEBE FLYER 6','M-BI','=A01+UH000-KF03Q','','','','' +'KF1295','IF RF 05: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC102-KF05Q','IF RF 05: START SPULENWECHSEL 2','IF RF 05: START EXCHANGE 2','','' +'DI1294','IF RF 05 : NEUE SPULE','IF-RELAIS','=A01+UC102-KF03i','IF RF 05: NEUE SPULE ','IF RF 05: NEW BOBBIN','','' +'KF1294','IF RF 05: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC102-KF05Q','IF RF 05: START SPULENWECHSEL 1','IF RF 05: START EXCHANGE 1','','' +'PF1287','RUNDUMLEUCHTE STÖRUNG FLYER 5','LED-YE_FAULT','=A01+UC102-KF04Q','','','','' +'SF1293','RESET FLYER 5','IPB-YE-NO','=A01+UC102-KF03i','RESET','RESET','RESET','' +'PF1293','RESET FLYER 5','IPB-YE-LED','=A01+UC102-KF05Q','','','','' +'SF1292','NOT HALT FLYER 5','EPB-NC','=A01+UC102-KF03i','NOT-HALT','E-STOP','E-STOP','' +'BG1286','SENSOR AUSFAHRT NACHPUFFER F0501 RF 5','LT-EXIT F0501','=A01+UC102-KF02i','','','','' +'BG1285','SENSOR AUSFAHRT NACHPUFFER F0502 RF 5','LT-EXIT F0502','=A01+UC102-KF02i','','','','' +'BG1302','SENSOR HAUPTSTR. FB214','LT-FB214','=A01+UC102-KF04i','','','','' +'BG1301','SENSOR HAUPTSTR. FB214','LT-FB214','=A01+UC102-KF04i','','','','' +'BG1300','SENSOR HAUPTSTR. FB213','LT-FB213','=A01+UC102-KF04i','','','','' +'MB1316','WEICHE ABZWEIG FB214','SW FB214','=A01+UC102-KF07Q','','','','' +'MA1304','ANTRIEB HAUPTSTR. FB214','M-BI FB214','=A01+UC102-KF06Q','','','','' +'MA1302','ANTRIEB HAUPTSTR. FB213','M-BI FB213','=A01+UC102-KF06Q','','','','' +'MB1314','ANPRESSEN NACHPUFFER F0501 FLYER 5','PRESS F0501','=A01+UC102-KF07Q','','','','' +'MB1315','ANPRESSEN NACHPUFFER F0502 FLYER 5','PRESS F0502','=A01+UC102-KF07Q','','','','' +'QA1311','ANTRIEB NACHPUFFER F0502 FLYER 5','M-BI-RI','=A01+UC102-KF07Q','','','','' +'MA1310','ANTRIEB NACHPUFFER F0501 FLYER 5','M-BI-LE','=A01+UC102-KF07Q','','','','' +'MB1284','ANPRESSEN PUFFER F0501 FLYER 5','PRESS F0501','=A01+UC102-KF04Q','','','','' +'MB1285','ANPRESSEN PUFFER F0502 FLYER 5','PRESS F0502','=A01+UC102-KF04Q','','','','' +'QA1301','ANTRIEB PUFFER F0502 FLYER 5','M-BI-RI','=A01+UC102-KF06Q','','','','' +'MA1300','ANTRIEB PUFFER F0501 FLYER 5','M-BI-LE','=A01+UC102-KF06Q','','','','' +'BG1257','SENSOR HAUPTSTR. FLYER 4','LT-ENTER RF 4','=A01+UC102-KF01i','','','','' +'BG1281','SENSOR AUSFAHRT PUFFER F0502 FLYER 5','LT-EXIT F0502','=A01+UC102-KF02i','','','','' +'BG1280','SENSOR AUSFAHRT PUFFER F0501 FLYER 5','LT-EXIT F0501','=A01+UC102-KF02i','','','','' +'MB1282','WEICHE ABZWEIG EINFAHRT RF 5','SW ENTER RF 5','=A01+UC102-KF04Q','','','','' +'MB1281','WEICHE ABZWEIG EINFAHRT PUFFER F0501 FLYER 5','SW RF5 F501','=A01+UC102-KF04Q','','','','' +'MB1280','WEICHE ABZWEIG EINFAHRT PUFFER RF 5','SW ENTER RF 5','=A01+UC102-KF04Q','','','','' +'MB1307','WEICHE ABZWEIG EINFAHRT NACHP. RF 5','SW-BRANCH','=A01+UC102-KF06Q','','','','' +'MB1306','WEICHE ABZWEIG EINFAHRT NACHP. RF 5','SW-STRAIGHT','=A01+UC102-KF06Q','','','','' +'BG1296','SENSOR SPULE IN POSITION FLYER 5','BOBBIN IN POS','=A01+UC102-KF03i','','','','' +'BG1284','SENSOR ZUG IN DOFFER FLYER 5','LT-TRAIN IN DOF','=A01+UC102-KF02i','','','','' +'BG1283','SENSOR ZUG IN DOFFER PM 5','LT-TRAIN IN DOF','=A01+UC102-KF02i','','','','' +'MB1291','ABHEBEN ANTRIEBE PM 5','LIFT OFF BS 5','=A01+UC102-KF05Q','','','','' +'MA1296','ANTRIEBE FLYER 5','M-BI','=A01+UC102-KF05Q','','','','' +'MB1274','ANPRESSEN NACHPUFFER F0401 FLYER 4','PRESS F0401','=A01+UC102-KF03Q','','','','' +'MB1275','ANPRESSEN NACHPUFFER F0402 FLYER 4','PRESS F0402','=A01+UC102-KF03Q','','','','' +'QA1271','ANTRIEB NACHPUFFER F0402 FLYER 4','M-BI','=A01+UC102-KF03Q','','','','' +'MA1270','ANTRIEB NACHPUFFER F0401 FLYER 4','M-BI','=A01+UC102-KF03Q','','','','' +'MB1244','ANPRESSEN PUFFER F0401 FLYER 4','PRESS F0401','=A01+UC102-KF00Q','','','','' +'MB1245','ANPRESSEN PUFFER F0402 FLYER 4','PRESS F0402','=A01+UC102-KF00Q','','','','' +'QA1261','ANTRIEB PUFFER F0402 FLYER 4','M-BI-RI','=A01+UC102-KF02Q','','','','' +'MA1260','ANTRIEB PUFFER F0401 FLYER 4','M-BI-LE','=A01+UC102-KF02Q','','','','' +'MB1240','WEICHE ABZWEIG EINFAHRT FLYER 4','SW ENTER RF4','=A01+UC102-KF00Q','','','','' +'MB1241','WEICHE ABZWEIG EINFAHRT FLYER 4 F0401','SW ENTER F0401','=A01+UC102-KF00Q','','','','' +'MB1242','WEICHE ABZWEIG EINFAHRT RF 4','SW ENTER RF 4','=A01+UC102-KF00Q','','','','' +'BG1246','SENSOR AUSFAHRT NACHPUFFER F0402 RF 4','LT-EXIT F0402','=A01+UC102-KF00i','','','','' +'BG1245','SENSOR AUSFAHRT NACHPUFFER F0401 RF 4','LT-EXIT F0401','=A01+UC102-KF00i','','','','' +'SF1251','HAUPTSCHALTER EIN +UC102','I-MS ON','=A01+UC102-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1250','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC102-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1250','LM-ÜBERSTROM +UC102','IL-YE-LED','=A01+UC102-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'KF1255','IF RF 04: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC102-KF01Q','IF RF 04: START SPULENWECHSEL 2','IF RF 04: START EXCHANGE 2','','' +'DI1254','IF RF 04 : NEUE SPULE','IF-RELAIS','=A01+UC102-KF01i','IF RF 04: NEUE SPULE ','IF RF 04: NEW BOBBIN','','' +'KF1254','IF RF 04: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC102-KF01Q','IF RF 04: START SPULENWECHSEL 1','IF RF 04: START EXCHANGE 1','','' +'PF1247','RUNDUMLEUCHTE STÖRUNG FLYER 4','LED-YE_FAULT','=A01+UC102-KF00Q','','','','' +'SF1253','RESET FLYER 4','IPB-YE-NO','=A01+UC102-KF01i','RESET','RESET','RESET','' +'PF1253','RESET FLYER 4','IPB-YE-LED','=A01+UC102-KF01Q','','','','' +'SF1252','NOT HALT FLYER 4','EPB-NC','=A01+UC102-KF01i','NOT-HALT','E-STOP','E-STOP','' +'MB1267','WEICHE ABZWEIG EINFAHRT NACHP. RF 4','SW-BRANCH','=A01+UC102-KF02Q','','','','' +'MB1266','WEICHE ABZWEIG EINFAHRT NACHP. RF 4','SW-STRAIGHT','=A01+UC102-KF02Q','','','','' +'BG1241','SENSOR AUSFAHRT PUFFER F0402 FLYER 4','LT-EXIT F0402','=A01+UC102-KF00i','','','','' +'BG1240','SENSOR AUSFAHRT PUFFER F0401 FLYER 4','LT-EXIT F0401','=A01+UC102-KF00i','','','','' +'BG1243','SENSOR ZUG IN DOFFER PM 4','LT-TRAIN IN DOF','=A01+UC102-KF00i','','','','' +'BG1256','SENSOR SPULE IN POSITION FLYER 4','BOBBIN IN POS','=A01+UC102-KF01i','','','','' +'BG1244','SENSOR ZUG IN DOFFER FLYER 4 ','LT-TRAIN IN DOF','=A01+UC102-KF00i','','','','' +'MB1251','ABHEBEN ANTRIEBE PM 4','LIFT OFF RF 4','=A01+UC102-KF01Q','','','','' +'MA1256','ANTRIEBE FLYER 4','M-BI','=A01+UC102-KF01Q','','','','' +'BG1141','SENSOR HAUPTSTR. FLYER 3 FB216','LT RF3 FB216','=A01+UC101-KF06i','','','','' +'MB1147','WEICHE ABZWEIG EINFAHRT NACHP. RF 3','SW-BRANCH','=A01+UC101-KF10Q','','','','' +'MB1146','WEICHE ABZWEIG EINFAHRT NACHP. RF 3','SW-STRAIGHT','=A01+UC101-KF10Q','','','','' +'KF1135','IF RF 03: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC101-KF09Q','IF RF 03: START SPULENWECHSEL 2','IF RF 03: START EXCHANGE 2','','' +'DI1134','IF RF 03 : NEUE SPULE','IF-RELAIS','=A01+UC101-KF05i','IF RF 03: NEUE SPULE ','IF RF 03: NEW BOBBIN','','' +'KF1134','IF RF 03: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC101-KF09Q','IF RF 03: START SPULENWECHSEL 1','IF RF 03: START EXCHANGE 1','','' +'PF1127','RUNDUMLEUCHTE STÖRUNG FLYER 3','LED-YE_FAULT','=A01+UC101-KF08Q','','','','' +'SF1133','RESET FLYER 3','IPB-YE-NO','=A01+UC101-KF05i','RESET','RESET','RESET','' +'PF1133','RESET FLYER 3','IPB-YE-LED','=A01+UC101-KF09Q','','','','' +'SF1132','NOT HALT FLYER 3','EPB-NC','=A01+UC101-KF05i','NOT-HALT','E-STOP','E-STOP','' +'BG1005','SENSOR AUSFAHRT NACHPUFFER F0101 RF 1','LT-EXIT F101 ','=A01+UC101-KF00i','','','','' +'BG1126','SENSOR AUSFAHRT NACHPUFFER F0302 FLYER 3','LT-EXIT F0302','=A01+UC101-KF04i','','','','' +'BG1125','SENSOR AUSFAHRT NACHPUFFER F0301 FLYER 3','LT-EXIT F0301','=A01+UC101-KF04i','','','','' +'MB1122','WEICHE ABZWEIG EINFAHRT RF 3','SW ENTER RF 3','=A01+UC101-KF08Q','','','','' +'MB1121','WEICHE ABZWEIG EINFAHRT PUFFER F0301 FLYER 3','SW ENTER F0301 ','=A01+UC101-KF08Q','','','','' +'MB1143','WEICHE ABZWEIG EINFAHRT RF3 FB216 ','SW RF3 FB216','=A01+UC101-KF10Q','','','','' +'MA1144','ANTRIEB HAUPTSTECKE FB215 ','M-BI FB215','=A01+UC101-KF10Q','','','','' +'MA1156','ANTRIEB HAUPTSTECKE FB216','M-BI FB216','=A01+UC101-KF11Q','','','','' +'MB1120','WEICHE ABZWEIG EINFAHRT FLYER 3 ','SW ENTER RF 3','=A01+UC101-KF08Q','','','','' +'MB1154','ANPRESSEN NACHPUFFER F0301 FLYER 3','PRESS F0301','=A01+UC101-KF11Q','','','','' +'MB1155','ANPRESSEN NACHPUFFER F0302 FLYER 3','PRESS F0302','=A01+UC101-KF11Q','','','','' +'QA1151','ANTRIEB NACHPUFFER F0302 FLYER 3','M-BI','=A01+UC101-KF11Q','','','','' +'MA1150','ANTRIEB NACHPUFFER F0301 FLYER 3','M-BI','=A01+UC101-KF11Q','','','','' +'MB1124','ANPRESSEN PUFFER F0301 FLYER 3','PRESS F0301','=A01+UC101-KF08Q','','','','' +'MB1125','ANPRESSEN PUFFER F0302 FLYER 3','PRESS F0302','=A01+UC101-KF08Q','','','','' +'QA1141','ANTRIEB PUFFER F0301 FLYER 3','M-BI-RI','=A01+UC101-KF10Q','','','','' +'MA1140','ANTRIEB PUFFER F0301 FLYER 3','M-BI-LE','=A01+UC101-KF10Q','','','','' +'BG1121','SENSOR AUSFAHRT PUFFER F0302 FLYER 3','LT-EXIT F0302','=A01+UC101-KF04i','','','','' +'BG1120','SENSOR AUSFAHRT PUFFER F0301 FLYER 3','LT-EXIT F0301','=A01+UC101-KF04i','','','','' +'MB1131','ABHEBEN ANTRIEBE PM 3','LIFT OFF BS 3','=A01+UC101-KF09Q','','','','' +'MA1136','ANTRIEBE FLYER 3','M-BI','=A01+UC101-KF09Q','','','','' +'BG1136','SENSOR SPULE IN POSITION FLYER 3 ','BOBBIN IN POS','=A01+UC101-KF05i','','','','' +'BG1124','SENSOR ZUG IN DOFFER FLYER 3','LT-TRAIN IN DOF','=A01+UC101-KF04i','','','','' +'BG1123','SENSOR ZUG IN DOFFER PM 3','LT-TRAIN IN DOF','=A01+UC101-KF04i','','','','' +'MB1114','ANPRESSEN NACHPUFFER F0201 FLYER 2','PRESS F0201','=A01+UC101-KF07Q','','','','' +'MB1115','ANPRESSEN NACHPUFFER F0202 FLYER 2','PRESS F0202','=A01+UC101-KF07Q','','','','' +'QA1111','ANTRIEB NACHPUFFER F0202 FLYER 2','M-BI-RI','=A01+UC101-KF07Q','','','','' +'MA1110','ANTRIEB NACHPUFFER F0201 FLYER 2','M-BI-LE','=A01+UC101-KF07Q','','','','' +'MB1084','ANPRESSEN PUFFER F0201 FLYER 2','PRESS F0201','=A01+UC101-KF04Q','','','','' +'MB1085','ANPRESSEN PUFFER F0202 FLYER 2','PRESS F0202','=A01+UC101-KF04Q','','','','' +'QA1101','ANTRIEB PUFFER F0202 FLYER 2','M-BI-RI','=A01+UC101-KF06Q','','','','' +'MA1100','ANTRIEB PUFFER F0201 FLYER 2','M-BI-LE','=A01+UC101-KF06Q','','','','' +'BG1080','SENSOR AUSFAHRT PUFFER F0201 FLYER 2','LT-EXIT F0201','=A01+UC101-KF02i','','','','' +'BG1081','SENSOR AUSFAHRT PUFFER F0202 FLYER 2','LT-EXIT F0202','=A01+UC101-KF02i','','','','' +'MB1081','WEICHE ABZWEIG EINFAHRT PUFFER F0201 FLYER 2','SW ENTER F0201','=A01+UC101-KF04Q','','','','' +'BG1086','SENSOR AUSFAHRT NACHPUFFER F0202 RF 2','LT-EXIT F0202','=A01+UC101-KF02i','','','','' +'BG1085','SENSOR AUSFAHRT NACHPUFFER F0201 RF 2','LT-EXIT F0201','=A01+UC101-KF02i','','','','' +'MB1082','WEICHE ABZWEIG EINFAHRT RF 2','SW ENTER RF 2','=A01+UC101-KF04Q','','','','' +'BG1097','SENSOR HAUPTSTR. FLYER 2 ','LT-ENTER FB ','=A01+UC101-KF03i','','','','' +'MB1080','WEICHE ABZWEIG EINFAHRT RF 2','SW ENTER RF2','=A01+UC101-KF04Q','','','','' +'SF1091','HAUPTSCHALTER EIN +UC101','I-MS ON','=A01+UC101-KF03i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1090','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC101-KF03i','MSS IN ORDNUNG','MPS OK','','' +'PF1090','LM-ÜBERSTROM +UC101','IL-YE-LED','=A01+UC101-KF05Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'MB1107','WEICHE ABZWEIG EINFAHRT NACHP. RF 2','SW-BRANCH','=A01+UC101-KF06Q','','','','' +'MB1106','WEICHE ABZWEIG EINFAHRT NACHP. RF 2','SW-STRAIGHT','=A01+UC101-KF06Q','','','','' +'KF1095','IF RF 02: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC101-KF05Q','IF RF 02: START SPULENWECHSEL 2','IF RF 02: START EXCHANGE 2','','' +'DI1094','IF RF 02 : NEUE SPULE','IF-RELAIS','=A01+UC101-KF03i','IF RF 02: NEUE SPULE ','IF RF 02: NEW BOBBIN','','' +'PF1087','RUNDUMLEUCHTE STÖRUNG FLYER 2','LED-YE_FAULT','=A01+UC101-KF04Q','','','','' +'KF1094','IF RF 02: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC101-KF05Q','IF RF 02: START SPULENWECHSEL 1','IF RF 02: START EXCHANGE 1','','' +'SF1093','RESET FLYER 2','IPB-YE-NO','=A01+UC101-KF03i','RESET','RESET','RESET','' +'PF1093','RESET FLYER 2','IPB-YE-LED','=A01+UC101-KF05Q','','','','' +'SF1092','NOT HALT FLYER 2','EPB-NC','=A01+UC101-KF03i','NOT-HALT','E-STOP','E-STOP','' +'BG1096','SENSOR SPULE IN POSITION FLYER 2 ','BOBBIN IN POS','=A01+UC101-KF03i','','','','' +'BG1084','SENSOR ZUG IN DOFFER FLYER 2 ','LT-TRAIN IN DOF','=A01+UC101-KF02i','','','','' +'BG1083','SENSOR ZUG IN DOFFER PM 2','LT-TRAIN IN DOF','=A01+UC101-KF02i','','','','' +'MB1091','ABHEBEN ANTRIEBE PM 2','LIFT OFF RF 2','=A01+UC101-KF05Q','','','','' +'MA1096','ANTRIEB FLYER 2','M-BI','=A01+UC101-KF05Q','','','','' +'QA1025','ANTRIEB HAUPTSTR. RF 1','M RF1','=A01+UC101-KF02Q','','','','' +'MA1024','ANTRIEB HAUPTSTR. RF 1','M RF1','=A01+UC101-KF02Q','','','','' +'MB1027','WEICHE ABZWEIG EINFAHRT NACHP. RF 1','SW-STRAIGHT','=A01+UC101-KF02Q','','','','' +'MB1026','WEICHE ABZWEIG EINFAHRT NACHP. RF 1','SW-BRANCH','=A01+UC101-KF02Q','','','','' +'PF1007','RUNDUMLEUCHTE STÖRUNG FLYER 1','LED-YE_FAULT','=A01+UC101-KF00Q','','','','' +'SF1013','RESET FLYER 1','IPB-YE-NO','=A01+UC101-KF01i','RESET','RESET','RESET','' +'PF1013','RESET FLYER 1','IPB-YE-LED','=A01+UC101-KF01Q','','','','' +'SF1012','NOT HALT FLYER 1','EPB-NC','=A01+UC101-KF01i','NOT-HALT','E-STOP','E-STOP','' +'KF1015','IF RF 01: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC101-KF01Q','IF RF 01: START SPULENWECHSEL 2','IF RF 01: START EXCHANGE 2','CUANDO 01: LIBERAR CAMBIOS DE BOBINAS 2','' +'DI1014','IF RF 01 : NEUE SPULE','IF-RELAIS','=A01+UC101-KF01i','IF RF 01: NEUE SPULE ','IF RF 01: NEW BOBBIN','CUANDO 01: LLAMAR NUEVA BOBINA','' +'KF1014','IF RF 01: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC101-KF01Q','IF RF 01: START SPULENWECHSEL 1','IF RF 01: START EXCHANGE 1','CUANDO 01: LIBERAR CAMBIOS DE BOBINAS 1','' +'MB1034','ANPRESSEN NACHPUFFER F0101 FLYER 1','PRESS F0101','=A01+UC101-KF03Q','','','','' +'MB1035','ANPRESSEN NACHPUFFER F0102 FLYER 1','PRESS F0102','=A01+UC101-KF03Q','','','','' +'QA1031','ANTRIEB NACHPUFFER F0102 FLYER 1','M-BI','=A01+UC101-KF03Q','','','','' +'MA1030','ANTRIEB NACHPUFFER F0101 FLYER 1','M-BI','=A01+UC101-KF03Q','','','','' +'MB1004','ANPRESSEN PUFFER F0101 FLYER 1 ','PRESS F0101','=A01+UC101-KF00Q','','','','' +'MB1005','ANPRESSEN PUFFER F0102 FLYER 1 ','PRESS F0102','=A01+UC101-KF00Q','','','','' +'QA1021','ANTRIEB PUFFER F0102 FLYER 1','M-BI-RI','=A01+UC101-KF02Q','','','','' +'MA1020','ANTRIEB PUFFER F0101 FLYER 1','M-BI-LE','=A01+UC101-KF02Q','','','','' +'BG1000','SENSOR AUSFAHRT PUFFER F0101 FLYER 1','LT-EXIT F0101','=A01+UC101-KF00i','','','','' +'BG1001','SENSOR AUSFAHRT PUFFER F0102 FLYER 1','LT-EXIT F0102','=A01+UC101-KF00i','','','','' +'MB1001','WEICHE ABZWEIG EINFAHRT PUFFER F0101 FLYER 1','SW ENTER F0101','=A01+UC101-KF00Q','','','','' +'MB1000','WEICHE ABZWEIG EINFAHRT RF 1','SW ENTER RF 1','=A01+UC101-KF00Q','','','','' +'BG1006','SENSOR AUSFAHRT NACHPUFFER F0102 RF 1','LT-EXIT F102','=A01+UC101-KF00i','','','','' +'MB1011','ABHEBEN ANTRIEBE PM 1 ','LIFT OFF BS 1','=A01+UC101-KF01Q','','','','' +'BG1003','SENSOR ZUG IN DOFFER PM 1','LT-TRAIN IN DOF','=A01+UC101-KF00i','','','','' +'MA1016','ANTRIEB FLYER 1 ','M-BI','=A01+UC101-KF01Q','','','','' +'BG1016','SENSOR SPULE IN POSITION RF 1','BOBBIN IN POS','=A01+UC101-KF01i','','','','' +'BG1004','SENSOR ZUG IN DOFFER FLYER 1','LT-TRAIN IN DOF','=A01+UC101-KF00i','','','','' diff --git a/Test-Dateien/BENIN_20221208.txt b/Test-Dateien/BENIN_20221208.txt new file mode 100644 index 0000000..504cde6 --- /dev/null +++ b/Test-Dateien/BENIN_20221208.txt @@ -0,0 +1,636 @@ +'QA1113','ANTRIEB NACHPUFFER FLYER 2','M-BI-RI','=A01+UC101-KF03Q','','','','' +'MA1112','ANTRIEB NACHPUFFER FLYER 2','M-BI-LE','=A01+UC101-KF03Q','','','','' +'MB1612','ABHEBEN ANTRIEBE FLYER 10','LIFT OFF RF 10','=A01+UC105-KF01Q','','','','' +'MB1552','ABHEBEN ANTRIEBE FLYER 9','LIFT OFF RF 9','=A01+UC104-KF05Q','','','','' +'MB1512','ABHEBEN ANTRIEBE FLYER 8','LIFT OFF RF 8','=A01+UC104-KF01Q','','','','' +'MB1452','ABHEBEN ANTRIEBE FLYER 7','LIFT OFF RF 7','=A01+UC103-KF05Q','','','','' +'MB1412','ABHEBEN ANTRIEBE FLYER 6','LIFT OFF RF 6','=A01+UC103-KF01Q','','','','' +'MB1292','ABHEBEN ANTRIEBE FLYER 5','LIFT OFF RF 5','=A01+UC102-KF05Q','','','','' +'MB1252','ABHEBEN ANTRIEBE FLYER 4','LIFT OFF RF 4','=A01+UC102-KF01Q','','','','' +'MB1132','ABHEBEN ANTRIEBE FLYER 3','LIFT OFF RF 3','=A01+UC101-KF05Q','','','','' +'MB1092','ABHEBEN ANTRIEB RF 2','LIFT OFF RF 2','=A01+UC101-KF01Q','','','','' +'MB1012','ABHEBEN ANTRIEBE PM 1 ','LIFT OFF RF 1','=A01+UC100-KF01Q','','','','' +'SF0007','STEUERSPANNUNG 24V OK ','24V OK','=A01+UH001-KF00i','STEUERSPANNUNG 24V OK ','CONTROL VOLTAGE 24V OK ','STEUERSPANNUNG 24V OK ','' +'SF1011','HAUPTSCHALTER EIN +UC100','I-MS ON','=A01+UC100-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1010','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC100-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1010','LM-ÜBERSTROM +UC100','IL-YE-LED','=A01+UC100-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'MB1603','WEICHE ABZWEIG EINFAHRT PUFFER F1002 FLYER 10','SW ENTER F1002','=A01+UC105-KF00Q','','','','' +'QA3157','ANTRIEB HAUPTSTRECKE 1 AUSFAHRT RSM 20-28','RA-BI-RE','=A01+UC201-KF05Q','','','','' +'MA3156','ANTRIEB HAUPTSTRECKE 1 EINFAHRT RSM 20-28','RA-BI-LI','=A01+UC201-KF05Q','','','','A' +'QA5015','ANTRIEB EIN-AUSFAHRT HAUPTSTECKE RF 4','M-BI-RSM','=A01+UC102-KF09Q','','','','' +'MA5014','ANTRIEB EIN-AUSFAHRT HAUPTSTECKE RF 4','M-BI-RSM','=A01+UC102-KF09Q','','','','' +'QA1263','ANTRIEB HAUPTSTECKE RF 4 ','M-BI-RF ','=A01+UC102-KF02Q','','','','' +'MA1262','ANTRIEB HAUPTSTECKE RF 4','M-BI-RF ','=A01+UC102-KF02Q','','','','' +'MB1243','WEICHE ABZWEIG EINFAHRT F402 FLYER 4','SW F0401-F0402 ','=A01+UC102-KF00Q','','','','' +'BG3130','SENSOR OPTISCH 1 RSM 21/28','LT-RSM','=A01+UC201-KF03i','','','','' +'BG1122','SENSOR HAUPTSTR. VOR FLYER 3 ','LT-EXIT F0301','=A01+UC101-KF02i','','','','' +'BG1002','SENSOR HAUPTSTR. VOR FLYER 1 ','LT-EXIT F0101','=A01+UC100-KF00i','','','','' +'BG1260','SENSOR EINFAHRT. RF','LT-ENTER ','=A01+UC102-KF02i','','','','' +'BG1287','SENSOR HAUPTSTR. EINFAHRT FB201','LT- FB201','=A01+UC102-KF03i','','','','' +'BG1282','SENSOR EINFAHRT PUFFER F502 FLYER 5 ','LT- ENTER F0502','=A01+UC102-KF03i','','','','' +'BG5002','SENSOR EINFAHRT RF-PUFFER','LT- ENTER','=A01+UC102-KF05i','','','','' +'BG5003','SENSOR EINFAHRT. RF-RSM','LT- ENTRY','=A01+UC102-KF05i','','','','' +'BG1261','SENSOR EINFAHRT. RF-PUFFER','LT-ENTER ','=A01+UC102-KF02i','','','','' +'BG1262','SENSOR HAUPTSTR. FLYER 5','LT-ENTER ','=A01+UC102-KF02i','','','','' +'MB3151','WEICHE 1 ABZWEIG RSM 20','SW1 RSM 20','=A01+UC201-KF05Q','','','','' +'BG3030','SENSOR OPTISCH 1 RSM 12/20','LT-RSM','=A01+UC200-KF03i','','','','' +'BG3031','SENSOR OPTISCH 1 RSM 1/9','LT-RSM','=A01+UC200-KF03i','','','','' +'MB3036','WEICHE ABZWEIG RSM 1-25','SW RSM','=A01+UC200-KF03Q','','','','' +'QA5013','ANTRIEB EIN-AUSFAHRT HAUPTSTECKE RF 4','M-BI-RSM','=A01+UC102-KF09Q','','','','' +'MA5012','ANTRIEB EIN-AUSFAHRT HAUPTSTECKE RF 4','M-BI-RSM','=A01+UC102-KF09Q','','','','' +'MB1277','WEICHE ABZWEIG EINFAHRT RF-PUFFER','SW RF 4','=A01+UC102-KF03Q','','','','' +'DI0025','STEUERSPANNUNG 24V +UC202 OK','24V OK','=A01+UH001-KF02i','STEUERSPANNUNG 24V +UC202 OK','CONTROL VOLTAGE 24V +UC202 OK','TENSION DE MANIOBRA 24V +UC202 OK','' +'DI0024','STEUERSPANNUNG 24V UC201 - UC200 OK','24V OK','=A01+UH001-KF02i','STEUERSPANNUNG 24V UC201 - UC200 OK','CONTROL VOLTAGE 24V +UC201 - +UC200 OK','TENSION DE MANIOBRA 24V +UC200 - +UC201 ','' +'DI0023','STEUERSPANNUNG 24V UC104 - UC105 OK','24V OK','=A01+UH001-KF02i','STEUERSPANNUNG 24V UC104-UC105 OK','CONTROL VOLTAGE 24V +UC104 - +UC105 OK','TENSION DE MANIOBRA 24V UC105 OK','' +'DI0020','STEUERSPANNUNG 24V UH001 OK','24V OK UH001','=A01+UH001-KF02i','STEUERSPANNUNG 24V UH001 OK','CONTROL VOLTAGE 24V UH001 OK','TENSION DE MANIOBRA 24V UH001 OK','' +'DI0022','STEUERSPANNUNG 24V UC103 - UC102 OK','24V OK','=A01+UH001-KF02i','STEUERSPANNUNG 24V UC103-UC102 OK','CONTROL VOLTAGE 24V UC103-UC102 OK','TENSION DE MANIOBRA 24V UC103-UC104 OK','' +'DI0021','STEUERSPANNUNG 24V UC101-UC100 OK','24V OK','=A01+UH001-KF02i','STEUERSPANNUNG 24V UC101-UC100 OK','CONTROL VOLTAGE 24V UC101-UC100 OK','TENSION DE MANIOBRA 24V UC101-UC102 OK','' +'KF0013','DRUCKL.-WARTUNGSEINH. SCHLIESSEN','COMPR. AIR OFF','=A01+UH001-KF01Q','DRUCKL.-WARTUNGSEINH. SCHLIESSEN','CLOSE PRESS.-MAINTENANCE UNIT','AIRE COMPRIMIDO/VÁLVULA DE AISLAMIENTO C','' +'KF0012','RESET NOT HALT','RESET E-STOP','=A01+UH001-KF01Q','RESET NOT HALT','RESET EMERGENCY STOP','RESET PARO DE EMERGENCIA','' +'PF0011','ÜBERSTROM/SICHERUNGSFALL','IL-YE-LED','=A01+UH001-KF01Q','ÜBERSTROM/SICHERUNGSFALL','OVERCURRENT/MIN. CIRCUIT BREAKERS','SOBREINTENSIDAD/FUSIBLE AUTOMÁTICO','' +'PF0010','DRUCKLUFT FEHLT','IL-YE-LED','=A01+UH001-KF01Q','DRUCKLUFT FEHLT','COMPRESSED AIR MISSING','AIRE COMPRIMIDO DESCONECTADO','' +'PF0002','START NACH STÖRUNG','IPB-CL-LED','=A01+UH001-KF00Q','START NACH STÖRUNG','START AFTER TROUBLE','ARRANQUE DESPUÉS DE AVERÍA','' +'PF0004','STÖRUNG KOMMUNIKATION PC-SPS','IL-YE-LED','=A01+UH001-KF00Q','STÖRUNG KOMMUNIKATION PC-SPS','TROUBLE COMMUNICATION PC-PLC','AVERÍA COMMUNICATIÓN PC-CPP','' +'PF0006','ABHEBEN AKTIV','IL-YE-LED','=A01+UH001-KF00Q','ABHEBEN AKTIV','LIFT OFF ACTIVE','SEPARAR ACTIVO','' +'PF0005','LAUFZEITFEHLER','IPB-YE-LED','=A01+UH001-KF00Q','LAUFZEITFEHLER','TRAVEL TIME ERROR','ERROR DE TIEMPO','' +'PF0003','NOT HALT BETÄTIGT','IL-YE-LED','=A01+UH001-KF00Q','NOT HALT BETÄTIGT','EMERGENCY STOP PUSHED','PARO EMERGENCIA OK','' +'PF0001','ANLAGE EIN','IPB-GN-LED','=A01+UH001-KF00Q','ANLAGE EIN','SYSTEM ON','SISTEMA ENCENDIDO','' +'PF0000','STÖRUNG ALLGEMEIN','IL-YE-LED','=A01+UH001-KF00Q','STÖRUNG ALLGEMEIN','GENERAL TROUBLE','AVERÍA','' +'DI0017','PHASENÜBERWACHUNGSRELAIS 400VAC EIN','MONITOR. RELAY','=A01+UH001-KF01i','PHASENÜBERWACHUNGSRELAIS 400VAC EIN','PHASE MONITORING RELAY 400VAC ON','VIGILANCIA DE FASE EL RELE´','' +'SF0015','RESET AKTIV','PB-BK-NO','=A01+UH001-KF01i','RESET AKTIV','RESET ACTIVE','RESET AKTIVA','' +'DI0014','HAUPTSCHÜTZE EIN','MAIN CONTACT.','=A01+UH001-KF01i','HAUPTSCHÜTZE EIN','MAIN CONTACTORS ON','ENCENDIDO CONTACTOR PRINCIPAL','' +'DI0013','SICHERHEITSRELAIS EIN','SAFETY RELAY','=A01+UH001-KF01i','SICHERHEITSRELAIS EIN','SAFETY RELAY ON','RELÉ DE SEGURIDAD ENCENDIDO','' +'DI0012','SICHERUNGSAUTOMATENFALL','CIRCUIT BR.','=A01+UH001-KF01i','SICHERUNGSAUTOMATENFALL','MINIATURE CIRCUIT BREAKERS','FUSIBLE AUTOMÁTICO','' +'DI0011','ÜBERSTROM','MOTORS','=A01+UH001-KF01i','ÜBERSTROM','OVERCURRENT','SOBREINTENSIDAD','' +'BG0010','DRUCKLUFT OK','COMPR. AIR','=A01+UH001-KF01i','DRUCKLUFT OK','COMPRESSED AIR OK','AIRE COMPRIMIDO OK','' +'SF0004','LAMPENTEST','PB-WH-NO','=A01+UH001-KF00i','LAMPENTEST','LAMP TEST','ENSAYO LAMPARA','' +'SF0006','ANTRIEBE ABHEBEN','SS-BK-NO','=A01+UH001-KF00i','ANTRIEBE ABHEBEN','LIFT OFF CONVEYORS','SEPARAR MOTOR','' +'SF0005','LAUFZEITFEHLER','IPB-YE-N0','=A01+UH001-KF00i','LAUFZEITFEHLER','TRAVEL TIME ERROR','ERROR DE TIEMPO','' +'SF0003','NOT HALT SCHALTSCHRANK','EPB-RD-NC','=A01+UH001-KF00i','NOT HALT','EMERGENCY STOP','PARO DE EMERGENCIA ARMARIO DE DISTRIBUCI','' +'SF0002','START NACH STÖRUNG','IPB-CL-NO','=A01+UH001-KF00i','START NACH STÖRUNG','START AFTER TROUBLE','ARRANQUE DESPUÉS DE AVERÍA','' +'SF0001','ANLAGE EIN','IPB-GN-NO','=A01+UH001-KF00i','ANLAGE EIN','SYSTEM ON','SISTEMA ENCENDIDO','' +'SF0000','ANLAGE AUS','PB-BK-NC','=A01+UH001-KF00i','ANLAGE AUS','SYSTEM OFF','SISTEMA APAGADO','' +'BG1266','SENSOR HAUPTSTR. EINFAHRT','LT-ENTRY','=A01+UC102-KF03i','','','','' +'BG1265','SENSOR EINFAHRT. PUFFER','LT- ENTER','=A01+UC102-KF02i','','','','' +'BG1264','SENSOR HAUPTSTR. EINFAHRT FB201','LT- ENTER ','=A01+UC102-KF02i','','','','' +'BG1267','SENSOR HAUPTSTR. AUSFAHRT','LT- EXIT','=A01+UC102-KF03i','','','','' +'BG1297','SENSOR HAUPTSTR. FLYER 5 ','LT-RF5','=A01+UC102-KF04i','','','','' +'BG1286','SENSOR AUSFAHRT NACHPUFFER F0502 RF 5','LT-EXIT F0502','=A01+UC102-KF03i','','','','' +'BG1285','SENSOR AUSFAHRT NACHPUFFER F0501 RF 5','LT-EXIT F0501','=A01+UC102-KF03i','','','','' +'BG1257','SENSOR HAUPTSTR. FLYER 4','LT-RF4','=A01+UC102-KF01i','','','','' +'BG1246','SENSOR AUSFAHRT NACHPUFFER F0402 RF 4','LT-EXIT F0402','=A01+UC102-KF00i','','','','' +'BG1245','SENSOR AUSFAHRT NACHPUFFER F0401 RF 4','LT-EXIT F0401','=A01+UC102-KF00i','','','','' +'BG1241','SENSOR AUSFAHRT PUFFER F0402 FLYER 4','LT-EXIT F0402','=A01+UC102-KF00i','','','','' +'BG1240','SENSOR AUSFAHRT PUFFER F0401 FLYER 4','LT-EXIT F0401','=A01+UC102-KF00i','','','','' +'MB1542','WEICHE ABZWEIG EINFAHRT F0902 FLYER 9','SW ENTER F0902 ','=A01+UC104-KF04Q','','','','' +'MB1442','WEICHE ABZWEIG EINFAHRT F0702 FLYER 7','SW ENTER F0702 ','=A01+UC103-KF04Q','','','','' +'MB1273','WEICHE ABZWEIG EINFAHRT RF-PUFFER','SW ENTER','=A01+UC102-KF03Q','','','','' +'MB1280','WEICHE ABZWEIG KREUZUNGSWEICHE FLYER 4','SW ENTER RF 5','=A01+UC102-KF04Q','','','','' +'MB1122','WEICHE ABZWEIG EINFAHRT F302 FLYER 3 ','SW ENTER F302','=A01+UC101-KF04Q','','','','' +'MB1282','WEICHE ABZWEIG EINFAHRT F0502 FLYER 5','SW F0502','=A01+UC102-KF04Q','','','','' +'MB1241','WEICHE ABZWEIG EINFAHRT F402 FLYER 4','SW F0401-F0402 ','=A01+UC102-KF00Q','','','','' +'MB5002','WEICHE GERADE FB210','STRAIGHT','=A01+UC102-KF08Q','','','','' +'MB5003','WEICHE ABZWEIG FB210','BRANCH ','=A01+UC102-KF08Q','','','','' +'BG5012','SENSOR ZUG IN PUFFER E0107','IN-E0107','=A01+UC102-KF06i','','','','' +'BG5011','SENSOR ZUG IN PUFFER E0106','IN-E0106','=A01+UC102-KF06i','','','','' +'BG5010','SENSOR ZUG IN PUFFER E0105','IN-E0105','=A01+UC102-KF06i','','','','' +'BG5007','SENSOR ZUG IN PUFFER E0104','IN-E0104','=A01+UC102-KF05i','','','','' +'BG5006','SENSOR ZUG IN PUFFER E0103','IN-E0103','=A01+UC102-KF05i','','','','' +'BG5005','SENSOR ZUG IN PUFFER E0102','IN-E0102','=A01+UC102-KF05i','','','','' +'BG5004','SENSOR ZUG IN PUFFER E0101','IN-E0101','=A01+UC102-KF05i','','','','' +'MB5007','WEICHE ABZWEIG EINFAHRT PUFFER E0102-E0103','SW E0105-E0106','=A01+UC102-KF08Q','','','','' +'MB5005','WEICHE ABZWEIG EINFAHRT PUFFER E0102-E0103','SW E0103-E0104','=A01+UC102-KF08Q','','','','' +'MB5004','WEICHE ABZWEIG EINFAHRT PUFFER E0102-E0103','SW E0102','=A01+UC102-KF08Q','','','','' +'MB5011','WEICHE ABZWEIG EINFAHRT PUFFER E0107','SW E0107','=A01+UC102-KF09Q','','','','' +'MB5006','WEICHE ABZWEIG EINFAHRT PUFFER E0104','SW E0104','=A01+UC102-KF08Q','','','','' +'MB5010','WEICHE ABZWEIG EINFAHRT PUFFER E0106','SW E0106','=A01+UC102-KF09Q','','','','' +'QA5037','ANTRIEB PUFFER E0107','M-BI-RI','=A01+UC102-KF11Q','','','','' +'MA5036','ANTRIEB PUFFER E0106','M-BI-LE','=A01+UC102-KF11Q','','','','' +'QA5033','ANTRIEB PUFFER E0105','M-BI-RI','=A01+UC102-KF11Q','','','','' +'MA5032','ANTRIEB PUFFER E0104','M-BI-LE','=A01+UC102-KF11Q','','','','' +'MB5035','ANPRESSEN PUFFER E0107','PRESS E0107','=A01+UC102-KF11Q','','','','' +'MB5034','ANPRESSEN PUFFER E0106','PRESS E0106','=A01+UC102-KF11Q','','','','' +'MB5031','ANPRESSEN PUFFER E0105','PRESS E0105','=A01+UC102-KF11Q','','','','' +'MB5030','ANPRESSEN PUFFER E0104','PRESS E0104','=A01+UC102-KF11Q','','','','' +'QA5027','ANTRIEB PUFFER E0103','M-BI-RI','=A01+UC102-KF10Q','','','','' +'MA5026','ANTRIEB PUFFER E0102','M-BI-LE','=A01+UC102-KF10Q','','','','' +'QA5023','ANTRIEB PUFFER E0101 RECHTS','M-BI-RI','=A01+UC102-KF10Q','','','','' +'MA5022','ANTRIEB PUFFER E0101 LINKS','M-BI-LE','=A01+UC102-KF10Q','','','','' +'MB5025','ANPRESSEN PUFFER E0103','PRESS E0103','=A01+UC102-KF10Q','','','','' +'MB5024','ANPRESSEN PUFFER E0102','PRESS E0102','=A01+UC102-KF10Q','','','','' +'MB5020','ANPRESSEN PUFFER E0101','PRESS E0101','=A01+UC102-KF10Q','','','','' +'QA3245','ANTRIEB HAUPTSTRECKE 1 AUSFAHRT RSM 21-28','RA-BI-RE','=A01+UC202-KF04Q','','','','' +'MA3244','ANTRIEB HAUPTSTRECKE 1 EINFAHRT RSM 21-28','RA-BI-LI','=A01+UC202-KF04Q','','','','A' +'QA3035','ANTRIEB HAUPTSTRECKE 1 AUSFAHRT RSM 1-10','RA-BI-RE','=A01+UC200-KF03Q','','','','' +'MA3034','ANTRIEB HAUPTSTRECKE 1 EINFAHRT RSM 1-10','RA-BI-LI','=A01+UC200-KF03Q','','','','A' +'QA3155','ANTRIEB HAUPTSTRECKE 1 AUSFAHRT RSM 11-20','RA-BI-RE','=A01+UC201-KF05Q','','','','' +'MA3154','ANTRIEB HAUPTSTRECKE 1 EINFAHRT RSM 11-20','RA-BI-LI','=A01+UC201-KF05Q','','','','A' +'PF3114','RUNDUMLEUCHTE STÖRUNG RSM 11-20','LED-YE_FAULT','=A01+UC201-KF01Q','','','','' +'SF3116','RESET/START NACH NOT HALT RSM 11-20','IPB-YE-NO','=A01+UC201-KF01i','RESET','RESET','RESET','' +'PF3116','RESET/START NACH NOT HALT RSM 11-20','IPB-YE-LED ','=A01+UC201-KF01Q','','','','' +'SF3115','NOT HALT RSM 11-20','EPB-NC','=A01+UC201-KF01i','NOT-HALT','E-STOP','E-STOP','' +'SF3114','HAUPTSCHALTER EIN +UC201','I-MS ON','=A01+UC201-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF3117','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC201-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF3117','LM-ÜBERSTROM +UC201 RSM 11-20','IL-YE-LED','=A01+UC201-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'PF3014','RUNDUMLEUCHTE STÖRUNG RSM 01-10','LED-YE_FAULT','=A01+UC200-KF01Q','','','','' +'SF3016','RESET/START NACH NOT HALT RSM 1-10','IPB-YE-NO','=A01+UC200-KF01i','RESET','RESET','RESET','' +'PF3016','RESET/START NACH NOT HALT RSM 1-10','IPB-YE-LED ','=A01+UC200-KF01Q','','','','' +'SF3015','NOT HALT RSM 1-10','EPB-NC','=A01+UC200-KF01i','NOT-HALT','E-STOP','E-STOP','' +'SF3014','HAUPTSCHALTER EIN +UC200','I-MS ON','=A01+UC200-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF3017','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC200-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF3017','LM-ÜBERSTROM +UC200 RSM 1-10','IL-YE-LED','=A01+UC200-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'PF3214','RUNDUMLEUCHTE STÖRUNG RSM 21-28','LED-YE_FAULT','=A01+UC202-KF01Q','','','','' +'SF3216','RESET/START NACH NOT HALT RSM 21-25','IPB-YE-NO','=A01+UC202-KF01i','RESET','RESET','RESET','' +'PF3216','RESET/START NACH NOT HALT RSM 21-28','IPB-YE-LED ','=A01+UC202-KF01Q','','','','' +'SF3215','NOT HALT RSM 21-25','EPB-NC','=A01+UC202-KF01i','NOT-HALT','E-STOP','E-STOP','' +'SF3214','HAUPTSCHALTER EIN +UC202','I-MS ON','=A01+UC202-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF3217','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC202-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF3217','LM-ÜBERSTROM +UC202','IL-YE-LED','=A01+UC202-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'SF3222','ZUG WECHSELN 1 RSM 28','LDT-GN-NO','=A01+UC202-KF02i','-UZ3222','-UZ3222','','' +'PF3240','ZUG WECHSELN 1 RSM 28','LDT-GN-LED ','=A01+UC202-KF04Q','','','','' +'SF3220','ZUG WECHSELN 1 RSM 27','LDT-GN-NO','=A01+UC202-KF02i','-UZ3220','-UZ3220','','' +'PF3234','ZUG WECHSELN 1 RSM 27','LDT-GN-LED ','=A01+UC202-KF03Q','','','','' +'SF3212','ZUG WECHSELN 1 RSM 26','LDT-GN-NO','=A01+UC202-KF01i','-UZ3300','-UZ3300','','' +'PF3230','ZUG WECHSELN 1 RSM 26','LDT-GN-LED ','=A01+UC202-KF03Q','','','','' +'SF3210','ZUG WECHSELN 1 RSM 25','LDT-GN-NO','=A01+UC202-KF01i','-UZ3210','-UZ3210','','' +'PF3224','ZUG WECHSELN 1 RSM 25','LDT-GN-LED ','=A01+UC202-KF02Q','','','','' +'SF3206','ZUG WECHSELN 1 RSM 24','LDT-GN-NO','=A01+UC202-KF00i','-UZ3206','-UZ3206','','' +'PF3220','ZUG WECHSELN 1 RSM 24','LDT-GN-LED ','=A01+UC202-KF02Q','','','','' +'SF3204','ZUG WECHSELN 1 RSM 23','LDT-GN-NO','=A01+UC202-KF00i','-UZ3204','-UZ3204','','' +'PF3210','ZUG WECHSELN 1 RSM 23','LDT-GN-LED ','=A01+UC202-KF01Q','','','','' +'SF3202','ZUG WECHSELN 1 RSM 22','LDT-GN-NO','=A01+UC202-KF00i','-UZ3202','-UZ3202','','' +'PF3204','ZUG WECHSELN 1 RSM 22','LDT-GN-LED ','=A01+UC202-KF00Q','','','','' +'SF3200','ZUG WECHSELN 1 RSM 21','LDT-GN-NO','=A01+UC202-KF00i','-UZ3200','-UZ3200','','' +'PF3200','ZUG WECHSELN 1 RSM 21','LDT-GN-LED ','=A01+UC202-KF00Q','','','','' +'SF3126','ZUG WECHSELN 1 RSM 20','LDT-GN-NO','=A01+UC201-KF02i','-UZ3122','-UZ3122','','' +'PF3150','ZUG WECHSELN 1 RSM 20','LDT-GN-LED ','=A01+UC201-KF05Q','','','','' +'SF3124','ZUG WECHSELN 1 RSM 19','LDT-GN-NO','=A01+UC201-KF02i','-UZ3120','-UZ3120','','' +'PF3144','ZUG WECHSELN 1 RSM 19','LDT-GN-LED ','=A01+UC201-KF04Q','','','','' +'SF3122','ZUG WECHSELN 1 RSM 18','LDT-GN-NO','=A01+UC201-KF02i','-UZ3116','-UZ3116','','' +'PF3140','ZUG WECHSELN 1 RSM 18','LDT-GN-LED ','=A01+UC201-KF04Q','','','','' +'SF3120','ZUG WECHSELN 1 RSM 17','LDT-GN-NO','=A01+UC201-KF02i','-UZ3120','-UZ3102','','' +'PF3134','ZUG WECHSELN 1 RSM 17','LDT-GN-LED ','=A01+UC201-KF03Q','','','','' +'SF3112','ZUG WECHSELN 1 RSM 16','LDT-GN-NO','=A01+UC201-KF01i','-UZ3112','-UZ3112','','' +'PF3130','ZUG WECHSELN 1 RSM 16','LDT-GN-LED ','=A01+UC201-KF03Q','','','','' +'SF3110','ZUG WECHSELN 1 RSM 15','LDT-GN-NO','=A01+UC201-KF01i','-UZ3110','-UZ3110','','' +'PF3124','ZUG WECHSELN 1 RSM 15','LDT-GN-LED ','=A01+UC201-KF02Q','','','','' +'SF3106','ZUG WECHSELN 1 RSM 14','LDT-GN-NO','=A01+UC201-KF00i','-UZ3106','-UZ3106','','' +'PF3120','ZUG WECHSELN 1 RSM 14','LDT-GN-LED ','=A01+UC201-KF02Q','','','','' +'SF3104','ZUG WECHSELN 1 RSM 13','LDT-GN-NO','=A01+UC201-KF00i','-UZ3104','-UZ3104','','' +'PF3110','ZUG WECHSELN 1 RSM 13','LDT-GN-LED ','=A01+UC201-KF01Q','','','','' +'SF3102','ZUG WECHSELN 1 RSM 12','LDT-GN-NO','=A01+UC201-KF00i','-UZ3102','-UZ3102','','' +'PF3104','ZUG WECHSELN 1 RSM 12','LDT-GN-LED ','=A01+UC201-KF00Q','','','','' +'SF3100','ZUG WECHSELN 1 RSM 11','LDT-GN-NO','=A01+UC201-KF00i','-UZ3100','-UZ3100','','' +'PF3100','ZUG WECHSELN 1 RSM 11','LDT-GN-LED ','=A01+UC201-KF00Q','','','','' +'SF3026','ZUG WECHSELN 1 RSM 10','LDT-GN-NO','=A01+UC200-KF02i','-UZ3026','-UZ3026','','' +'PF3054','ZUG WECHSELN 1 RSM 10','LDT-GN-LED ','=A01+UC200-KF05Q','','','','' +'SF3024','ZUG WECHSELN 1 RSM 9','LDT-GN-NO','=A01+UC200-KF02i','-UZ3024','-UZ3024','','' +'PF3050','ZUG WECHSELN 1 RSM 9','LDT-GN-LED ','=A01+UC200-KF05Q','','','','' +'SF3022','ZUG WECHSELN 1 RSM 8','LDT-GN-NO','=A01+UC200-KF02i','-UZ3022','-UZ3022','','' +'PF3044','ZUG WECHSELN 1 RSM 8','LDT-GN-LED ','=A01+UC200-KF04Q','','','','' +'SF3020','ZUG WECHSELN 1 RSM 7','LDT-GN-NO','=A01+UC200-KF02i','-UZ3020','-UZ3020','','' +'PF3040','ZUG WECHSELN 1 RSM 7','LDT-GN-LED ','=A01+UC200-KF04Q','','','','' +'SF3012','ZUG WECHSELN 1 RSM 6','LDT-GN-NO','=A01+UC200-KF01i','-UZ3012','-UZ3012','','' +'PF3030','ZUG WECHSELN 1 RSM 6','LDT-GN-LED ','=A01+UC200-KF03Q','','','','' +'SF3010','ZUG WECHSELN 1 RSM 5','LDT-GN-NO','=A01+UC200-KF01i','-UZ3010','-UZ3010','','' +'PF3024','ZUG WECHSELN 1 RSM 5','LDT-GN-LED ','=A01+UC200-KF02Q','','','','' +'SF3006','ZUG WECHSELN 1 RSM 4','LDT-GN-NO','=A01+UC200-KF00i','-UZ3006','-UZ3006','','' +'PF3020','ZUG WECHSELN 1 RSM 4','LDT-GN-LED ','=A01+UC200-KF02Q','','','','' +'SF3004','ZUG WECHSELN 1 RSM 3','LDT-GN-NO','=A01+UC200-KF00i','-UZ3004','-UZ3004','','' +'PF3010','ZUG WECHSELN 1 RSM 3','LDT-GN-LED ','=A01+UC200-KF01Q','','','','' +'SF3002','ZUG WECHSELN 1 RSM 2','LDT-GN-NO','=A01+UC200-KF00i','-UZ3002','-UZ3002','','' +'PF3004','ZUG WECHSELN 1 RSM 2','LDT-GN-LED ','=A01+UC200-KF00Q','','','','' +'SF3000','ZUG WECHSELN 1 RSM 1','LDT-GN-NO','=A01+UC200-KF00i','-UZ3000','-UZ3000','','' +'PF3000','ZUG WECHSELN 1 RSM 1','LDT-GN-LED ','=A01+UC200-KF00Q','','','','' +'MB3225','WEICHE 1 ABZWEIG RSM 26','SW1 RSM 25','=A01+UC202-KF02Q','','','','' +'QA3057','ANTRIEB 1 AUSFAHREN RSM 10','RA-BI','=A01+UC200-KF05Q','','','','' +'MA3056','ANTRIEB 1 EINFAHREN RSM 10','RA-BI','=A01+UC200-KF05Q','','','','A' +'BG3027','SENSOR OPTISCH 1 RSM 10','OPT. AP110','=A01+UC200-KF02i','','','','' +'MB3055','WEICHE 1 ABZWEIG RSM 10','SW1 RSM 10','=A01+UC200-KF05Q','','','','' +'MB3231','WEICHE 1 ABZWEIG RSM 26','SW1 RSM 26','=A01+UC202-KF03Q','','','','' +'MB3235','WEICHE 1 ABZWEIG RSM 27','SW1 RSM 27','=A01+UC202-KF03Q','','','','' +'QA3243','ANTRIEB 1 AUSFAHREN RSM 28','RA-BI','=A01+UC202-KF04Q','','','','' +'MA3242','ANTRIEB 1 EINFAHREN RSM 28','RA-BI','=A01+UC202-KF04Q','','','','A' +'BG3223','SENSOR OPTISCH 1 RSM 28','OPT. AP110','=A01+UC202-KF02i','','','','' +'QA3237','ANTRIEB 1 AUSFAHREN RSM 27','RA-BI','=A01+UC202-KF03Q','','','','' +'MA3236','ANTRIEB 1 EINFAHREN RSM 27','RA-BI','=A01+UC202-KF03Q','','','','A' +'BG3221','SENSOR OPTISCH 1 RSM 27','OPT. AP110','=A01+UC202-KF02i','','','','' +'QA3233','ANTRIEB 1 AUSFAHREN RSM 26','RA-BI','=A01+UC202-KF03Q','','','','' +'MA3232','ANTRIEB 1 EINFAHREN RSM 26','RA-BI','=A01+UC202-KF03Q','','','','A' +'BG3213','SENSOR OPTISCH 1 RSM 26','OPT. AP110','=A01+UC202-KF01i','','','','' +'QA3227','ANTRIEB 1 AUSFAHREN RSM 25','RA-BI','=A01+UC202-KF02Q','','','','' +'MA3226','ANTRIEB 1 EINFAHREN RSM 25','RA-BI','=A01+UC202-KF02Q','','','','A' +'BG3211','SENSOR OPTISCH 1 RSM 25','OPT. AP110','=A01+UC202-KF01i','','','','' +'QA3223','ANTRIEB 1 AUSFAHREN RSM 24','RA-BI','=A01+UC202-KF02Q','','','','' +'MA3222','ANTRIEB 1 EINFAHREN RSM 24','RA-BI','=A01+UC202-KF02Q','','','','A' +'BG3207','SENSOR OPTISCH 1 RSM 24','OPT. AP110','=A01+UC202-KF00i','','','','' +'QA3213','ANTRIEB 1 AUSFAHREN RSM 23','RA-BI','=A01+UC202-KF01Q','','','','' +'MA3212','ANTRIEB 1 EINFAHREN RSM 23','RA-BI','=A01+UC202-KF01Q','','','','A' +'BG3205','SENSOR OPTISCH 1 RSM 23','OPT. AP110','=A01+UC202-KF00i','','','','' +'QA3207','ANTRIEB 1 AUSFAHREN RSM 22','RA-BI','=A01+UC202-KF00Q','','','','' +'MA3206','ANTRIEB 1 EINFAHREN RSM 22','RA-BI','=A01+UC202-KF00Q','','','','A' +'BG3203','SENSOR OPTISCH 1 RSM 22','OPT. AP110','=A01+UC202-KF00i','','','','' +'QA3203','ANTRIEB 1 AUSFAHREN RSM 21','RA-BI','=A01+UC202-KF00Q','','','','' +'MA3202','ANTRIEB 1 EINFAHREN RSM 21','RA-BI','=A01+UC202-KF00Q','','','','A' +'BG3201','SENSOR OPTISCH 1 RSM 21','OPT. AP110','=A01+UC202-KF00i','','','','' +'MB3221','WEICHE 1 ABZWEIG RSM 24','SW1 RSM 24','=A01+UC202-KF02Q','','','','' +'MB3211','WEICHE 1 ABZWEIG RSM 23','SW1 RSM 23','=A01+UC202-KF01Q','','','','' +'MB3205','WEICHE 1 ABZWEIG RSM 22','SW1 RSM 22','=A01+UC202-KF00Q','','','','' +'MB3201','WEICHE 1 ABZWEIG RSM 21','SW1 RSM 21','=A01+UC202-KF00Q','','','','' +'QA3153','ANTRIEB 1 AUSFAHREN RSM 20','RA-BI','=A01+UC201-KF05Q','','','','' +'MA3152','ANTRIEB 1 EINFAHREN RSM 20','RA-BI','=A01+UC201-KF05Q','','','','A' +'BG3127','SENSOR OPTISCH 1 RSM 20','OPT. AP110','=A01+UC201-KF02i','','','','' +'QA3147','ANTRIEB 1 AUSFAHREN RSM 19','RA-BI','=A01+UC201-KF04Q','','','','' +'MA3146','ANTRIEB 1 EINFAHREN RSM 19','RA-BI','=A01+UC201-KF04Q','','','','A' +'BG3125','SENSOR OPTISCH 1 RSM 19','OPT. AP110','=A01+UC201-KF02i','','','','' +'QA3143','ANTRIEB 1 AUSFAHREN RSM 18','RA-BI','=A01+UC201-KF04Q','','','','' +'MA3142','ANTRIEB 1 EINFAHREN RSM 18','RA-BI','=A01+UC201-KF04Q','','','','A' +'BG3123','SENSOR OPTISCH 1 RSM 18','OPT. AP110','=A01+UC201-KF02i','','','','' +'QA3137','ANTRIEB 1 AUSFAHREN RSM 17','RA-BI','=A01+UC201-KF03Q','','','','' +'MA3136','ANTRIEB 1 EINFAHREN RSM 17','RA-BI','=A01+UC201-KF03Q','','','','A' +'BG3121','SENSOR OPTISCH 1 RSM 17','OPT. AP110','=A01+UC201-KF02i','','','','' +'QA3133','ANTRIEB 1 AUSFAHREN RSM 16','RA-BI','=A01+UC201-KF03Q','','','','' +'MA3132','ANTRIEB 1 EINFAHREN RSM 16','RA-BI','=A01+UC201-KF03Q','','','','A' +'BG3113','SENSOR OPTISCH 1 RSM 16','OPT. AP110','=A01+UC201-KF01i','','','','' +'QA3127','ANTRIEB 1 AUSFAHREN RSM 15','RA-BI','=A01+UC201-KF02Q','','','','' +'MA3126','ANTRIEB 1 EINFAHREN RSM 15','RA-BI','=A01+UC201-KF02Q','','','','A' +'BG3111','SENSOR OPTISCH 1 RSM 15','OPT. AP110','=A01+UC201-KF01i','','','','' +'QA3123','ANTRIEB 1 AUSFAHREN RSM 14','RA-BI','=A01+UC201-KF02Q','','','','' +'MA3122','ANTRIEB 1 EINFAHREN RSM 14','RA-BI','=A01+UC201-KF02Q','','','','A' +'BG3107','SENSOR OPTISCH 1 RSM 14','OPT. AP110','=A01+UC201-KF00i','','','','' +'QA3113','ANTRIEB 1 AUSFAHREN RSM 13','RA-BI','=A01+UC201-KF01Q','','','','' +'MA3112','ANTRIEB 1 EINFAHREN RSM 13','RA-BI','=A01+UC201-KF01Q','','','','A' +'BG3105','SENSOR OPTISCH 1 RSM 13','OPT. AP110','=A01+UC201-KF00i','','','','' +'QA3107','ANTRIEB 1 AUSFAHREN RSM 12','RA-BI','=A01+UC201-KF00Q','','','','' +'MA3106','ANTRIEB 1 EINFAHREN RSM 12','RA-BI','=A01+UC201-KF00Q','','','','A' +'BG3103','SENSOR OPTISCH 1 RSM 12','OPT. AP110','=A01+UC201-KF00i','','','','' +'QA3103','ANTRIEB 1 AUSFAHREN RSM 11','RA-BI','=A01+UC201-KF00Q','','','','' +'MA3102','ANTRIEB 1 EINFAHREN RSM 11','RA-BI','=A01+UC201-KF00Q','','','','A' +'BG3101','SENSOR OPTISCH 1 RSM 11','OPT. AP110','=A01+UC201-KF00i','','','','' +'MB3145','WEICHE 1 ABZWEIG RSM 19','SW1 RSM 19','=A01+UC201-KF04Q','','','','' +'MB3141','WEICHE 1 ABZWEIG RSM 18','SW1 RSM 18','=A01+UC201-KF04Q','','','','' +'MB3135','WEICHE 1 ABZWEIG RSM 17','SW1 RSM 17','=A01+UC201-KF03Q','','','','' +'MB3131','WEICHE 1 ABZWEIG RSM 16','SW1 RSM 16','=A01+UC201-KF03Q','','','','' +'MB3125','WEICHE 1 ABZWEIG RSM 15','SW1 RSM 15','=A01+UC201-KF02Q','','','','' +'MB3121','WEICHE 1 ABZWEIG RSM 14','SW1 RSM 14','=A01+UC201-KF02Q','','','','' +'MB3111','WEICHE 1 ABZWEIG RSM 13','SW1 RSM 13','=A01+UC201-KF01Q','','','','' +'MB3105','WEICHE 1 ABZWEIG RSM 12','SW1 RSM 12','=A01+UC201-KF00Q','','','','' +'MB3101','WEICHE 1 ABZWEIG RSM 11','SW1 RSM 11','=A01+UC201-KF00Q','','','','' +'QA3053','ANTRIEB 1 AUSFAHREN RSM 9','RA-BI','=A01+UC200-KF05Q','','','','' +'MA3052','ANTRIEB 1 EINFAHREN RSM 9','RA-BI','=A01+UC200-KF05Q','','','','A' +'BG3025','SENSOR OPTISCH 1 RSM 9','OPT. AP110','=A01+UC200-KF02i','','','','' +'QA3047','ANTRIEB 1 AUSFAHREN RSM 8','RA-BI','=A01+UC200-KF04Q','','','','' +'MA3046','ANTRIEB 1 EINFAHREN RSM 8','RA-BI','=A01+UC200-KF04Q','','','','A' +'BG3023','SENSOR OPTISCH 1 RSM 8','OPT. AP110','=A01+UC200-KF02i','','','','' +'QA3043','ANTRIEB 1 AUSFAHREN RSM 7','RA-BI','=A01+UC200-KF04Q','','','','' +'MA3042','ANTRIEB 1 EINFAHREN RSM 7','RA-BI','=A01+UC200-KF04Q','','','','A' +'BG3021','SENSOR OPTISCH 1 RSM 7','OPT. AP110','=A01+UC200-KF02i','','','','' +'QA3033','ANTRIEB 1 AUSFAHREN RSM 6','RA-BI','=A01+UC200-KF03Q','','','','' +'MA3032','ANTRIEB 1 EINFAHREN RSM 6','RA-BI','=A01+UC200-KF03Q','','','','A' +'BG3013','SENSOR OPTISCH 1 RSM 6','OPT. AP110','=A01+UC200-KF01i','','','','' +'QA3027','ANTRIEB 1 AUSFAHREN RSM 5','RA-BI','=A01+UC200-KF02Q','','','','' +'MA3026','ANTRIEB 1 EINFAHREN RSM 5','RA-BI','=A01+UC200-KF02Q','','','','A' +'BG3011','SENSOR OPTISCH 1 RSM 5','OPT. AP110','=A01+UC200-KF01i','','','','' +'QA3023','ANTRIEB 1 AUSFAHREN RSM 4','RA-BI','=A01+UC200-KF02Q','','','','' +'MA3022','ANTRIEB 1 EINFAHREN RSM 4','RA-BI','=A01+UC200-KF02Q','','','','A' +'BG3007','SENSOR OPTISCH 1 RSM 4','OPT. AP110','=A01+UC200-KF00i','','','','' +'QA3013','ANTRIEB 1 AUSFAHREN RSM 3','RA-BI','=A01+UC200-KF01Q','','','','' +'MA3012','ANTRIEB 1 EINFAHREN RSM 3','RA-BI','=A01+UC200-KF01Q','','','','A' +'BG3005','SENSOR OPTISCH 1 RSM 3','OPT. AP110','=A01+UC200-KF00i','','','','' +'QA3007','ANTRIEB 1 AUSFAHREN RSM 2','RA-BI','=A01+UC200-KF00Q','','','','' +'MA3006','ANTRIEB 1 EINFAHREN RSM 2','RA-BI','=A01+UC200-KF00Q','','','','A' +'BG3003','SENSOR OPTISCH 1 RSM 2','OPT. AP110','=A01+UC200-KF00i','','','','' +'QA3003','ANTRIEB 1 AUSFAHREN RSM 1','RA-BI','=A01+UC200-KF00Q','','','','' +'MA3002','ANTRIEB 1 EINFAHREN RSM 1','RA-BI','=A01+UC200-KF00Q','','','','A' +'BG3001','SENSOR OPTISCH 1 RSM 1 ','OPT. AP110','=A01+UC200-KF00i','','','','' +'MB3051','WEICHE 1 ABZWEIG RSM 9','SW1 RSM 09','=A01+UC200-KF05Q','','','','' +'MB3045','WEICHE 1 ABZWEIG RSM 8','SW1 RSM 08','=A01+UC200-KF04Q','','','','' +'MB3031','WEICHE 1 ABZWEIG RSM 6','SW1 RSM 06','=A01+UC200-KF03Q','','','','' +'MB3041','WEICHE 1 ABZWEIG RSM 7','SW1 RSM 07','=A01+UC200-KF04Q','','','','' +'MB3025','WEICHE 1 ABZWEIG RSM 5','SW1 RSM 05','=A01+UC200-KF02Q','','','','' +'MB3021','WEICHE 1 ABZWEIG RSM 4','SW1 RSM 04','=A01+UC200-KF02Q','','','','' +'MB3011','WEICHE 1 ABZWEIG RSM 3','SW1 RSM 03','=A01+UC200-KF01Q','','','','' +'MB3005','WEICHE 1 ABZWEIG RSM 2','SW1 RSM 02','=A01+UC200-KF00Q','','','','' +'MB1240','WEICHE ABZWEIG EINFAHRT FLYER 4 ','SW ENTER RF 4','=A01+UC102-KF00Q','','','','' +'MB1242','WEICHE ABZWEIG EINFAHRT F402 FLYER 4','SW F0402 ','=A01+UC102-KF00Q','','','','' +'QA1111','ANTRIEB NACHPUFFER F0202 FLYER 2','M-BI-RI','=A01+UC101-KF03Q','','','','' +'QA1101','ANTRIEB PUFFER F0202 FLYER 2','M-BI-RI','=A01+UC101-KF02Q','','','','' +'MA1100','ANTRIEB PUFFER F0201 FLYER 2','M-BI-LE','=A01+UC101-KF02Q','','','','' +'QA1265','ANTRIEB HAUPTSTECKE RF 5 ','M-BI-RF ','=A01+UC102-KF02Q','','','','' +'MA1264','ANTRIEB HAUPTSTECKE RF 5','M-BI-RF ','=A01+UC102-KF02Q','','','','' +'MA1276','ANTRIEB EIN-AUSFAHRT PUFFERSTRECKE RF 4','M-BI-RF 5','=A01+UC102-KF03Q','','','','' +'MB1257','WEICHE ABZWEIG KREUZUNGSWEICHE FLYER 4','SW RF 4','=A01+UC102-KF01Q','','','','' +'MB1283','WEICHE ABZWEIG AUSFAHRT NACHP. RF5','SW EXIT RF5','=A01+UC102-KF04Q','','','','' +'QA1305','ANTRIEB HAUPTSTECKE RF 5 ','M RF -> RSM','=A01+UC102-KF06Q','','','','' +'MA1304','ANTRIEB HAUPTSTECKE RF 5 ','M RSM -> RF','=A01+UC102-KF06Q','','','','' +'MA1272','ANTRIEB EIN-AUSFAHRT PUFFERSTRECKE RF 5','M-BI-RF 5','=A01+UC102-KF03Q','','','','' +'MB1274','ANPRESSEN NACHPUFFER F0401 FLYER 4','PRESS F0401','=A01+UC102-KF03Q','','','','' +'MB1275','ANPRESSEN NACHPUFFER F0402 FLYER 4','PRESS F0402','=A01+UC102-KF03Q','','','','' +'QA1271','ANTRIEB NACHPUFFER F0402 FLYER 4','M-BI-RI','=A01+UC102-KF03Q','','','','' +'MA1270','ANTRIEB NACHPUFFER F0401 FLYER 4','M-BI-LE','=A01+UC102-KF03Q','','','','' +'MB1244','ANPRESSEN PUFFER F0401 FLYER 4','PRESS F0401','=A01+UC102-KF00Q','','','','' +'MB1245','ANPRESSEN PUFFER F0402 FLYER 4','PRESS F0402','=A01+UC102-KF00Q','','','','' +'QA1261','ANTRIEB PUFFER F0402 FLYER 4','M-BI-RI','=A01+UC102-KF02Q','','','','' +'MA1260','ANTRIEB PUFFER F0401 FLYER 4','M-BI-LE','=A01+UC102-KF02Q','','','','' +'SF1251','HAUPTSCHALTER EIN +UC102','I-MS ON','=A01+UC102-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1250','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC102-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1250','LM-ÜBERSTROM +UC102','IL-YE-LED','=A01+UC102-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'KF1255','IF RF 04: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC102-KF01Q','IF RF 04: START SPULENWECHSEL 2','IF RF 04: START EXCHANGE 2','','' +'DI1254','IF RF 04 : NEUE SPULE','IF-RELAIS','=A01+UC102-KF01i','IF RF 04: NEUE SPULE ','IF RF 04: NEW BOBBIN','','' +'KF1254','IF RF 04: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC102-KF01Q','IF RF 04: START SPULENWECHSEL 1','IF RF 04: START EXCHANGE 1','','' +'PF1247','RUNDUMLEUCHTE STÖRUNG FLYER 4','LED-YE_FAULT','=A01+UC102-KF00Q','','','','' +'SF1253','RESET FLYER 4','IPB-YE-NO','=A01+UC102-KF01i','RESET','RESET','RESET','' +'PF1253','RESET FLYER 4','IPB-YE-LED','=A01+UC102-KF01Q','','','','' +'SF1252','NOT HALT FLYER 4','EPB-NC','=A01+UC102-KF01i','NOT-HALT','E-STOP','E-STOP','' +'MB1267','WEICHE ABZWEIG EINFAHRT NACHP. RF 4','SW-BRANCH','=A01+UC102-KF02Q','','','','' +'MB1266','WEICHE ABZWEIG EINFAHRT NACHP. RF 4','SW-STRAIGHT','=A01+UC102-KF02Q','','','','' +'BG1255','SENSOR SPULE IN POSITION PM 4','BOBBIN IN POS','=A01+UC102-KF01i','','','','' +'BG1243','SENSOR ZUG IN DOFFER PM 4','LT-TRAIN IN DOF','=A01+UC102-KF00i','','','','' +'BG1256','SENSOR SPULE IN POSITION FLYER 4','BOBBIN IN POS','=A01+UC102-KF01i','','','','' +'BG1244','SENSOR ZUG IN DOFFER FLYER 4 ','LT-TRAIN IN DOF','=A01+UC102-KF00i','','','','' +'MB1251','ABHEBEN ANTRIEBE FLYER 4','LIFT OFF BS 4','=A01+UC102-KF01Q','','','','' +'MA1256','ANTRIEBE FLYER 4','M-BI','=A01+UC102-KF01Q','','','','' +'MB1307','WEICHE ABZWEIG EINFAHRT NACHP. RF 5','SW-BRANCH','=A01+UC102-KF06Q','','','','' +'MB1306','WEICHE ABZWEIG EINFAHRT NACHP. RF 5','SW-STRAIGHT','=A01+UC102-KF06Q','','','','' +'KF1295','IF RF 05: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC102-KF05Q','IF RF 05: START SPULENWECHSEL 2','IF RF 05: START EXCHANGE 2','','' +'DI1294','IF RF 05 : NEUE SPULE','IF-RELAIS','=A01+UC102-KF04i','IF RF 05: NEUE SPULE ','IF RF 05: NEW BOBBIN','','' +'KF1294','IF RF 05: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC102-KF05Q','IF RF 05: START SPULENWECHSEL 1','IF RF 05: START EXCHANGE 1','','' +'PF1287','RUNDUMLEUCHTE STÖRUNG FLYER 5','LED-YE_FAULT','=A01+UC102-KF04Q','','','','' +'SF1293','RESET FLYER 5','IPB-YE-NO','=A01+UC102-KF04i','RESET','RESET','RESET','' +'PF1293','RESET FLYER 5','IPB-YE-LED','=A01+UC102-KF05Q','','','','' +'SF1292','NOT HALT FLYER 5','EPB-NC','=A01+UC102-KF04i','NOT-HALT','E-STOP','E-STOP','' +'BG1296','SENSOR SPULE IN POSITION FLYER 5','BOBBIN IN POS','=A01+UC102-KF04i','','','','' +'BG1284','SENSOR ZUG IN DOFFER FLYER 5','LT-TRAIN IN DOF','=A01+UC102-KF03i','','','','' +'BG1295','SENSOR SPULE IN POSITION PM 5','BOBBIN IN POS','=A01+UC102-KF04i','','','','' +'BG1283','SENSOR ZUG IN DOFFER PM 5','LT-TRAIN IN DOF','=A01+UC102-KF03i','','','','' +'MB1291','ABHEBEN ANTRIEBE FLYER 5','LIFT OFF BS 5','=A01+UC102-KF05Q','','','','' +'MA1296','ANTRIEBE FLYER 5','M-BI','=A01+UC102-KF05Q','','','','' +'BG1281','SENSOR AUSFAHRT PUFFER F0502 FLYER 5','LT-EXIT F0502','=A01+UC102-KF03i','','','','' +'BG1280','SENSOR AUSFAHRT PUFFER F0501 FLYER 5','LT-EXIT F0501','=A01+UC102-KF03i','','','','' +'MB1314','ANPRESSEN NACHPUFFER F0501 FLYER 5','PRESS F0501','=A01+UC102-KF07Q','','','','' +'MB1315','ANPRESSEN NACHPUFFER F0502 FLYER 5','PRESS F0502','=A01+UC102-KF07Q','','','','' +'QA1311','ANTRIEB NACHPUFFER F0502 FLYER 5','M-BI-RI','=A01+UC102-KF07Q','','','','' +'MA1310','ANTRIEB NACHPUFFER F0501 FLYER 5','M-BI-LE','=A01+UC102-KF07Q','','','','' +'MB1284','ANPRESSEN PUFFER F0501 FLYER 5','PRESS F0501','=A01+UC102-KF04Q','','','','' +'MB1285','ANPRESSEN PUFFER F0502 FLYER 5','PRESS F0502','=A01+UC102-KF04Q','','','','' +'QA1301','ANTRIEB PUFFER F0502 FLYER 5','M-BI-RI','=A01+UC102-KF06Q','','','','' +'MA1300','ANTRIEB PUFFER F0501 FLYER 5','M-BI-LE','=A01+UC102-KF06Q','','','','' +'MB1602','WEICHE ABZWEIG EINFAHRT F1001-F1002 FLYER 10','SW ENTER F1001','=A01+UC105-KF00Q','','','','' +'MB1601','WEICHE ABZWEIG EINFAHRT PUFFER F1001 FLYER 10','SW ENTER RF 10','=A01+UC105-KF00Q','','','','' +'BG1606','SENSOR AUSFAHRT NACHPUFFER F1002 RF 10','LT-EXIT F1002','=A01+UC105-KF00i','','','','' +'BG1605','SENSOR AUSFAHRT NACHPUFFER F1001 RF 10','LT-EXIT F1001','=A01+UC105-KF00i','','','','' +'QA1625','ANTRIEB HAUPTSTECKE RF 10 ','M RF 10','=A01+UC105-KF02Q','','','','' +'MA1624','ANTRIEB HAUPTSTECKE RF 10 ','M RF 10','=A01+UC105-KF02Q','','','','' +'MB1634','ANPRESSEN NACHPUFFER F1001 FLYER 10','PRESS F1001','=A01+UC105-KF03Q','','','','' +'MB1635','ANPRESSEN NACHPUFFER F1002 FLYER 10','PRESS F1002','=A01+UC105-KF03Q','','','','' +'QA1631','ANTRIEB NACHPUFFER F1001 RF 10','M-BI-LE','=A01+UC105-KF03Q','','','','' +'MA1630','ANTRIEB NACHPUFFER F1001 RF 10','M-BI-RI','=A01+UC105-KF03Q','','','','' +'MB1604','ANPRESSEN PUFFER F1001 FLYER 10','PRESS F1001','=A01+UC105-KF00Q','','','','' +'MB1605','ANPRESSEN PUFFER F1002 FLYER 10','PRESS F1002','=A01+UC105-KF00Q','','','','' +'QA1621','ANTRIEB PUFFER F1002 FLYER 10','M-BI-RI','=A01+UC105-KF02Q','','','','' +'MA1620','ANTRIEB PUFFER F1001 FLYER 10','M-BI-LE','=A01+UC105-KF02Q','','','','' +'MB1627','WEICHE ABZWEIG EINFAHRT NACHP. RF 10','SW-BRANCH','=A01+UC105-KF02Q','','','','' +'MB1626','WEICHE ABZWEIG EINFAHRT NACHP. RF 10','SW-STRAIGHT','=A01+UC105-KF02Q','','','','' +'BG1601','SENSOR AUSFAHRT PUFFER F1002 FLYER 10','LT-EXIT F1002','=A01+UC105-KF00i','','','','' +'BG1600','SENSOR AUSFAHRT PUFFER F1001 FLYER 10','LT-EXIT F1001','=A01+UC105-KF00i','','','','' +'BG1616','SENSOR SPULE IN POSITION FLYER 10','BOBBIN IN POS','=A01+UC105-KF01i','','','','' +'BG1604','SENSOR ZUG IN DOFFER FLYER 10','LT-TRAIN IN DOF','=A01+UC105-KF00i','','','','' +'BG1615','SENSOR SPULE IN POSITION PM 10','BOBBIN IN POS','=A01+UC105-KF01i','','','','' +'BG1603','SENSOR ZUG IN DOFFER PM 10','LT-TRAIN IN DOF','=A01+UC105-KF00i','','','','' +'MB1611','ABHEBEN ANTRIEBE FLYER 10','LIFT OFF BS 10','=A01+UC105-KF01Q','','','','' +'MA1616','ANTRIEB FLYER 10 ','M-BI','=A01+UC105-KF01Q','','','','' +'SF1611','HAUPTSCHALTER EIN +UC105','I-MS ON','=A01+UC105-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1610','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC105-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1610','LM-ÜBERSTROM +UC105','IL-YE-LED','=A01+UC105-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'KF1615','IF RF 10: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC105-KF01Q','IF RF 10: START SPULENWECHSEL 2','IF RF 10: START EXCHANGE 2','','' +'DI1614','IF RF 10 : NEUE SPULE','IF-RELAIS','=A01+UC105-KF01i','IF RF 10: NEUE SPULE ','IF RF 10: NEW BOBBIN','','' +'KF1614','IF RF 10: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC105-KF01Q','IF RF 10: START SPULENWECHSEL 1','IF RF 10: START EXCHANGE 1','','' +'PF1607','RUNDUMLEUCHTE STÖRUNG FLYER 10','LED-YE_FAULT','=A01+UC105-KF00Q','','','','' +'SF1613','RESET FLYER 10','IPB-YE-NO','=A01+UC105-KF01i','RESET','RESET','RESET','' +'PF1613','RESET FLYER 10','IPB-YE-LED','=A01+UC105-KF01Q','','','','' +'SF1612','NOT HALT FLYER 10','EPB-NC','=A01+UC105-KF01i','NOT-HALT','E-STOP','E-STOP','' +'QA1565','ANTRIEB HAUPTSTECKE RF 9','M-BI','=A01+UC104-KF06Q','','','','' +'MA1564','ANTRIEB HAUPTSTECKE RF 9','M-BI','=A01+UC104-KF06Q','','','','' +'QA1465','ANTRIEB HAUPTSTECKE RF 7','M-BI','=A01+UC103-KF06Q','','','','' +'MA1464','ANTRIEB HAUPTSTECKE RF 7','M-BI','=A01+UC103-KF06Q','','','','' +'SF1511','HAUPTSCHALTER EIN +UC104','I-MS ON','=A01+UC104-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1510','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC104-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1510','LM-ÜBERSTROM +UC104','IL-YE-LED','=A01+UC104-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'BG1557','SENSOR HAUPTSTR. FLYER 9','LT-ENTER RF 9','=A01+UC104-KF03i','','','','' +'BG1517','SENSOR HAUPTSTR. FLYER 8','LT-ENTER RF 8','=A01+UC104-KF01i','','','','' +'BG1505','SENSOR AUSFAHRT NACHPUFFER F0801 FLYER 8','LT-EXIT F0801','=A01+UC104-KF00i','','','','' +'BG1506','SENSOR AUSFAHRT NACHPUFFER F0802 FLYER 8','LT-EXIT F0802','=A01+UC104-KF00i','','','','' +'BG1501','SENSOR AUSFAHRT PUFFER F0802 FLYER 8','LT-EXIT F0802','=A01+UC104-KF00i','','','','' +'BG1500','SENSOR AUSFAHRT PUFFER F0801 FLYER 8','LT-EXIT F0801','=A01+UC104-KF00i','','','','' +'MB1500','WEICHE ABZWEIG EINFAHRT FLYER 8','SW ENTER RF 8','=A01+UC104-KF00Q','','','','' +'MB1501','WEICHE ABZWEIG EINFAHRT F0801-F0802 ','SW F0801-F0802','=A01+UC104-KF00Q','','','','' +'MB1503','WEICHE ABZWEIG AUSFAHRT NACHP. RF 8','SW EXIT RF 8','=A01+UC104-KF00Q','','','','' +'BG1546','SENSOR AUSFAHRT NACHPUFFER F0902 RF 9','LT-EXIT F0902','=A01+UC104-KF02i','','','','' +'BG1545','SENSOR AUSFAHRT NACHPUFFER F0901 RF 9','LT-EXIT F0901','=A01+UC104-KF02i','','','','' +'MB1543','WEICHE ABZWEIG AUSFAHRT NACHP. FLYER 9','SW EXIT RF9','=A01+UC104-KF04Q','','','','' +'MB1540','WEICHE ABZWEIG EINFAHRT FLYER 9','SW ENTER RF 9','=A01+UC104-KF04Q','','','','' +'MB1527','WEICHE ABZWEIG EINFAHRT NACHP. RF 8','SW-BRANCH','=A01+UC104-KF02Q','','','','' +'MB1526','WEICHE ABZWEIG EINFAHRT NACHP. RF 8','SW-STRAIGHT','=A01+UC104-KF02Q','','','','' +'BG1515','SENSOR SPULE IN POSITION PM 8','BOBBIN IN POS','=A01+UC104-KF01i','','','','' +'BG1503','SENSOR ZUG IN DOFFER PM 8','LT-TRAIN IN DOF','=A01+UC104-KF00i','','','','' +'BG1516','SENSOR SPULE IN POSITION FLYER 8','BOBBIN IN POS','=A01+UC104-KF01i','','','','' +'BG1504','SENSOR ZUG IN DOFFER FLYER 8','LT-TRAIN IN DOF','=A01+UC104-KF00i','','','','' +'MB1511','ABHEBEN ANTRIEBE FLYER 8','LIFT OFF BS 8','=A01+UC104-KF01Q','','','','' +'MA1516','ANTRIEBE FLYER 8','M-BI','=A01+UC104-KF01Q','','','','' +'KF1515','IF RF 08: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC104-KF01Q','IF RF 08: START SPULENWECHSEL 2','IF RF 08: START EXCHANGE 2','','' +'DI1514','IF RF 08 : NEUE SPULE','IF-RELAIS','=A01+UC104-KF01i','IF RF 08: NEUE SPULE ','IF RF 08: NEW BOBBIN','','' +'KF1514','IF RF 08: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC104-KF01Q','IF RF 08: START SPULENWECHSEL 1','IF RF 08: START EXCHANGE 1','','' +'PF1507','RUNDUMLEUCHTE STÖRUNG FLYER 8','LED-YE_FAULT','=A01+UC104-KF00Q','','','','' +'SF1513','RESET FLYER 8','IPB-YE-NO','=A01+UC104-KF01i','RESET','RESET','RESET','' +'PF1513','RESET FLYER 8','IPB-YE-LED','=A01+UC104-KF01Q','','','','' +'SF1512','NOT HALT FLYER 8','EPB-NC','=A01+UC104-KF01i','NOT-HALT','E-STOP','E-STOP','' +'BG1541','SENSOR AUSFAHRT PUFFER F0902 FLYER 9','LT-EXIT F0902','=A01+UC104-KF02i','','','','' +'BG1540','SENSOR AUSFAHRT PUFFER F0901 FLYER 9','LT-EXIT F0901','=A01+UC104-KF02i','','','','' +'BG1556','SENSOR SPULE IN POSITION FLYER 9','BOBBIN IN POS','=A01+UC104-KF03i','','','','' +'BG1544','SENSOR ZUG IN DOFFER FLYER 9','LT-TRAIN IN DOF','=A01+UC104-KF02i','','','','' +'BG1555','SENSOR SPULE IN POSITION PM 9','BOBBIN IN POS','=A01+UC104-KF03i','','','','' +'BG1543','SENSOR ZUG IN DOFFER PM 9','LT-TRAIN IN DOF','=A01+UC104-KF02i','','','','' +'MB1551','ABHEBEN ANTRIEBE FLYER 9','LIFT OFF BS 9','=A01+UC104-KF05Q','','','','' +'MA1556','ANTRIEBE FLYER 9','M-BI','=A01+UC104-KF05Q','','','','' +'MB1567','WEICHE ABZWEIG EINFAHRT NACHP. RF 9','SW-STRAIGHT','=A01+UC104-KF06Q','','','','' +'MB1566','WEICHE ABZWEIG EINFAHRT NACHP. RF 9','SW-BRANCH','=A01+UC104-KF06Q','','','','' +'KF1555','IF RF 09: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC104-KF05Q','IF RF 09: START SPULENWECHSEL 2','IF RF 09: START EXCHANGE 2','','' +'DI1554','IF RF 09 : NEUE SPULE','IF-RELAIS','=A01+UC104-KF03i','IF RF 09: NEUE SPULE ','IF RF 09: NEW BOBBIN','','' +'KF1554','IF RF 09: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC104-KF05Q','IF RF 09: START SPULENWECHSEL 1','IF RF 09: START EXCHANGE 1','','' +'PF1547','RUNDUMLEUCHTE STÖRUNG FLYER 9','LED-YE_FAULT','=A01+UC104-KF04Q','','','','' +'SF1553','RESET FLYER 9','IPB-YE-NO','=A01+UC104-KF03i','RESET','RESET','RESET','' +'PF1553','RESET FLYER 9','IPB-YE-LED','=A01+UC104-KF05Q','','','','' +'SF1552','NOT HALT FLYER 9','EPB-NC','=A01+UC104-KF03i','NOT-HALT','E-STOP','E-STOP','' +'MB1534','ANPRESSEN NACHPUFFER F0801 FLYER 8','PRESS F0801','=A01+UC104-KF03Q','','','','' +'MB1535','ANPRESSEN NACHPUFFER F0802 FLYER 8','PRESS F0802','=A01+UC104-KF03Q','','','','' +'QA1531','ANTRIEB NACHPUFFER F0802 RF 8','M-BI','=A01+UC104-KF03Q','','','','' +'MA1530','ANTRIEB NACHPUFFER F0801 RF 8','M-BI','=A01+UC104-KF03Q','','','','' +'MB1504','ANPRESSEN PUFFER F0801 FLYER 8','PRESS F0801','=A01+UC104-KF00Q','','','','' +'MB1505','ANPRESSEN PUFFER F0802 FLYER 8','PRESS F0802','=A01+UC104-KF00Q','','','','' +'QA1521','ANTRIEB PUFFER F0802 FLYER 8','M-BI-RI','=A01+UC104-KF02Q','','','','' +'MA1520','ANTRIEB PUFFER F0801 FLYER 8','M-BI-LE','=A01+UC104-KF02Q','','','','' +'MB1574','ANPRESSEN NACHPUFFER F0901 FLYER 9','PRESS F0901','=A01+UC104-KF07Q','','','','' +'MB1575','ANPRESSEN NACHPUFFER F0902 FLYER 9','PRESS F0902','=A01+UC104-KF07Q','','','','' +'QA1571','ANTRIEB NACHPUFFER F0902 FLYER 9','M-BI-LE','=A01+UC104-KF07Q','','','','' +'MA1570','ANTRIEB NACHPUFFER F0901 FLYER 9','M-BI-RI','=A01+UC104-KF07Q','','','','' +'MB1544','ANPRESSEN PUFFER F0901 FLYER 9','PRESS F0901','=A01+UC104-KF04Q','','','','' +'MB1545','ANPRESSEN PUFFER F0902 FLYER 9','PRESS F0902','=A01+UC104-KF04Q','','','','' +'QA1561','ANTRIEB PUFFER F0901 FLYER 9','M-BI-RI','=A01+UC104-KF06Q','','','','' +'MA1560','ANTRIEB PUFFER F0901 FLYER 9','M-BI-LE','=A01+UC104-KF06Q','','','','' +'SF1411','HAUPTSCHALTER EIN +UC103','I-MS ON','=A01+UC103-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1410','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC103-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1410','LM-ÜBERSTROM +UC103','IL-YE-LED','=A01+UC103-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'BG1457','SENSOR HAUPTSTR. FLYER 7','LT-ENTER RF7','=A01+UC103-KF03i','','','','' +'BG1417','SENSOR HAUPTSTR. FLYER 6','LT-ENTER RF6','=A01+UC103-KF01i','','','','' +'BG1405','SENSOR AUSFAHRT NACHPUFFER F0601 FLYER 6','LT-EXIT F0601','=A01+UC103-KF00i','','','','' +'BG1406','SENSOR AUSFAHRT NACHPUFFER F0602 FLYER 6','LT-EXIT F0602','=A01+UC103-KF00i','','','','' +'BG1401','SENSOR AUSFAHRT PUFFER F0602 FLYER 6','LT-EXIT F0602','=A01+UC103-KF00i','','','','' +'BG1400','SENSOR AUSFAHRT PUFFER F0601 FLYER 6','LT-EXIT F0601','=A01+UC103-KF00i','','','','' +'MB1400','WEICHE ABZWEIG EINFAHRT FLYER 6','SW ENTER RF6','=A01+UC103-KF00Q','','','','' +'MB1401','WEICHE ABZWEIG EINFAHRT F0601-F0602 ','SW F0601-F0602','=A01+UC103-KF00Q','','','','' +'MB1403','WEICHE ABZWEIG AUSFAHRT NACHP. RF 6','SW EXIT RF 6','=A01+UC103-KF00Q','','','','' +'BG1446','SENSOR AUSFAHRT NACHPUFFER F0702 RF 7','LT-EXIT F0702','=A01+UC103-KF02i','','','','' +'BG1445','SENSOR AUSFAHRT NACHPUFFER F0701 RF 7','LT-EXIT F0701','=A01+UC103-KF02i','','','','' +'MB1443','WEICHE ABZWEIG AUSFAHRT NACHP. FLYER 7','SW EXIT RF7','=A01+UC103-KF04Q','','','','' +'MB1440','WEICHE ABZWEIG EINFAHRT FLYER 7','SW ENTER RF7','=A01+UC103-KF04Q','','','','' +'MB1427','WEICHE ABZWEIG EINFAHRT NACHP. RF 6','SW-BRANCH','=A01+UC103-KF02Q','','','','' +'MB1426','WEICHE ABZWEIG EINFAHRT NACHP. RF 6','SW-STRAIGHT','=A01+UC103-KF02Q','','','','' +'BG1415','SENSOR SPULE IN POSITION PM 6','BOBBIN IN POS','=A01+UC103-KF01i','','','','' +'BG1403','SENSOR ZUG IN DOFFER PM 6','LT-TRAIN IN DOF','=A01+UC103-KF00i','','','','' +'BG1416','SENSOR SPULE IN POSITION FLYER 6','BOBBIN IN POS','=A01+UC103-KF01i','','','','' +'BG1404','SENSOR ZUG IN DOFFER FLYER 6','LT-TRAIN IN DOF','=A01+UC103-KF00i','','','','' +'MB1411','ABHEBEN ANTRIEBE FLYER 6','LIFT OFF BS 6','=A01+UC103-KF01Q','','','','' +'MA1416','ANTRIEBE FLYER 6','M-BI','=A01+UC103-KF01Q','','','','' +'KF1415','IF RF 06: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC103-KF01Q','IF RF 06: START SPULENWECHSEL 2','IF RF 06: START EXCHANGE 2','','' +'DI1414','IF RF 06 : NEUE SPULE','IF-RELAIS','=A01+UC103-KF01i','IF RF 06: NEUE SPULE ','IF RF 06: NEW BOBBIN','','' +'KF1414','IF RF 06: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC103-KF01Q','IF RF 06: START SPULENWECHSEL 1','IF RF 06: START EXCHANGE 1','','' +'PF1407','RUNDUMLEUCHTE STÖRUNG FLYER 6','LED-YE_FAULT','=A01+UC103-KF00Q','','','','' +'SF1413','RESET FLYER 6','IPB-YE-NO','=A01+UC103-KF01i','RESET','RESET','RESET','' +'PF1413','RESET FLYER 6','IPB-YE-LED','=A01+UC103-KF01Q','','','','' +'SF1412','NOT HALT FLYER 6','EPB-NC','=A01+UC103-KF01i','NOT-HALT','E-STOP','E-STOP','' +'BG1441','SENSOR AUSFAHRT PUFFER F0702 FLYER 7','LT-EXIT F0702','=A01+UC103-KF02i','','','','' +'BG1440','SENSOR AUSFAHRT PUFFER F0701 FLYER 7','LT-EXIT F0701','=A01+UC103-KF02i','','','','' +'BG1456','SENSOR SPULE IN POSITION FLYER 7','BOBBIN IN POS','=A01+UC103-KF03i','','','','' +'BG1444','SENSOR ZUG IN DOFFER FLYER 7','LT-TRAIN IN DOF','=A01+UC103-KF02i','','','','' +'BG1455','SENSOR SPULE IN POSITION PM 7','BOBBIN IN POS','=A01+UC103-KF03i','','','','' +'BG1443','SENSOR ZUG IN DOFFER PM 7','LT-TRAIN IN DOF','=A01+UC103-KF02i','','','','' +'MB1451','ABHEBEN ANTRIEBE FLYER 7','LIFT OFF BS 7','=A01+UC103-KF05Q','','','','' +'MA1456','ANTRIEBE FLYER 7','M-BI','=A01+UC103-KF05Q','','','','' +'MB1467','WEICHE ABZWEIG EINFAHRT NACHP. RF7','SW-STRAIGHT','=A01+UC103-KF06Q','','','','' +'MB1466','WEICHE ABZWEIG EINFAHRT NACHP. RF7','SW-BRANCH','=A01+UC103-KF06Q','','','','' +'KF1455','IF RF 07: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC103-KF05Q','IF RF 07: START SPULENWECHSEL 2','IF RF 07: START EXCHANGE 2','','' +'DI1454','IF RF 07 : NEUE SPULE','IF-RELAIS','=A01+UC103-KF03i','IF RF 07: NEUE SPULE ','IF RF 07: NEW BOBBIN','','' +'KF1454','IF RF 07: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC103-KF05Q','IF RF 07: START SPULENWECHSEL 1','IF RF 07: START EXCHANGE 1','','' +'PF1447','RUNDUMLEUCHTE STÖRUNG FLYER 7','LED-YE_FAULT','=A01+UC103-KF04Q','','','','' +'SF1453','RESET FLYER 7','IPB-YE-NO','=A01+UC103-KF03i','RESET','RESET','RESET','' +'PF1453','RESET FLYER 7','IPB-YE-LED','=A01+UC103-KF05Q','','','','' +'SF1452','NOT HALT FLYER 7','EPB-NC','=A01+UC103-KF03i','NOT-HALT','E-STOP','E-STOP','' +'MB1434','ANPRESSEN NACHPUFFER F0601 FLYER 6','PRESS F0601','=A01+UC103-KF03Q','','','','' +'MB1435','ANPRESSEN NACHPUFFER F0602 FLYER 6','PRESS F0602','=A01+UC103-KF03Q','','','','' +'QA1431','ANTRIEB NACHPUFFER F0602 RF6','M-BI','=A01+UC103-KF03Q','','','','' +'MA1430','ANTRIEB NACHPUFFER F0601 RF6','M-BI','=A01+UC103-KF03Q','','','','' +'MB1404','ANPRESSEN PUFFER F0601 FLYER 6','PRESS F0601','=A01+UC103-KF00Q','','','','' +'MB1405','ANPRESSEN PUFFER F0602 FLYER 6','PRESS F0602','=A01+UC103-KF00Q','','','','' +'QA1421','ANTRIEB PUFFER F0602 FLYER 6','M-BI-RI','=A01+UC103-KF02Q','','','','' +'MA1420','ANTRIEB PUFFER F0601 FLYER 6','M-BI-LE','=A01+UC103-KF02Q','','','','' +'MB1474','ANPRESSEN NACHPUFFER F0701 FLYER 7','PRESS F0701','=A01+UC103-KF07Q','','','','' +'MB1475','ANPRESSEN NACHPUFFER F0702 FLYER 7','PRESS F0702','=A01+UC103-KF07Q','','','','' +'QA1471','ANTRIEB NACHPUFFER F0707 FLYER 7','M-BI-LE','=A01+UC103-KF07Q','','','','' +'MA1470','ANTRIEB NACHPUFFER F0701 FLYER 7','M-BI-RI','=A01+UC103-KF07Q','','','','' +'MB1444','ANPRESSEN PUFFER F0701 FLYER 7','PRESS F0701','=A01+UC103-KF04Q','','','','' +'MB1445','ANPRESSEN PUFFER F0702 FLYER 7','PRESS F0702','=A01+UC103-KF04Q','','','','' +'QA1461','ANTRIEB PUFFER F0701 FLYER 7','M-BI-RI','=A01+UC103-KF06Q','','','','' +'MA1460','ANTRIEB PUFFER F0701 FLYER 7','M-BI-LE','=A01+UC103-KF06Q','','','','' +'BG1080','SENSOR AUSFAHRT PUFFER F0201 FLYER 2','LT-EXIT F0201','=A01+UC101-KF00i','','','','' +'BG1081','SENSOR AUSFAHRT PUFFER F0202 FLYER 2','LT-EXIT F0202','=A01+UC101-KF00i','','','','' +'QA1145','ANTRIEB HAUPTSTR. FLYER 3','M-BI RF 3','=A01+UC101-KF06Q','','','','' +'MA1144','ANTRIEB HAUPTSTR. FLYER 3','M-BI RF 3','=A01+UC101-KF06Q','','','','' +'BG1097','SENSOR HAUPTSTR. VOR FLYER 2 ','LT-RF2 ','=A01+UC101-KF01i','','','','' +'BG1086','SENSOR AUSFAHRT NACHPUFFER F0202 RF 2','LT-EXIT F0202','=A01+UC101-KF00i','','','','' +'BG1085','SENSOR AUSFAHRT NACHPUFFER F0201 RF 2','LT-EXIT F0201','=A01+UC101-KF00i','','','','' +'MB1081','WEICHE ABZWEIG EINFAHRT F201-F202 RF 2','SW RF2','=A01+UC101-KF00Q','','','','' +'MB1080','WEICHE ABZWEIG EINFAHRT F0202 RF 2','SW ENTER F0201','=A01+UC101-KF00Q','','','','' +'MB1083','WEICHE ABZWEIG EINFAHRT RF 2','SW ENTER RF 2','=A01+UC101-KF00Q','','','','' +'MB1123','WEICHE ABZWEIG AUSFAHRT NACHP. FLYER 3','SW EXIT RF3','=A01+UC101-KF04Q','','','','' +'MB1120','WEICHE ABZWEIG EINFAHRT FLYER 3 ','SW ENTER RF 3','=A01+UC101-KF04Q','','','','' +'BG1126','SENSOR AUSFAHRT NACHPUFFER F0302 FLYER 3','LT-EXIT F0302','=A01+UC101-KF02i','','','','' +'BG1125','SENSOR AUSFAHRT NACHPUFFER F0301 FLYER 3','LT-EXIT F0301','=A01+UC101-KF02i','','','','' +'BG1096','SENSOR SPULE IN POSITION FLYER 2 ','BOB.IN POS(RF)','=A01+UC101-KF01i','','','','' +'BG1084','SENSOR ZUG IN DOFFER FLYER 2 ','LT-TRAIN IN RF','=A01+UC101-KF00i','','','','' +'BG1095','SENSOR SPULE IN POSITION PM 2','BOB.IN POS(BS)','=A01+UC101-KF01i','','','','' +'BG1083','SENSOR ZUG IN DOFFER PM 2','LT-TRAIN IN BS','=A01+UC101-KF00i','','','','' +'MB1091','ABHEBEN ANTRIEB RF 2','LIFT OFF BS 2','=A01+UC101-KF01Q','','','','' +'MA1096','ANTRIEB FLYER 2','M-BI','=A01+UC101-KF01Q','','','','' +'SF1091','HAUPTSCHALTER EIN +UC101','I-MS ON','=A01+UC101-KF01i','HAUPTSCHALTER EIN','MAIN SWITCH ON','','' +'SF1090','MOTORSCHUTZSCHALTER HAT AUSGELÖST','I-CB OK','=A01+UC101-KF01i','MSS IN ORDNUNG','MPS OK','','' +'PF1090','LM-ÜBERSTROM +UC101','IL-YE-LED','=A01+UC101-KF01Q','LM ÜBERSTROM','IL OVERCURRENT','','' +'MB1107','WEICHE ABZWEIG EINFAHRT NACHP. RF 2','SW-BRANCH','=A01+UC101-KF02Q','','','','' +'MB1106','WEICHE ABZWEIG EINFAHRT NACHP. RF 2','SW-STRAIGHT','=A01+UC101-KF02Q','','','','' +'KF1095','IF RF 02: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC101-KF01Q','IF RF 02: START SPULENWECHSEL 2','IF RF 02: START EXCHANGE 2','','' +'DI1094','IF RF 02 : NEUE SPULE','IF-RELAIS','=A01+UC101-KF01i','IF RF 02: NEUE SPULE ','IF RF 02: NEW BOBBIN','','' +'PF1087','RUNDUMLEUCHTE STÖRUNG FLYER 2','LED-YE_FAULT','=A01+UC101-KF00Q','','','','' +'KF1094','IF RF 02: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC101-KF01Q','IF RF 02: START SPULENWECHSEL 1','IF RF 02: START EXCHANGE 1','','' +'SF1093','RESET FLYER 2','IPB-YE-NO','=A01+UC101-KF01i','RESET','RESET','RESET','' +'PF1093','RESET FLYER 2','IPB-YE-LED','=A01+UC101-KF01Q','','','','' +'SF1092','NOT HALT FLYER 2','EPB-NC','=A01+UC101-KF01i','NOT-HALT','E-STOP','E-STOP','' +'BG1121','SENSOR AUSFAHRT PUFFER F0302 FLYER 3','LT-EXIT F0302','=A01+UC101-KF02i','','','','' +'BG1120','SENSOR AUSFAHRT PUFFER F0301 FLYER 3','LT-EXIT F0301','=A01+UC101-KF02i','','','','' +'MB1147','WEICHE ABZWEIG EINFAHRT NACHP. RF 3','SW-BRANCH','=A01+UC101-KF06Q','','','','' +'MB1146','WEICHE ABZWEIG EINFAHRT NACHP. RF 3','SW-STRAIGHT','=A01+UC101-KF06Q','','','','' +'KF1135','IF RF 03: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC101-KF05Q','IF RF 03: START SPULENWECHSEL 2','IF RF 03: START EXCHANGE 2','','' +'DI1134','IF RF 03 : NEUE SPULE','IF-RELAIS','=A01+UC101-KF03i','IF RF 03: NEUE SPULE ','IF RF 03: NEW BOBBIN','','' +'KF1134','IF RF 03: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC101-KF05Q','IF RF 03: START SPULENWECHSEL 1','IF RF 03: START EXCHANGE 1','','' +'PF1127','RUNDUMLEUCHTE STÖRUNG FLYER 3','LED-YE_FAULT','=A01+UC101-KF04Q','','','','' +'SF1133','RESET FLYER 3','IPB-YE-NO','=A01+UC101-KF03i','RESET','RESET','RESET','' +'PF1133','RESET FLYER 3','IPB-YE-LED','=A01+UC101-KF05Q','','','','' +'SF1132','NOT HALT FLYER 3','EPB-NC','=A01+UC101-KF03i','NOT-HALT','E-STOP','E-STOP','' +'MB1114','ANPRESSEN NACHPUFFER F0201 FLYER 2','PRESS F0201','=A01+UC101-KF03Q','','','','' +'MB1115','ANPRESSEN NACHPUFFER F0202 FLYER 2','PRESS F0202','=A01+UC101-KF03Q','','','','' +'MA1110','ANTRIEB NACHPUFFER F0201 FLYER 2','M-BI-LE','=A01+UC101-KF03Q','','','','' +'MB1084','ANPRESSEN PUFFER F0201 FLYER 2','PRESS F0201','=A01+UC101-KF00Q','','','','' +'MB1085','ANPRESSEN PUFFER F0202 FLYER 2','PRESS F0202','=A01+UC101-KF00Q','','','','' +'MB1124','ANPRESSEN PUFFER F0301 FLYER 3','PRESS F0301','=A01+UC101-KF04Q','','','','' +'MB1125','ANPRESSEN PUFFER F0302 FLYER 3','PRESS F0302','=A01+UC101-KF04Q','','','','' +'QA1141','ANTRIEB PUFFER F0301 FLYER 3','M-BI-RI','=A01+UC101-KF06Q','','','','' +'MA1140','ANTRIEB PUFFER F0301 FLYER 3','M-BI-LE','=A01+UC101-KF06Q','','','','' +'MB1154','ANPRESSEN NACHPUFFER F0301 FLYER 3','PRESS F0301','=A01+UC101-KF07Q','','','','' +'MB1155','ANPRESSEN NACHPUFFER F0302 FLYER 3','PRESS F0302','=A01+UC101-KF07Q','','','','' +'QA1151','ANTRIEB NACHPUFFER F0302 FLYER 3','M-BI-RI','=A01+UC101-KF07Q','','','','' +'MA1150','ANTRIEB NACHPUFFER F0301 FLYER 3','M-BI-LE','=A01+UC101-KF07Q','','','','' +'MB1131','ABHEBEN ANTRIEBE FLYER 3','LIFT OFF BS 3','=A01+UC101-KF05Q','','','','' +'MA1136','ANTRIEBE FLYER 3','M-BI-LE','=A01+UC101-KF05Q','','','','' +'BG1136','SENSOR SPULE IN POSITION FLYER 3 ','BOBBIN IN POS','=A01+UC101-KF03i','','','','' +'BG1124','SENSOR ZUG IN DOFFER PM 3','LT-TRAIN IN DOF','=A01+UC101-KF02i','','','','' +'BG1135','SENSOR SPULE IN POSITION PM 3','BOBBIN IN POS','=A01+UC101-KF03i','','','','' +'BG1123','SENSOR ZUG IN DOFFER FLYER 3','LT-TRAIN IN DOF','=A01+UC101-KF02i','','','','' +'MB1003','WEICHE ABZWEIG AUSFAHRT NACHP. RF1','SW EXIT RF1','=A01+UC100-KF00Q','','','','' +'MB1000','WEICHE ABZWEIG FLYER 1','SW ENTER RF1','=A01+UC100-KF00Q','','','','' +'BG1006','SENSOR AUSFAHRT NACHPUFFER F0101 RF 1','LT-EXIT F102','=A01+UC100-KF00i','','','','' +'BG1005','SENSOR AUSFAHRT NACHPUFFER F0101 RF 1','LT-EXIT F101 ','=A01+UC100-KF00i','','','','' +'PF1007','RUNDUMLEUCHTE STÖRUNG FLYER 1','LED-YE_FAULT','=A01+UC100-KF00Q','','','','' +'MB1027','WEICHE ABZWEIG EINFAHRT NACHP. RF 1','SW-STRAIGHT','=A01+UC100-KF02Q','','','','' +'MB1026','WEICHE ABZWEIG EINFAHRT NACHP. RF 1','SW-BRANCH','=A01+UC100-KF02Q','','','','' +'QA1157','ANTRIEB HAUPTSTECKE RF 1 ','M RF1','=A01+UC101-KF07Q','','','','' +'MA1156','ANTRIEB HAUPTSTECKE RF 1 ','M RF1','=A01+UC101-KF07Q','','','','' +'MB1034','ANPRESSEN NACHPUFFER F0101 FLYER 1','PRESS F0101','=A01+UC100-KF03Q','','','','' +'MB1035','ANPRESSEN NACHPUFFER F0102 FLYER 1','PRESS F0102','=A01+UC100-KF03Q','','','','' +'QA1031','ANTRIEB NACHPUFFER F0102 FLYER 1','M-BI-RI','=A01+UC100-KF03Q','','','','' +'MA1030','ANTRIEB NACHPUFFER F0101 FLYER 1','M-BI-LE','=A01+UC100-KF03Q','','','','' +'MB1004','ANPRESSEN PUFFER F0101 FLYER 1 ','PRESS F0101','=A01+UC100-KF00Q','','','','' +'MB1005','ANPRESSEN PUFFER F0102 FLYER 1 ','PRESS F0102','=A01+UC100-KF00Q','','','','' +'QA1021','ANTRIEB PUFFER F102 FLYER 1','M-BI-RI','=A01+UC100-KF02Q','','','','' +'MA1020','ANTRIEB PUFFER F101 FLYER 1','M-BI-LE','=A01+UC100-KF02Q','','','','' +'BG1000','SENSOR AUSFAHRT PUFFER F0101 FLYER 1','LT-EXIT F0101','=A01+UC100-KF00i','','','','' +'BG1001','SENSOR AUSFAHRT PUFFER F0102 FLYER 1','LT-EXIT F0102','=A01+UC100-KF00i','','','','' +'SF1013','RESET FLYER 1','IPB-YE-NO','=A01+UC100-KF01i','RESET','RESET','RESET','' +'PF1013','RESET FLYER 1','IPB-YE-LED','=A01+UC100-KF01Q','','','','' +'SF1012','NOT HALT FLYER 1','EPB-NC','=A01+UC100-KF01i','NOT-HALT','E-STOP','E-STOP','' +'KF1015','IF RF 01: START SPULENWECHSEL 2','IF-RELAIS','=A01+UC100-KF01Q','IF RF 01: START SPULENWECHSEL 2','IF RF 01: START EXCHANGE 2','CUANDO 01: LIBERAR CAMBIOS DE BOBINAS 2','' +'DI1014','IF RF 01 : NEUE SPULE','IF-RELAIS','=A01+UC100-KF01i','IF RF 01: NEUE SPULE ','IF RF 01: NEW BOBBIN','CUANDO 01: LLAMAR NUEVA BOBINA','' +'KF1014','IF RF 01: START SPULENWECHSEL 1','IF-RELAIS','=A01+UC100-KF01Q','IF RF 01: START SPULENWECHSEL 1','IF RF 01: START EXCHANGE 1','CUANDO 01: LIBERAR CAMBIOS DE BOBINAS 1','' +'MB1011','ABHEBEN ANTRIEBE PM 1 ','LIFT OFF BS 1','=A01+UC100-KF01Q','','','','' +'BG1015','SENSOR SPULE IN POSITION PM 1','BOBBIN IN POS','=A01+UC100-KF01i','','','','' +'BG1003','SENSOR ZUG IN DOFFER PM 1','LT-TRAIN IN DOF','=A01+UC100-KF00i','','','','' +'MA1016','ANTRIEB FLYER 1 ','M-BI','=A01+UC100-KF01Q','','','','' +'BG1016','SENSOR SPULE IN POSITION RF 1','BOBBIN IN POS','=A01+UC100-KF01i','','','','' +'BG1004','SENSOR ZUG IN DOFFER FLYER 1','LT-TRAIN IN DOF','=A01+UC100-KF00i','','','','' diff --git a/Test-Skripte/EinstellungenSkriptKonvertierung.txt b/Test-Skripte/EinstellungenSkriptKonvertierung.txt new file mode 100644 index 0000000..f16a2bd --- /dev/null +++ b/Test-Skripte/EinstellungenSkriptKonvertierung.txt @@ -0,0 +1,15 @@ +Hinweise zur Einstellungsdatei: +1) Jeder Eintrag wird durch senkrechte Striche (|) geteilt. Der erste Bereich gibt die Art des Eintrags an. + Moegliche Werte sind 'StartPfad' und 'Datei'. Es sollte nur ein StartPfad angegeben sein. Sind mehrere Angegeben, + wird der erste verwendet. Es koennen beliebig viele Dateien angegeben werden. +2) Die rechte Spalte bei Dateien gibt das Konvertierungsformat fuer diese Datei an. Moeglich sind 'TIA', 'WSCAD' + und 'Simpel'. Ist ein falscher oder kein Wert angegeben, wird automatisch in 'Simpel' konvertiert. +3) Die zweite Spalte von rechts bei Dateien gibt den Zieldateinamen an. Ist darin [Ursprungsdatei] enthalten, + wird dieser Teil durch den Namen der txt-Datei ersetzt, von der die Daten konvertiert werden. +Nutzung des Konvertierers auf eigene Gefahr und ohne Haftungsuebernahme bei Schaeden! +StartPfad|R:\m.kraft\Excel Werte ändern\Realtest\Neuer Ordner +VerzeichnisWahl|EigenerPfad +ZielPfad|R:\m.kraft\Excel Werte �ndern\Realtest\Neuer Ordner +Datei|E|A|WSCAD_[Ursprungsdatei]|WSCAD +Datei|%E|%A|TIA_[Ursprungsdatei]|TIA +Datei|E|A|EA_[Ursprungsdatei]|Simpel diff --git a/Test-Skripte/EinstellungenSkriptKonvertierung2.txt b/Test-Skripte/EinstellungenSkriptKonvertierung2.txt new file mode 100644 index 0000000..7851687 --- /dev/null +++ b/Test-Skripte/EinstellungenSkriptKonvertierung2.txt @@ -0,0 +1,2 @@ +R:\m.kraft\Excel Werte ändern +x diff --git a/Test-Skripte/EinstellungenSkriptKonvertierung_m.kraft.txt b/Test-Skripte/EinstellungenSkriptKonvertierung_m.kraft.txt new file mode 100644 index 0000000..afd35eb --- /dev/null +++ b/Test-Skripte/EinstellungenSkriptKonvertierung_m.kraft.txt @@ -0,0 +1,13 @@ +Hinweise zur Einstellungsdatei: +1) Jeder Eintrag wird durch senkrechte Striche (|) geteilt. Der erste Bereich gibt die Art des Eintrags an. + Moegliche Werte sind 'StartPfad' und 'Datei'. Es sollte nur ein StartPfad angegeben sein. Sind mehrere Angegeben, + wird der erste verwendet. Es koennen beliebig viele Dateien angegeben werden. +2) Die rechte Spalte bei Dateien gibt das Konvertierungsformat fuer diese Datei an. Moeglich sind 'TIA', 'WSCAD' + und 'Simpel'. Ist ein falscher oder kein Wert angegeben, wird automatisch in 'Simpel' konvertiert. +3) Die zweite Spalte von rechts bei Dateien gibt den Zieldateinamen an. Ist darin [Ursprungsdatei] enthalten, + wird dieser Teil durch den Namen der txt-Datei ersetzt, von der die Daten konvertiert werden. +Nutzung des Konvertierers auf eigene Gefahr und ohne Haftungsuebernahme bei Schaeden! +StartPfad|R:\m.kraft\Excel Werte ändern\Realtest +VerzeichnisWahl|WieTXT +ZielPfad|R:\m.kraft\Excel Werte ändern\Test-Skripte +Datei|E|A|[Ursprungsdatei]|BMK diff --git a/Test-Skripte/Excel-Datei erstellen.ps1 b/Test-Skripte/Excel-Datei erstellen.ps1 new file mode 100644 index 0000000..d364ce8 --- /dev/null +++ b/Test-Skripte/Excel-Datei erstellen.ps1 @@ -0,0 +1,14 @@ + +$Datei = New-Object -ComObject Excel.Application +Pause +#$Mappe = $Datei.Workbooks.Add() +#$Mappe.SaveAs("Z:\Automatisierung\WSCAD\IMPORT-EXPORT_WSCAD\SKRIPT-KONVERTIERUNG\Test-Excel.docx") +#$Blatt = $Mappe.WorkSheets.item(1) +$Datei.Visible = $false + +#$Blatt.Cells.Item(1,1) = "Testtext" + +$Mappe.Save() +$Datei.Quit() + +Pause \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst1.ps1 b/Test-Skripte/GUI-Angepasst1.ps1 new file mode 100644 index 0000000..1036836 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst1.ps1 @@ -0,0 +1,268 @@ +Function Main +{ +$Laufwerke = LaufwerkeFinden + +Gui $Laufwerke + +#Write-Host "Dateityp nach Übergabe: " $Pfad.GetType() +#Write-Host "Datei ausgewählt mit dem Verzeichnis " $Pfad +} + + +Function Gui ($Laufwerke) +{ +[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.Text = "Laufwerke" +$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.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird +$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) +foreach ($Laufwerk in $Laufwerke) +{ + $ListeOrdnernamen.Items.Add($Laufwerk) +} +<#for ($i = 0; $i -lt 100; $i++) +{ + $ListeOrdnernamen.Items.Add("Wert$i") +}#> +$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) +#> + + +# 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_MouseClick({ + # Aktion bei Klick + $Auswahl = $ListeOrdnernamen.SelectedItem + Write-Host "Gewählter Ordner/ Datei: " $Auswahl + $Pfad = $PfadFeld.Text + Write-Host "Vorheriger Pfad: " $Pfad + if ($Pfad.length -gt 0) + { + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve + } + else + { + $Pfad = $Auswahl + } + Write-Host "Neuer Pfad: " $Pfad + + #Erkennen, ob *.txt-Datei gewählt wurde -> ggf. return + if ($($Auswahl -match ".txt")) + { + Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad + Write-Host "Dateityp: " $Pfad.GetType() + $Fenster.Dispose() + $Holder = NachAuswahl $Pfad + #return $Pfad[0] + } + + $PfadFeld.Text = $Pfad + $Fenster.Text = $Auswahl + $ListeOrdnernamen.Items.Clear() + Write-Host "Pfadwert vor Übergabe: " $Pfad + $Unterorder = UnterOrdnerFinden $Pfad + $TxtDateien = TxtDateienFinden $Pfad + $Optionen = Optionen $Unterorder $TxtDateien + foreach ($Option in $Optionen) + { + # Write-Host "Option: " $Option + if ($Option.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } + } +}) +$Fenster.Controls.Add($AuswählenButton) + +# 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_MouseClick({ + Write-Host "Pfad ausgabe: " $PfadFeld.Text + $Pfad = $PfadFeld.Text + if ($Pfad.Length -gt 3) + { + # Weiter mit Ordnern/Dateien + Write-Host "Ordner/ Dateien anzeigen" + $Pfad = Split-Path $Pfad + Write-Host "Neuer Pfad: " $Pfad + $PfadFeld.Text = $Pfad + $Fenster.Text = $(Split-Path $Pfad) + $ListeOrdnernamen.Items.Clear() + Write-Host "Pfadwert vor Übergabe: " $Pfad + $Unterorder = UnterOrdnerFinden $Pfad + $TxtDateien = TxtDateienFinden $Pfad + $Optionen = Optionen $Unterorder $TxtDateien + foreach ($Option in $Optionen) + { + # Write-Host "Option: " $Option + if ($Option.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } + } + } + elseif ($Pfad.Length -le 3) + { + # Weiter mit Laufwerken + Write-Host "Laufwerke anzeigen" + $Pfad = Split-Path $Pfad + Write-Host "Neuer Pfad: " $Pfad + $PfadFeld.Text = $Pfad + $Fenster.Text = "Laufwerke" + $ListeOrdnernamen.Items.Clear() + Write-Host "Pfadwert vor Übergabe: " $Pfad + $Laufwerke = LaufwerkeFinden $Pfad + foreach ($Laufwerk in $Laufwerke) + { + # Write-Host "Option: " $Option + if ($Laufwerk.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Laufwerk) + } + } + + } + else + { + # Fehler/ Nichts tun? + } +}) +$Fenster.Controls.Add($ZurückButton) + + +$Fenster.Add_Shown({$Fenster.Activate()}) +[void] $Fenster.ShowDialog() +} + +Function NachAuswahl ($Pfad) +{ +Write-Host "Name in Funktion: " $Pfad + +Exit +} + +Function UnterOrdnerFinden($Pfad) +{ +#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung +$Ordner = $(Get-Childitem $Pfad -Directory) +return $Ordner +} + +Function LaufwerkeFinden() +{ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name +$i = 0 + +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} + +return $Laufwerke +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +if ($TxtDateien.Length -gt 0) +{ + return $(Split-Path $TxtDateien -Leaf) +} +else +{ + return +} +} + +Function Optionen([System.Object[]]$UnterOrdner, $TxtDateien) +{ +#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück +$Optionen = $UnterOrdner + $TxtDateien + +return $Optionen +} + + +Main + +<# +$mailAddresses = ("sdasd@ddfsf.net","ououoizu@fdssd.com","ssdfdsfds@dsfds.org") + +function FnShowDialog { + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") + #~~< Form1 >~~~~~~~~~~~~~~~~~~~~~~~~~~ + $Form1 = New-Object System.Windows.Forms.Form + $Form1.ClientSize = "347, 86" + $Form1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 9.75, [System.Drawing.FontStyle]::Regular, [System.Drawing.GraphicsUnit]::Point, ([System.Byte](0))) + $Form1.FormBorderStyle = "FixedToolWindow" + $Form1.MaximizeBox = $false + $Form1.MinimizeBox = $false + $Form1.BackColor = "White" + #~~< Label1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + $Label1 = New-Object System.Windows.Forms.Label + $Label1.Location = "13, 13" + $Label1.Size = "217, 23" + $Label1.Text = "Bitte Mailadresse wählen:" + #~~< Button1 >~~~~~~~~~~~~~~~~~~~~~~~~~ + $Button1 = New-Object System.Windows.Forms.Button + $Button1.Location = "259, 41" + $Button1.Size = "76, 26" + $Button1.Text = "OK" + $Button1.add_MouseClick({ + $script:selectedMailAdr = $ComboBox1.SelectedItem + $Form1.dispose() + }) + #~~< ComboBox1 >~~~~~~~~~~~~~~~~~~~~~~~~~~ + $ComboBox1 = New-Object System.Windows.Forms.ComboBox + $ComboBox1.Location = "12, 40" + $ComboBox1.SelectedIndex = -1 + $ComboBox1.DropDownStyle = "DropDownList" + $ComboBox1.Size = "231, 24" + $ComboBox1.Items.AddRange($mailAddresses) + + $Form1.Controls.Add($Label1) + $Form1.Controls.Add($Button1) + $Form1.Controls.Add($ComboBox1) + [System.Windows.Forms.Application]::Run($Form1) +} + + +FnShowDialog +Write-Host $selectedMailAdr +#> \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst2.ps1 b/Test-Skripte/GUI-Angepasst2.ps1 new file mode 100644 index 0000000..fbcb09d --- /dev/null +++ b/Test-Skripte/GUI-Angepasst2.ps1 @@ -0,0 +1,1097 @@ +# Änderungsziel vs. 1: Funktion bei Klick auf "Auswählen" und "Zurück" auslagern +# Known 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 + +GUI für Fortschrittsanzeige +GuiFortschrittsAnzeige $PfadUrsprungsdatei + +# Ab hier........................................................................................................................... +Write-Host "Ausgabe nach Fortschrittsanzeige" + +$PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien +$PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien + +#$ListeErledigteAufgaben.Items.Add("Neue Dateinamenerstellen") +#$TextfeldAktuelleAufgabe.Text = "EA-Datei erstellen" + +#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 +# ......................bis hier alles in das guiFortschrittsanzeige verschieben und in die Funktionen die Updates einbauen................. + +#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 GuiFortschrittsAnzeige ($PfadUrsprungsdatei) +{ + [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") + [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") + + # Eigenschaften Fenster + $FortschrittFenster = New-Object System.Windows.Forms.Form + $FortschrittFenster.Size = New-Object System.Drawing.Size(755,270) #Breite, Höhe + $FortschrittFenster.StartPosition = "CenterScreen" + $FortschrittFenster.KeyPreview = $true # was macht das? + $FortschrittFenster.MaximumSize = $FortschrittFenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann + $FortschrittFenster.MinimumSize = $FortschrittFenster.Size + $FortschrittFenster.Text = "Fortschritt Dateikonvertierung" + + $Textfeld1 = New-Object System.Windows.Forms.Label + $Textfeld1.Location = New-Object System.Drawing.Size(10,10) + $Textfeld1.Size = New-Object System.Drawing.Size(200,20) + $Textfeld1.Text = "Aktuelle Aufgabe" + $FortschrittFenster.Controls.Add($Textfeld1) + + $Textfeld2 = New-Object System.Windows.Forms.Label + $Textfeld2.Location = New-Object System.Drawing.Size(300,10) + $Textfeld2.Size = New-Object System.Drawing.Size(430,20) + $Textfeld2.Text = "Erledigte Aufgaben" + $FortschrittFenster.Controls.Add($Textfeld2) + + $TextfeldAktuelleAufgabe = New-Object System.Windows.Forms.Label + $TextfeldAktuelleAufgabe.Location = New-Object System.Drawing.Size(10,40) + $TextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,20) + $TextfeldAktuelleAufgabe.Text = "Neue Dateinamen erstellen" + $FortschrittFenster.Controls.Add($TextfeldAktuelleAufgabe) + + $ListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox + $ListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) + $ListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) + $ListeErledigteAufgaben.Height = 150 + $ListeErledigteAufgaben.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular) + $FortschrittFenster.Controls.Add($ListeErledigteAufgaben) + + $Textfeld3 = New-Object System.Windows.Forms.Label + $Textfeld3.Location = New-Object System.Drawing.Size(10,100) + $Textfeld3.Size = New-Object System.Drawing.Size(430,20) + $Textfeld3.Text = "Gesamtfortschritt" + $FortschrittFenster.Controls.Add($Textfeld3) + + $Fortschrittsbar = New-Object System.Windows.Forms.ProgressBar + $Fortschrittsbar.Location = New-Object System.Drawing.Size(10,120) + $Fortschrittsbar.Size = New-Object System.Drawing.Size(260,30) + #$Fortschrittsbar.Name = "Fortschrittsanzeige" + $Fortschrittsbar.Value = 0 + $FortschrittFenster.Controls.Add($Fortschrittsbar) + + $Textfeld4 = New-Object System.Windows.Forms.Label + $Textfeld4.Location = New-Object System.Drawing.Size(10,170) + $Textfeld4.Size = New-Object System.Drawing.Size(120,20) + $Textfeld4.Text = "Bearbeitete Einträge:" + $FortschrittFenster.Controls.Add($Textfeld4) + + $Textfeld5 = New-Object System.Windows.Forms.Label + $Textfeld5.Location = New-Object System.Drawing.Size(10,200) + $Textfeld5.Size = New-Object System.Drawing.Size(100,20) + $Textfeld5.Text = "Gesamteinträge:" + $FortschrittFenster.Controls.Add($Textfeld5) + + $TextfeldBearbeiteteEinträge = New-Object System.Windows.Forms.Label + $TextfeldBearbeiteteEinträge.Location = New-Object System.Drawing.Size(140,170) + $TextfeldBearbeiteteEinträge.Size = New-Object System.Drawing.Size(430,20) + $TextfeldBearbeiteteEinträge.Text = "0" + $FortschrittFenster.Controls.Add($TextfeldBearbeiteteEinträge) + + $TextfeldGesamtEintraege = New-Object System.Windows.Forms.Label + $TextfeldGesamtEintraege.Location = New-Object System.Drawing.Size(140,200) + $TextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20) + $Ursprungdatei = Get-Content $PfadUrsprungsdatei + $TextfeldGesamtEintraege.Text = $($Ursprungdatei.Length) + $FortschrittFenster.Controls.Add($TextfeldGesamtEintraege) + + $FortschrittFenster.Add_Shown({$FortschrittFenster.Activate()}) + [void]$FortschrittFenster.ShowDialog() +} + +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 \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst2_Backup1.ps1 b/Test-Skripte/GUI-Angepasst2_Backup1.ps1 new file mode 100644 index 0000000..bba2136 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst2_Backup1.ps1 @@ -0,0 +1,359 @@ +# Änderungsziel vs. 1: Funktion bei Klick auf "Auswählen" und "Zurück" auslagern +# Todo: "Zurück" auslagern + +Function Main +{ + +#Ändern? Laufwerke sollten möglichst in der GUI initialisert werden +$Laufwerke = LaufwerkeFinden + +[System.String]$Pfad = Gui $Laufwerke + +Write-Host "Dateityp nach Übergabe: " $Pfad.GetType() +Write-Host "Datei ausgewählt mit dem Verzeichnis " $Pfad +} + + +Function Gui ($Laufwerke) +{ +[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.Text = "Laufwerke" +$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.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird +$PfadFeld.Add_KeyDown({ + # Reaktion bei gedrückter Taste + if ($_.KeyCode -eq "Enter") + { + $Pfad = $PfadFeld.Text + # Soll zurückgeben: $true => existiert oder ist *.txt-Datei; $false => existiert nicht + $PfadExistiert = PfadExistiert $Pfad + Write-Host "Check Pfadtyp: " $PfadExistiert + + if ($PfadExistiert) + { + Write-host "Pfad aktualisieren" + VerzeichnisAuswaehlen "" $Pfad + } + else + { + Write-Host "Else-Fall" + # Fehler-Fenster öffnen? + # Zurück zu Laufwerke + # In Funktion auslagern + $Pfad = "" + $Optionen = LaufwerkeFinden $Pfad + $PfadFeld.Text = "" + $Fenster.Text = "Laufwerke" + $ListeOrdnernamen.Items.Clear() + foreach ($Option in $Optionen) + { + if ($Option.Length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } + } + } + } +}) +$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 +foreach ($Laufwerk in $Laufwerke) +{ + $ListeOrdnernamen.Items.Add($Laufwerk) +} +$ListeOrdnernamen.Add_DoubleClick({ + Write-Host "In Liste per Doppelklick ausgewählt" + + # 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 + VerzeichnisAuswaehlen $Pfad $Auswahl +}) +$ListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + # In Funktion auslagern? + if ($_.KeyCode -eq "Enter") + { + Write-Host "Enter gedrückt" + + # 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 + VerzeichnisAuswaehlen $Pfad $Auswahl + } + elseif ($_.KeyCode -eq "Back") + { + Write-Host "Back gedrückt" + + Write-Host "Pfad ausgabe: " $PfadFeld.Text + $Pfad = $PfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck $Pfad + } + else + { + Write-Host "Gedrückte Taste: " $_.KeyCode + } +}) +$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 + VerzeichnisZurueck $Pfad +}) +$ZurückButton.Add_KeyDown({ + # In Funktion auslagern? + # Reaktion bei gedrückter Taste + if ($_.KeyCode -eq "Back") + { + Write-Host "Back gedrückt" + $Pfad = $PfadFeld.Text + + VerzeichnisZurueck $Pfad + } + +}) +$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({ + # Aktion bei Klick oder Enter + + # 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 + VerzeichnisAuswaehlen $Pfad $Auswahl +}) +$Fenster.Controls.Add($AuswählenButton) + +$Fenster.Add_Shown({$Fenster.Activate()}) +[void]$Fenster.ShowDialog() +} + +Function VerzeichnisAuswaehlen ($Pfad, $Auswahl) +{ +if ($Pfad.length -gt 0) +{ + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve +} +else +{ + $Pfad = $Auswahl +} + +#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() + NachAuswahl $Pfad + #return $Pfad +} + +# Werte in Form aktualisieren +$PfadFeld.Text = $Pfad +$Fenster.Text = $Auswahl +$ListeOrdnernamen.Items.Clear() +$Optionen = Optionen $Pfad +Write-Host "Mögliche Optionen: " $Optionen +foreach ($Option in $Optionen) +{ + # Write-Host "Option: " $Option + if ($Option.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } +} +Write-Host "Neuer Pfad: " $Pfad + +return +} + +Function NachAuswahl ($Pfad) +{ +Write-Host "Auswahl abgeschlossen, ab jetzt .txt-Datei bearbeiten" +Write-Host "Name in Funktion: " $Pfad + +#Exit # Wirft Fehler +} + +Function VerzeichnisZurueck ($Pfad) +{ + +if ($Pfad.Length -gt 3) +{ + # Weiter mit Ordnern/Dateien + Write-Host "Ordner/ Dateien anzeigen" + $Pfad = Split-Path $Pfad + Write-Host "Neuer Pfad : " $Pfad + Write-Host "Pfadwert vor Übergabe: " $Pfad + $Optionen = Optionen $Pfad +} +elseif ($Pfad.Length -le 3) +{ + # Weiter mit Laufwerken + Write-Host "Laufwerke anzeigen" + $Pfad = "" + $Optionen = LaufwerkeFinden $Pfad +} +else +{ + # Fehler/ Nichts tun? + # Ermitteln: wann tritt dieser Fall ein? +} + +# In Ausgabe schreiben +$PfadFeld.Text = $Pfad +if ($Pfad.Length -gt 3) +{ + $Fenster.Text = $(Split-Path $Pfad -Leaf) +} +else +{ + $Fenster.Text = "Laufwerke" +} +$ListeOrdnernamen.Items.Clear() +foreach ($Option in $Optionen) +{ + # Write-Host "Option: " $Option + if ($Option.Length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } +} + +return +} + +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 {$_.Free}).Name +$i = 0 + +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} + +return $Laufwerke +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +if ($TxtDateien.Length -gt 0) +{ + return $(Split-Path $TxtDateien -Leaf) +} +else +{ + return +} +} + +Function UnterOrdnerFinden($Pfad) +{ +#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung +$Ordner = $(Get-Childitem $Pfad -Directory) +return $Ordner +} + +Function Optionen($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 +} + + +Main \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst2_Backup2.ps1 b/Test-Skripte/GUI-Angepasst2_Backup2.ps1 new file mode 100644 index 0000000..727e174 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst2_Backup2.ps1 @@ -0,0 +1,387 @@ +# Änderungsziel vs. 1: Funktion bei Klick auf "Auswählen" und "Zurück" auslagern +# Todo: "Zurück" auslagern + +Function Main +{ + +#Ändern? Laufwerke sollten möglichst in der GUI initialisert werden +$Laufwerke = LaufwerkeFinden + +[System.String]$Pfad = Gui $Laufwerke + +# Write-Host "Dateityp nach Übergabe: " $Pfad.GetType() +Write-Host "Dateirückgabe in Main: " $Pfad +} + + +Function Gui ($Laufwerke) +{ +[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.Text = "Laufwerke" +$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.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird +$PfadFeld.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionPfadFeld $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 +foreach ($Laufwerk in $Laufwerke) +{ + $ListeOrdnernamen.Items.Add($Laufwerk) +} +$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 + VerzeichnisAuswaehlen $Pfad $Auswahl +}) +$ListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen $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 + VerzeichnisZurueck $Pfad +}) +$ZurückButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons $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 + VerzeichnisAuswaehlen $Pfad $Auswahl +}) +$AuswählenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons $Taste +}) +$Fenster.Controls.Add($AuswählenButton) + +$Fenster.Add_Shown({$Fenster.Activate()}) +[void]$Fenster.ShowDialog() +} + +#--------------------------------------------------------- E N D E G U I ---------------------------------------------------------------------- + +Function VerzeichnisAuswaehlen ($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() + NachAuswahl $Pfad + #return $Pfad +} + +AnzeigeAktualisieren $Pfad + +return +} + +Function NachAuswahl ($Pfad) +{ +Write-Host "Auswahl abgeschlossen, ab jetzt .txt-Datei bearbeiten" +Write-Host "Name in Funktion: " $Pfad + +#Exit # Wirft Fehler, sollte man sich aber sparen können +} + +# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles +# Für Laufwerke muss $Pfad = "" sein +Function AnzeigeAktualisieren ($Pfad) +{ +Write-Host "Übergebener Pfad: " $Pfad +# Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen +if ($Pfad.Length -ne "") +{ + # Es handelt sich um Ordner + $Optionen = Optionen $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) + } +} +return +} + +Function VerzeichnisZurueck ($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? +} +AnzeigeAktualisieren $Pfad +return +} + +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 TastenReaktionPfadFeld($Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Pfad = $PfadFeld.Text + # Write-Host "Pfad: " $Pfad + + if ($Pfad -eq "") + { + # Laufwerke aktualisieren + AnzeigeAktualisieren $Pfad + } + elseif (PfadExistiert $Pfad) + { + $PfadEnde = $(Split-Path $Pfad -Leaf) + # Write-Host "Pfadende: " $PfadEnde + if ($($PfadEnde -match ".txt")) + { + Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad + Write-Host "Dateityp: " $Pfad.GetType() + $Fenster.Dispose() + NachAuswahl $Pfad + #return $Pfad + } + else + { + AnzeigeAktualisieren $Pfad + } + } + else + { + AnzeigeAktualisieren "" + } + } + default { + # Write-Host "Gedrückte Taste: " $Taste + } +} +return +} + +Function TastenReaktionListeOrdnernamen($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 + + VerzeichnisAuswaehlen $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $PfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $Pfad + } + default { + # Write-Host "Gedrückte Taste: " $Taste + } +} +return +} + +Function TastenReaktionButtons($Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +switch ($Taste){ + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $PfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $Pfad + } + default { + # Write-Host "Gedrückte Taste: " $Taste + } +} +return +} + +Function LaufwerkeFinden() +{ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name +$i = 0 + +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} + +return $Laufwerke +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +if ($TxtDateien.Length -gt 0) +{ + return $(Split-Path $TxtDateien -Leaf) +} +else +{ + return +} +} + +Function UnterOrdnerFinden($Pfad) +{ +#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung +$Ordner = $(Get-Childitem $Pfad -Directory) +return $Ordner +} + +Function Optionen($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 +} + + +Main \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst2_FunktionierenderExplorer.ps1 b/Test-Skripte/GUI-Angepasst2_FunktionierenderExplorer.ps1 new file mode 100644 index 0000000..b308ece --- /dev/null +++ b/Test-Skripte/GUI-Angepasst2_FunktionierenderExplorer.ps1 @@ -0,0 +1,391 @@ +# Ä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 +{ + +$StartPfad = "R:\m.kraft\Excel Werte ändern" + +$Pfad = Gui $StartPfad #$Laufwerke + +# Write-Host "Dateityp nach Übergabe: " $Pfad.GetType() +Write-Host "Dateirückgabe in Main: " $Pfad +} + + +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(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 + TastenReaktionPfadFeld $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.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 + VerzeichnisAuswaehlen $Pfad $Auswahl +}) +$ListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen $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 + VerzeichnisZurueck $Pfad +}) +$ZurückButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons $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 + VerzeichnisAuswaehlen $Pfad $Auswahl +}) +$AuswählenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons $Taste +}) +$Fenster.Controls.Add($AuswählenButton) + +# Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird +$A = AnzeigeAktualisieren $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 ---------------------------------------------------------------------- + +Function VerzeichnisAuswaehlen ($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 +} + +AnzeigeAktualisieren $Pfad + +return +} + +# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles +# Für Laufwerke muss $Pfad = "" sein +Function AnzeigeAktualisieren ($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 = Optionen $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 +{ + AnzeigeAktualisieren "" +} +return +} + +Function VerzeichnisZurueck ($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? +} +AnzeigeAktualisieren $Pfad +return +} + +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 TastenReaktionPfadFeld($Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Pfad = $PfadFeld.Text + # Write-Host "Pfad: " $Pfad + + if ($Pfad -eq "") + { + # Laufwerke aktualisieren + AnzeigeAktualisieren $Pfad + } + elseif (PfadExistiert $Pfad) + { + $PfadEnde = $(Split-Path $Pfad -Leaf) + # Write-Host "Pfadende: " $PfadEnde + if ($($PfadEnde -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 richtig + $PfadFeld.Text = $Pfad + return + } + else + { + AnzeigeAktualisieren $Pfad + } + } + else + { + AnzeigeAktualisieren "" + } + } + default { + # Write-Host "Gedrückte Taste: " $Taste + } +} +return +} + +Function TastenReaktionListeOrdnernamen($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 + + VerzeichnisAuswaehlen $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $PfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $Pfad + } + default { + # Write-Host "Gedrückte Taste: " $Taste + } +} +return +} + +Function TastenReaktionButtons($Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +switch ($Taste){ + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $PfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $Pfad + } + default { + # Write-Host "Gedrückte Taste: " $Taste + } +} +return +} + +Function LaufwerkeFinden() +{ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name +$i = 0 + +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} +Write-Host "Rückgabe Laufwerke: " $Laufwerke +return $Laufwerke +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +if ($TxtDateien.Length -gt 0) +{ + return $(Split-Path $TxtDateien -Leaf) +} +else +{ + return +} +} + +Function UnterOrdnerFinden($Pfad) +{ +#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung +$Ordner = $(Get-Childitem $Pfad -Directory) +return $Ordner +} + +Function Optionen($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 +} + + +Main \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst2_Lauffaehig.ps1 b/Test-Skripte/GUI-Angepasst2_Lauffaehig.ps1 new file mode 100644 index 0000000..c0f0e32 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst2_Lauffaehig.ps1 @@ -0,0 +1,1005 @@ +# Ä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 \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst3.ps1 b/Test-Skripte/GUI-Angepasst3.ps1 new file mode 100644 index 0000000..b57ae0e --- /dev/null +++ b/Test-Skripte/GUI-Angepasst3.ps1 @@ -0,0 +1,264 @@ +# Änderungsziel vs. 2: Return in Main realisieren durch einbau von EventHandler +# Ist nicht auf Stand von 2!!!!! 2 Aktuell besser! +# https://techwizard.cloud/2014/03/11/powershell-custom-gui-input-box-for-passing-values-to-variables/ +# Todo: Alles + +Function Main +{ + +#Ändern. Laufwerke sollten möglichst in der GUI initialisert werden +$Laufwerke = LaufwerkeFinden + +[System.String]$Pfad = Gui $Laufwerke + +Write-Host "Dateityp nach Übergabe: " $Pfad.GetType() +Write-Host "Datei ausgewählt mit dem Verzeichnis " $Pfad +} + + +Function Gui ($Laufwerke) +{ +[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") +[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") +[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") + +# Eigenschaften Fenster +$Fenster = New-Object System.Windows.Forms.Form +$Fenster.Text = "Laufwerke" +$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.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird +$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 +foreach ($Laufwerk in $Laufwerke) +{ + $ListeOrdnernamen.Items.Add($Laufwerk) +} +<#for ($i = 0; $i -lt 100; $i++) +{ + $ListeOrdnernamen.Items.Add("Wert$i") +}#> +$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) +#> + + +# 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_MouseClick({ + # Aktion bei Klick + + # Variablen bestimmen zur Übergabe + $Auswahl = $ListeOrdnernamen.SelectedItem + $Pfad = $PfadFeld.Text + Write-Host "Gewählter Ordner/ Datei: " $Auswahl + Write-Host "Vorheriger Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisAktualisieren $Pfad $Auswahl + +}) +$Fenster.Controls.Add($AuswählenButton) + +# 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_MouseClick({ + Write-Host "Pfad ausgabe: " $PfadFeld.Text + $Pfad = $PfadFeld.Text + + if ($Pfad.Length -gt 3) + { + # Weiter mit Ordnern/Dateien + Write-Host "Ordner/ Dateien anzeigen" + $Pfad = Split-Path $Pfad + Write-Host "Neuer Pfad: " $Pfad + $PfadFeld.Text = $Pfad + $Fenster.Text = $(Split-Path $Pfad) + $ListeOrdnernamen.Items.Clear() + Write-Host "Pfadwert vor Übergabe: " $Pfad + $Optionen = Optionen $Pfad + foreach ($Option in $Optionen) + { + # Write-Host "Option: " $Option + if ($Option.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } + } + } + elseif ($Pfad.Length -le 3) + { + # Weiter mit Laufwerken + Write-Host "Laufwerke anzeigen" + $Pfad = Split-Path $Pfad + Write-Host "Neuer Pfad: " $Pfad + $PfadFeld.Text = $Pfad + $Fenster.Text = "Laufwerke" + $ListeOrdnernamen.Items.Clear() + Write-Host "Pfadwert vor Übergabe: " $Pfad + $Laufwerke = LaufwerkeFinden $Pfad + foreach ($Laufwerk in $Laufwerke) + { + # Write-Host "Option: " $Option + if ($Laufwerk.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Laufwerk) + } + } + + } + else + { + # Fehler/ Nichts tun? + } +}) +$Fenster.Controls.Add($ZurückButton) + + +$Fenster.Add_Shown({$Fenster.Activate()}) +[void]$Fenster.ShowDialog() + +$eventHandler = [System.EventHandler]{ + $PfadFeld.Text + $ListeOrdnernamen.SelectedItem + $Fenster.Close() +} + +# TestButton +$TestButton = New-Object System.Windows.Forms.Button +$TestButton.Location = New-Object System.Drawing.Size(355,500) +$TestButton.Size = New-Object System.Drawing.Size(100,30) +$TestButton.Text = "Test" +$TestButton.Add_Click($eventHandler) +$Fenster.Controls.Add($TestButton) + +Write-Host "Ausgabe vor Ende Gui-Funktion, Pfad: " $Pfad +return $Pfad +} + +Function VerzeichnisAktualisieren ($Pfad, $Auswahl) +{ +if ($Pfad.length -gt 0) +{ + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve +} +else +{ + $Pfad = $Auswahl +} + +#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() + #NachAuswahl $Pfad + return $Pfad +} + +# Werte in Form aktualisieren +$PfadFeld.Text = $Pfad +$Fenster.Text = $Auswahl +$ListeOrdnernamen.Items.Clear() +$Optionen = Optionen $Pfad +Write-Host "Mögliche Optionen: " $Optionen +foreach ($Option in $Optionen) +{ + # Write-Host "Option: " $Option + if ($Option.length -gt 0) + { + $ListeOrdnernamen.Items.Add($Option) + } +} +Write-Host "Neuer Pfad: " $Pfad + +return +} + +Function NachAuswahl ($Pfad) +{ +Write-Host "Auswahl abgeschlossen, ab jetzt .txt-Datei bearbeiten" +Write-Host "Name in Funktion: " $Pfad + +Exit +} + +Function UnterOrdnerFinden($Pfad) +{ +#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung +$Ordner = $(Get-Childitem $Pfad -Directory) +return $Ordner +} + +Function LaufwerkeFinden() +{ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name +$i = 0 + +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} + +return $Laufwerke +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +if ($TxtDateien.Length -gt 0) +{ + return $(Split-Path $TxtDateien -Leaf) +} +else +{ + return +} +} + +Function Optionen($Pfad) +{ +# Unterordner und .txt-Dateien finden +$UnterOrdner = UnterOrdnerFinden $Pfad +$TxtDateien = TxtDateienFinden $Pfad +#Write-Host "Gefundenen Unterordner: " $Unterorder +#Write-Host "Gefundenen TxtDateien: " $TxtDateien + +#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück +$Optionen = $UnterOrdner + $TxtDateien +#Write-Host "Optionen vor Übergabe: " $Optionen + +return $Optionen +} + + +Main \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst4.ps1 b/Test-Skripte/GUI-Angepasst4.ps1 new file mode 100644 index 0000000..33965b4 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst4.ps1 @@ -0,0 +1,1090 @@ +Function Main +{ + Write-Host "Programmstart" + + $StartPfad = "R:\m.kraft\Excel Werte ändern" + + 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, 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 = "Dateikonvertierer txt zu xlsx" + + # 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 gedrückter 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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "txt" $Pfad $Auswahl + }) + $TXTListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen "txt" $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text + $Pfad = $TXTPfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck "txt" $Pfad + }) + $TXTZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad= $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "txt" $Pfad $Auswahl + }) + $TXTAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons "txt" $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton) + + $A = AnzeigeAktualisieren "txt" $StartPfad # Ohne dem Aufruf kann kein Startverzeichnis übergeben werden. Wird der Aufruf keiner Variable zugewiesen verursacht dies Fehler bei der Rückgabe. + + #$TXTDatei = $TXTPfadFeld.Text + + # 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 gedrückter 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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "ver" $Pfad $Auswahl + }) + $VERListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen "ver" $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $VERPfadFeld.Text + $Pfad = $VERPfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck "ver" $Pfad + }) + $VERZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + if ($($VERListeOrdnernamen.Items[0] -eq "")) + { + VERAuswahlBestaetigt $Pfad $Auswahl + } + else + { + # Pfad aktualisieren + VerzeichnisAuswaehlen "ver" $Pfad $Auswahl + } + }) + $VERAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons "ver" $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton) + + # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird + #$A = AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + + #$ZielVerzeichnis = $VERPfadFeld.Text + + # 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(200,20) + $FATextfeld1.Text = "Aktuelle Aufgabe" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1) + + $FATextfeld2 = New-Object System.Windows.Forms.Label + $FATextfeld2.Location = New-Object System.Drawing.Size(300,10) + $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(10,40) + $FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60) + $FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe) + + $FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox + $FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) + $FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) + $FAListeErledigteAufgaben.Height = 150 + $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,100) + $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,120) + $FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30) + #$FAFortschrittsbar.Name = "Fortschrittsanzeige" + $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,170) + $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,200) + $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,170) + $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,200) + $FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20) + $FATextfeldGesamtEintraege.Text = $($Ursprungdatei.Length) + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege) + + # Tab: Ausgabe doppelte Ein- und Ausgänge 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) + + + $Fenster.Add_Shown({$Fenster.Activate()}) + [void]$Fenster.ShowDialog() + + return +} + +#------------------- Funktion nur für das txt-GUI -------------------------- + +Function TXTReaktionReturn ($Pfad) +{ + if (PfadExistiert $Pfad) + { + # Gültiger Pfad oder .txt-Datei + $PfadEnde = $(Split-Path $Pfad -Leaf) + if ($($PfadEnde -match ".txt")) + { + #$Fenster.Dispose() + 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 ungültiger Pfad + AnzeigeAktualisieren "txt" "" + } + return +} + +#------------------- Funktion nur für das VerzeichnisWaehlen-GUI -------------------------- + + +# Führt $Pfad und $Auswahl zusammen und überprüft 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 +} +} + + +#------------------- Funktionen zum wechseln der Tabs -------------------------- + +Function ZuVERSpringen +{ + AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + AufgabenAktualisieren "Zielverzeichnis auswaehlen" + Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text + $TabBasis.SelectedIndex = 1 +} + +Function ZuFASpringen +{ + # Falls Einstellungen eingefügt werden: in dieser Funktion viel Todo + + AufgabenAktualisieren "Zieldateinamen erstellen" + Write-Host "Gewaehltes Verzeichnis: " $VERPfadFeld.Text + $TabBasis.SelectedIndex = 2 + + $PfadUrsprungsdatei = $TXTPfadFeld.Text + $PfadZielDateien = $VERPfadFeld.Text + $PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien + $PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien + + AufgabenAktualisieren "Neue Excel-Dateien erstellen" + ExcelDateiErstellen $PfadDateiEA + ExcelDateiErstellen $PfadDateiDIDQ + + AufgabenAktualisieren "Excel-Dateien mit Inhalten befuellen und Duplikate finden" + $AlleGleichenEA = ExcelDateiBeschreibenStandard $PfadUrsprungsdatei "E" "A" $PfadDateiEA + $AlleGleichenDIDQ = ExcelDateiBeschreibenSpezial $PfadUrsprungsdatei "%I" "%Q" $PfadDateiDIDQ + #Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA + $GleicheEingaenge = $AlleGleichenEA[0] + $GleicheAusgaenge = $AlleGleichenEA[1] + $Fehler = $AlleGleichenEA[2] + + Write-Host "Gleiche Eingaenge: " $GleicheEingaenge + Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge + Write-Host "Fehler: " $Fehler + + AufgabenAktualisieren "Ausgabe Duplikate" + 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 +} + +#------------------- Funktionen für alle GUIs -------------------------- + + +# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles +# Um die Laufwerke anzuzeigen, muss der $Pfad = "" sein +Function AnzeigeAktualisieren ($AuswahlTyp, $Pfad) +{ +# Write-Host "Übergebener Pfad: " $Pfad + +# Sicherstellen, dass es das Verzeichnis gibt +if (PfadExistiert $Pfad) +{ + Write-Host "Ordner anzeigen" + $Optionen = Optionen $AuswahlTyp $Pfad +} +elseif ($Pfad.Length -eq 0) { + Write-Host "Laufwerke anzeigen" + $Optionen = LaufwerkeFinden + $Pfad = "" +} +else +{ + AnzeigeAktualisieren "" + 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 Länge 0 hat, wurde ein Laufwerk gewählt + $Pfad = $Auswahl +} +else { + #Fehlerfall/ ungültiger Pfad: zurück zu Laufwerken navigieren + $Pfad = "" +} + +# Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen +if ($($($Auswahl -match ".txt") -and $($AuswahlTyp -eq "txt"))) +{ + # Für den Gesamtfortschritt Anzahl Dateien auslesen + $Datei = Get-Content $Pfad + $FATextfeldGesamtEintraege.Text = 2 * $($Datei.Length) + + # Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad + # Write-Host "Dateityp: " $Pfad.GetType() + 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 + # 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 zurueck" + # Fehler/ Nichts tun? + # Ermitteln: wann tritt dieser Fall ein? + $Pfad = "" +} +AnzeigeAktualisieren $AuswahlTyp $Pfad +return +} + +Function TastenReaktionPfadFeld($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + TXTReaktionReturn $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Return" { + $Pfad = $VERPfadFeld.Text + + AnzeigeAktualisieren "ver" $Pfad + } + # Entfernt, da man sonst im PfadFeld nicht groß schreiben kann! + <#"ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + + ReaktionShiftKey $Pfad $Auswahl + }#> + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +return +} + +Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt"){ + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Auswahl: " $Auswahl + # Write-Host "Pfad: " $Pfad + + VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +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 { + # Write-Hoste "Gedrückte Taste: " $Taste + } + } +} + +return +} + +Function TastenReaktionButtons($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Back" { + $Pfad = $VERPfadFeld.Text + VerzeichnisZurueck $AuswahlTyp $Pfad + } + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + ReaktionShiftKey $Pfad $Auswahl + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +return +} + +Function Optionen($AuswahlTyp, $Pfad) +{ +# Unterordner und .txt-Dateien finden +# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner, die mit "_" beginnen, nicht gefunden werden können +[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad + +if ($AuswahlTyp -eq "txt") { + $TxtDateien = TxtDateienFinden $Pfad + #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück + $Optionen = $UnterOrdner + $TxtDateien +} +elseif ($AuswahlTyp -eq "ver") { + #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück + $Optionen = $UnterOrdner +} +return $Optionen +} + +Function PfadExistiert ($Pfad) +{ +# Um Abzufangen, dass Test-Path mit leerem Wert durchlaufen wird. Leere Verzeichnisse gelten als ungültig. +if ($Pfad.Length -eq 0) { + return $false +} +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) +{ +$UnterOrdner = $(Get-ChildItem $Pfad -Directory) + +if ($($UnterOrdner.Length -gt 0)) +{ + $Ordner = $(Split-Path $UnterOrdner -Leaf) +} +else { + $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 + { + 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. höher 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 +} +#--------------------------------------- Ende Funktionen für GUI ------------------------------- + +Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDatei) +{ + $BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf + $BasisNameZielDateiLaenge = $BasisNameZielDatei.Length + $BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4)) + $GesamtPfadZielDatei = $PfadZielDatei + "\" + $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 ExcelDateiBeschreibenStandard ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 1 + $Eingaenge = @() + $ZuEingang = @("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 + + 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 + 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 + 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++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +Function ExcelDateiBeschreibenSpezial ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 2 + $Eingaenge = @() + $ZuEingang = @("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 = @() + + $Blatt.Cells.Item(1,1) = "Name" + $Blatt.Cells.Item(1,2) = "Path" + $Blatt.Cells.Item(1,3) = "Data Type" + $Blatt.Cells.Item(1,4) = "Logical Address" + $Blatt.Cells.Item(1,5) = "Comment" + $Blatt.Cells.Item(1,6) = "Hmi Visible" + $Blatt.Cells.Item(1,7) = "Hmi Accessible" + $Blatt.Cells.Item(1,8) = "Hmi Writeable" + $Blatt.Cells.Item(1,9) = "Typeobject ID" + $Blatt.Cells.Item(1,10) = "Version ID" + + $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 -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 + 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 + Zeile = $i + }) + } + else + { + Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Zeile = $i + }) + } + + #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar + $Blatt.Cells.Item($i,1) = $Kommentar #Name + $Blatt.Cells.Item($i,2) = "Standard-Variablentabelle" #Path + $Blatt.Cells.Item($i,3) = "Bool" #Data Type + $Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address + #$Blatt.Cells.Item($i,5) = "" #Comment + $Blatt.Cells.Item($i,6) = "'True" #Hmi Visible + $Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible + $Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable + #$Blatt.Cells.Item($i,9) = "" #Typeobject ID + #$Blatt.Cells.Item($i,10) = "" #Version ID + + + $i++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + 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 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 \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst4_Backup1.ps1 b/Test-Skripte/GUI-Angepasst4_Backup1.ps1 new file mode 100644 index 0000000..c7f9480 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst4_Backup1.ps1 @@ -0,0 +1,1270 @@ +Function Main +{ + Write-Host "Programmstart" + + $StartPfad = "R:\m.kraft\Excel Werte ändern" + + GUI $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 + + GUI für Fortschrittsanzeige + GuiFortschrittsAnzeige $PfadUrsprungsdatei + + #Todo: Nur öffnen, wenn es weder gleiche Eingänge, noch gleiche Ausgänge gibt? + GuiGleicheAnzeigen $GleicheEingaenge $GleicheAusgaenge#> +} + + + +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, 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 = "Dateikonvertierer txt zu xlsx" + + $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) + + $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 gedrückter Taste + $Taste = $_.KeyCode + TXTTastenReaktionPfadFeld $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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + TXTVerzeichnisAuswaehlen $Pfad $Auswahl + }) + $TXTListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TXTTastenReaktionListeOrdnernamen $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text + $Pfad = $TXTPfadFeld.Text + + #Pfad aktualisieren + TXTVerzeichnisZurueck $Pfad + }) + $TXTZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TXTTastenReaktionButtons $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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren + <#if ($($Auswahl.length -eq 0)) + { + $Auswahl = $TXTListeOrdnernamen.Items[0] + }#> + $Pfad= $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + TXTVerzeichnisAuswaehlen $Pfad $Auswahl + }) + $TXTAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TXTTastenReaktionButtons $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton) + + # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird + $A = TXTAnzeigeAktualisieren $StartPfad + + $TXTDatei = $TXTPfadFeld.Text + # return $Rueckgabe + #$TabBasis.SelectedIndex = 1 + + + $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 gedrückter Taste + $Taste = $_.KeyCode + VERTastenReaktionPfadFeld $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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + # Pfad aktualisieren + VERVerzeichnisAuswaehlen $Pfad $Auswahl + }) + $VERListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + VERTastenReaktionListeOrdnernamen $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $VERPfadFeld.Text + $Pfad = $VERPfadFeld.Text + + #Pfad aktualisieren + VERVerzeichnisZurueck $Pfad + }) + $VERZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + VERTastenReaktionButtons $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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren + <#if ($($Auswahl.length -eq 0)) + { + $Auswahl = $VERListeOrdnernamen.Items[0] + }#> + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + if ($($VERListeOrdnernamen.Items[0] -eq "")) + { + VERAuswahlBestaetigt $Pfad $Auswahl + } + else + { + # Pfad aktualisieren + VERVerzeichnisAuswaehlen $Pfad $Auswahl + } + }) + $VERAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + VERTastenReaktionButtons $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 + # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren + <#if ($($Auswahl.length -eq 0)) + { + $Auswahl = $VERListeOrdnernamen.Items[0] + }#> + $Pfad = $VERPfadFeld.Text + + VERAuswahlBestaetigt $Pfad $Auswahl + }) + $VERBestaetigenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + VERTastenReaktionButtons $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton) + + # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird + $A = VERAnzeigeAktualisieren $TXTPfadFeld.Text + + $ZielVerzeichnis = $VERPfadFeld.Text + #return $Rueckgabe2 + #$TabBasis.SelectedIndex = 2 + + + $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(200,20) + $FATextfeld1.Text = "Aktuelle Aufgabe" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1) + + $FATextfeld2 = New-Object System.Windows.Forms.Label + $FATextfeld2.Location = New-Object System.Drawing.Size(300,10) + $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(10,40) + $FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60) + $FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe) + + $FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox + $FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) + $FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) + $FAListeErledigteAufgaben.Height = 150 + $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,100) + $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,120) + $FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30) + #$FAFortschrittsbar.Name = "Fortschrittsanzeige" + $FAFortschrittsbar.Value = 0 + $TabSeiteFortschrittsanzeige.Controls.Add($FAFortschrittsbar) + + $FATextfeldRealwertFortschrittsbar = New-Object System.Windows.Forms.Label # Stimmt nicht, wird verwendet, aber VSC erkennt das nicht + + $FATextfeld4 = New-Object System.Windows.Forms.Label + $FATextfeld4.Location = New-Object System.Drawing.Size(10,170) + $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,200) + $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,170) + $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,200) + $FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20) + <#if (PfadExistiert $TXTPfadFeld.Text) + { + $Ursprungdatei = Get-Content $TXTPfadFeld.Text + }#> + $FATextfeldGesamtEintraege.Text = $($Ursprungdatei.Length) + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege) + + # Todo: Von hier aus Funktionsaufruf zum erstellen der xlsx-Dateien, konvertieren, ... + # $GleicheEingaenge und $GleicheAusgaenge muss am Ende festgelegt sein + if ($FAFortschrittsbar.Value -eq 100) + { + ZuDPSpringen + } + + + $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) + + + $Fenster.Add_Shown({$Fenster.Activate()}) + [void]$Fenster.ShowDialog() + + return +} + +#------------------- 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(?) + } + $TXTPfadFeld.Text = $Pfad + $TXTListeOrdnernamen.Items.Clear() + foreach ($Option in $Optionen) + { + if ($Option.Length -gt 0) + { + $TXTListeOrdnernamen.Items.Add($Option) + } + } +} +else +{ + TXTAnzeigeAktualisieren "" +} +return +} + +Function TXTVerzeichnisAuswaehlen ($Pfad, $Auswahl) +{ +if ($Pfad.length -gt 0) +{ + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve +} +else +{ + #Wenn der Pfad die Länge 0 hat, wurde ein Laufwerk gewählt + $Pfad = $Auswahl +} + +#Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen +<#if ($Auswahl.length -eq 0) +{ + $Auswahl = $TXTListeOrdnernamen.Items[0] +}#> + +# Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen +if ($($Auswahl -match ".txt")) +{ + # Für den Gesamtfortschritt Anzahl Dateien auslesen + $Datei = Get-Content $Pfad + $FATextfeldGesamtEintraege.Text = 2 * $($Datei.Length) + + # Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad + # Write-Host "Dateityp: " $Pfad.GetType() + ZuVERSpringen + # Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht + $TXTPfadFeld.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 zurueck" + # 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 = $TXTPfadFeld.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 = $TXTListeOrdnernamen.SelectedItem + <#if ($($Auswahl.Length -eq 0)) + { + $Auswahl = $TXTListeOrdnernamen.Items[0] + }#> + $Pfad = $TXTPfadFeld.Text + # Write-Host "Auswahl: " $Auswahl + # Write-Host "Pfad: " $Pfad + + TXTVerzeichnisAuswaehlen $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.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 = $TXTPfadFeld.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() + ZuVERSpringen + # Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht richtig + $TXTPfadFeld.Text = $Pfad + return + } + else + { + TXTAnzeigeAktualisieren $Pfad + } + } + else + { + # Laufwerke aktualisieren oder ungültiger Pfad + TXTAnzeigeAktualisieren "" + } + return +} + + +#------------------- 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(?) + } + $VERPfadFeld.Text = $Pfad + $VERListeOrdnernamen.Items.Clear() + foreach ($Option in $Optionen) + { + if ($Option.Length -gt 0) + { + $VERListeOrdnernamen.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 = $VERListeOrdnernamen.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 zurueck" + # 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 = $VERPfadFeld.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 = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren + <#if ($($Auswahl.length -eq 0)) + { + $Auswahl = $VERListeOrdnernamen.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 = $VERListeOrdnernamen.SelectedItem + <#if ($($Auswahl.Length -eq 0)) + { + $Auswahl = $VERListeOrdnernamen.Items[0] + }#> + $Pfad = $VERPfadFeld.Text + # Write-Host "Auswahl: " $Auswahl + # Write-Host "Pfad: " $Pfad + + VERVerzeichnisAuswaehlen $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $VERPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VERVerzeichnisZurueck $Pfad + } + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren + <#if ($($Auswahl.length -eq 0)) + { + $Auswahl = $VERListeOrdnernamen.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 = $VERPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VERVerzeichnisZurueck $Pfad + } + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren + <#if ($($Auswahl.length -eq 0)) + { + $Auswahl = $VERListeOrdnernamen.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() + ZuFASpringen + $VERPfadfeld.Text = $Pfad + return +} +} + +#------------------- 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 +} + +Function ZuVERSpringen +{ + VERAnzeigeAktualisieren $TXTPfadFeld.Text + AufgabenAktualisieren "Zielverzeichnis auswaehlen" + Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text + $TabBasis.SelectedIndex = 1 +} + +Function ZuFASpringen +{ + AufgabenAktualisieren "Zieldateinamen erstellen" + Write-Host "Gewaehltes Verzeichnis: " $VERPfadFeld.Text + $TabBasis.SelectedIndex = 2 + + #Hier Logische Berechnungen einfügen + $PfadUrsprungsdatei = $TXTPfadFeld.Text + $PfadZielDateien = $VERPfadFeld.Text + $PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien + $PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien + + AufgabenAktualisieren "Neue Excel-Dateien erstellen" + + ExcelDateiErstellen $PfadDateiEA + ExcelDateiErstellen $PfadDateiDIDQ + + AufgabenAktualisieren "Excel-Dateien mit Inhalten befuellen und Duplikate finden" + + $AlleGleichenEA = ExcelDateiBeschreibenStandard $PfadUrsprungsdatei "E" "A" $PfadDateiEA + $AlleGleichenDIDQ = ExcelDateiBeschreibenSpezial $PfadUrsprungsdatei "%I" "%Q" $PfadDateiDIDQ + #Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA + $GleicheEingaenge = $AlleGleichenEA[0] + $GleicheAusgaenge = $AlleGleichenEA[1] + $Fehler = $AlleGleichenEA[2] + + Write-Host "Gleiche Eingaenge: " $GleicheEingaenge + Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge + Write-Host "Fehler: " $Fehler + + AufgabenAktualisieren "Ausgabe Duplikate" + + 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 +} + +Function AufgabenAktualisieren ($Aufgabe) +{ + $FAListeErledigteAufgaben.Items.Add($FATextfeldAktuelleAufgabe.Text) + $FATextfeldAktuelleAufgabe.Text = $Aufgabe +} + +Function DateiBeschreibenAktualisieren +{ + $AnteilJeBeschriftung = 100 / $($FATextfeldGesamtEintraege.Text) + [System.double] $FATextfeldRealwertFortschrittsbar.Text += $AnteilJeBeschriftung + + #Known issue: Die Fortschrittsbar springt immer wieder kurzteitig auf 100% + #Da $FAFortschrittsbar.Value anscheinend ein int ist, ist der letzte Wert i. d. R. höher als 100 -> Fehler, der hiermit umgangen wird + if ( $($FATextfeldRealwertFortschrittsbar.Text -lt 100) ) + { + $FAFortschrittsbar.Value = 100 + } + else + { + $FAFortschrittsbar.Value = $FATextfeldRealwertFortschrittsbar.Text + } + + [System.Int64] $BearbeiteteEintraege = $FATextfeldBearbeiteteEintraege.Text + $BearbeiteteEintraege++ + $FATextfeldBearbeiteteEintraege.Text = $BearbeiteteEintraege +} +#--------------------------------------- Ende Funktionen für GUI ------------------------------- + +Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDatei) +{ + $BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf + $BasisNameZielDateiLaenge = $BasisNameZielDatei.Length + $BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4)) + $GesamtPfadZielDatei = $PfadZielDatei + "\" + $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 ExcelDateiBeschreibenStandard ($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++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheWandler1 = GleicheFinden $Wandler1 + $GleicheWandler2 = GleicheFinden $Wandler2 + Write-Host "Gleiche fuer " $Umwandler1 ": " $GleicheWandler1 + Write-Host "Gleiche fuer " $Umwandler2 ": " $GleicheWandler2 + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheWandler1, $GleicheWandler2, $Fehler +} + +Function ExcelDateiBeschreibenSpezial ($PfadUrsprungsdatei, $Umwandler1, $Umwandler2, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 2 + $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 = @() + + $Blatt.Cells.Item(1,1) = "Name" + $Blatt.Cells.Item(1,2) = "Path" + $Blatt.Cells.Item(1,3) = "Data Type" + $Blatt.Cells.Item(1,4) = "Logical Address" + $Blatt.Cells.Item(1,5) = "Comment" + $Blatt.Cells.Item(1,6) = "Hmi Visible" + $Blatt.Cells.Item(1,7) = "Hmi Accessible" + $Blatt.Cells.Item(1,8) = "Hmi Writeable" + $Blatt.Cells.Item(1,9) = "Typeobject ID" + $Blatt.Cells.Item(1,10) = "Version ID" + + $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 + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Zeile = $i + }) + } + + #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar + $Blatt.Cells.Item($i,1) = $Kommentar #Name + $Blatt.Cells.Item($i,2) = "Standard-Variablentabelle" #Path + $Blatt.Cells.Item($i,3) = "Bool" #Data Type + $Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address + #$Blatt.Cells.Item($i,5) = "" #Comment + $Blatt.Cells.Item($i,6) = "'True" #Hmi Visible + $Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible + $Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable + #$Blatt.Cells.Item($i,9) = "" #Typeobject ID + #$Blatt.Cells.Item($i,10) = "" #Version ID + + + $i++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheWandler1 = GleicheFinden $Wandler1 + $GleicheWandler2 = GleicheFinden $Wandler2 + Write-Host "Gleiche fuer " $Umwandler1 ": " $GleicheWandler1 + Write-Host "Gleiche fuer " $Umwandler2 ": " $GleicheWandler2 + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheWandler1, $GleicheWandler2, $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 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 \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst5 - Backup1.ps1 b/Test-Skripte/GUI-Angepasst5 - Backup1.ps1 new file mode 100644 index 0000000..2986caf --- /dev/null +++ b/Test-Skripte/GUI-Angepasst5 - Backup1.ps1 @@ -0,0 +1,1515 @@ +Function Main +{ + Write-Host "Programmstart" + + # Überprüfen, ob Einstellungsdatei vorhanden, ggf. erstellen + $AktuellesVerzeichnis = Get-Location + $PfadEinstellungsDatei = $("$AktuellesVerzeichnis\" + "EinstellungenSkriptKonvertierung.txt") + #Write-Host "AktuellesVerzeichnis: " $AktuellesVerzeichnis + #Write-Host "Einstellungsdatei: " $PfadEinstellungsDatei + + if (Test-Path $PfadEinstellungsDatei) { + #Es gibt eine Datei mit den Einstellungen -> auslesen + #Todo: Checken, ob Inhalte plausibel sind -> ggf. neue mit Standardwerten erstellen! + $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei + Write-Host "Einstellungsinhalte: " $EinstellungsInhalte + + $StartPfad = $EinstellungsInhalte[0] + 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] + }) + } + } + #Write-Host "Zieldateien: " $ZielDateien + } + else { + #Es gibt keine Datei mit den Einstellungen -> erstellen + #Todo: Umbauen: Eintraege via EinstellungsDateiAendern hinzufuegen!!! + + # Mögliches Problem mit der Funktion "StartVerzeichnisAendern". Überprüfen! + + New-Item $PfadEinstellungsDatei -ItemType File + + $StartPfad = $AktuellesVerzeichnis + $ZielDateien = @([PSCustomObject]@{ + PrefixEingang = "E" + PrefixAusgang = "A" + DateiName = "EA_[Ursprungsdatei]" + WandlungsTyp = "Simpel" + }) + + $ZielDateien += @([PSCustomObject]@{ + PrefixEingang = "%I" + PrefixAusgang = "%Q" + DateiName = "DIDQ_[Ursprungsdatei]" + WandlungsTyp = "TIA" + }) + + Add-Content $PfadEinstellungsDatei $($StartPfad) + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDateien[0].PrefixEingang + "|" + $ZielDateien[0].PrefixAusgang + "|" + $ZielDateien[0].DateiName + "|" + $ZielDateien[0].WandlungsTyp) + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDateien[1].PrefixEingang + "|" + $ZielDateien[1].PrefixAusgang + "|" + $ZielDateien[1].DateiName + "|" + $ZielDateien[1].WandlungsTyp) + } + + GUI $StartPfad $ZielDateien + +} + + + +Function GUI ($StartPfad, $ZielDateien) +{ + [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, 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 = "Dateikonvertierer txt zu xlsx" + + # 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 gedrückter 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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "txt" $Pfad $Auswahl + }) + $TXTListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen "txt" $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text + $Pfad = $TXTPfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck "txt" $Pfad + }) + $TXTZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad= $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "txt" $Pfad $Auswahl + }) + $TXTAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons "txt" $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton) + + $A = AnzeigeAktualisieren "txt" $StartPfad # Ohne dem Aufruf kann kein Startverzeichnis übergeben werden. Wird der Aufruf keiner Variable zugewiesen verursacht dies Fehler bei der Rückgabe. + + #$TXTDatei = $TXTPfadFeld.Text + + # 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 gedrückter 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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "ver" $Pfad $Auswahl + }) + $VERListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen "ver" $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $VERPfadFeld.Text + $Pfad = $VERPfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck "ver" $Pfad + }) + $VERZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + if ($($VERListeOrdnernamen.Items[0] -eq "")) + { + VERAuswahlBestaetigt $Pfad $Auswahl + } + else + { + # Pfad aktualisieren + VerzeichnisAuswaehlen "ver" $Pfad $Auswahl + } + }) + $VERAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons "ver" $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton) + + # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird + #$A = AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + + #$ZielVerzeichnis = $VERPfadFeld.Text + + # 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(200,20) + $FATextfeld1.Text = "Aktuelle Aufgabe" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1) + + $FATextfeld2 = New-Object System.Windows.Forms.Label + $FATextfeld2.Location = New-Object System.Drawing.Size(300,10) + $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(10,40) + $FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60) + $FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe) + + $FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox + $FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) + $FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) + $FAListeErledigteAufgaben.Height = 150 + $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,100) + $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,120) + $FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30) + #$FAFortschrittsbar.Name = "Fortschrittsanzeige" + $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,170) + $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,200) + $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,170) + $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,200) + $FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20) + $FATextfeldGesamtEintraege.Text = $($Ursprungdatei.Length) + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege) + + # Tab: Ausgabe doppelte Ein- und Ausgänge 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 = 80 #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(710,20) + $ESTextfeld1.Text = "Startverzeichnis Navigation: $StartPfad" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld1) + + $ESAendernButton = New-Object System.Windows.Forms.Button + $ESAendernButton.Location = New-Object System.Drawing.Size(730,10) + $ESAendernButton.Size = New-Object System.Drawing.Size(150,30) + $ESAendernButton.Text = "Aendern" + $ESAendernButton.Add_Click({ + StartVerzeichnisAendern + }) + $TabSeiteEigenschaften.Controls.Add($ESAendernButton) + +#------------------- Tabelle mit ZielDateien + + $ESTextfeld2 = New-Object System.Windows.Forms.Label + $ESTextfeld2.Location = New-Object System.Drawing.Size($BasisBreite1,50) + $ESTextfeld2.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeld2.Text = "Zieldateien:" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld2) + + $ESTextfeld3 = New-Object System.Windows.Forms.Label + $ESTextfeld3.Location = New-Object System.Drawing.Size(($BasisBreite1+30),$BasisHoehe1) + $ESTextfeld3.Size = New-Object System.Drawing.Size(80,20) + $ESTextfeld3.Text = "Prefix für" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld3) + + $ESTextfeld4 = New-Object System.Windows.Forms.Label + $ESTextfeld4.Location = New-Object System.Drawing.Size($BasisBreite1,$BasisHoehe2) + $ESTextfeld4.Size = New-Object System.Drawing.Size(50,20) + $ESTextfeld4.Text = "Eingang" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld4) + + $ESTextfeld5 = New-Object System.Windows.Forms.Label + $ESTextfeld5.Location = New-Object System.Drawing.Size(($BasisBreite2-5),$BasisHoehe2) + $ESTextfeld5.Size = New-Object System.Drawing.Size(55,20) + $ESTextfeld5.Text = "Ausgang" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld5) + + $ESTextfeld6 = New-Object System.Windows.Forms.Label + $ESTextfeld6.Location = New-Object System.Drawing.Size($BasisBreite3,$BasisHoehe1) + $ESTextfeld6.Size = New-Object System.Drawing.Size(150,40) + $ESTextfeld6.Text = "Dateiname" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld6) + + $ESTextfeld7 = New-Object System.Windows.Forms.Label + $ESTextfeld7.Location = New-Object System.Drawing.Size($BasisBreite4,$BasisHoehe1) + $ESTextfeld7.Size = New-Object System.Drawing.Size(100,20) + $ESTextfeld7.Text = "Wandlungsart" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld7) + + $ESTextfeld8 = New-Object System.Windows.Forms.Label + $ESTextfeld8.Location = New-Object System.Drawing.Size($BasisBreite4,$BasisHoehe2) + $ESTextfeld8.Size = New-Object System.Drawing.Size(50,20) + $ESTextfeld8.Text = "Simpel" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld8) + + $ESTextfeld9 = New-Object System.Windows.Forms.Label + $ESTextfeld9.Location = New-Object System.Drawing.Size($BasisBreite5,$BasisHoehe2) + $ESTextfeld9.Size = New-Object System.Drawing.Size(50,20) + $ESTextfeld9.Text = "TIA" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld9) + +#--------------------------- Eintrag hinzufuegen Elemente + + $ESTextfeldPrefixENew = New-Object System.Windows.Forms.TextBox + $ESTextfeldPrefixENew.Location = New-Object System.Drawing.Size($BasisBreite1,$Basishoehe2x) + $ESTextfeldPrefixENew.Size = New-Object System.Drawing.Size(40,20) + $ESTextfeldPrefixENew.Name = "ESTextfeldENew" + $ESTextfeldPrefixENew.Add_Click({ + Write-Host "Ausgabe bei ESTextfeldENew" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldPrefixENew) + + $ESTextfeldPrefixANew = New-Object System.Windows.Forms.TextBox + $ESTextfeldPrefixANew.Location = New-Object System.Drawing.Size($BasisBreite2,$Basishoehe2x) + $ESTextfeldPrefixANew.Size = New-Object System.Drawing.Size(40,20) + $ESTextfeldPrefixANew.Name = "ESTextfeldANew" + $ESTextfeldPrefixANew.Add_Click({ + Write-Host "Ausgabe bei Button ESTextfeldANew" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldPrefixANew) + + $ESTextfeldDateiNameNew = New-Object System.Windows.Forms.TextBox + $ESTextfeldDateiNameNew.Location = New-Object System.Drawing.Size($BasisBreite3,$Basishoehe2x) + $ESTextfeldDateiNameNew.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeldDateiNameNew.Name = "ESTextfeldDateiNameNew" + $ESTextfeldDateiNameNew.Add_Click({ + Write-Host "Ausgabe bei Button ESTextfeldDateiNameNew" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldDateiNameNew) + + $ESRadioButtonSimpelNew = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonSimpelNew.Location = New-Object System.Drawing.Size(15,10) + $ESRadioButtonSimpelNew.Size = New-Object System.Drawing.Size(17,17) + $ESRadioButtonSimpelNew.Name = "ESRadioButtonSimpelNew" + <#$ESRadioButtonSimpelNew.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure())#> + #$TabSeiteEigenschaften.Controls.Add($ESRadioButtonSimpelNew) + + $ESRadioButtonTIANew = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonTIANew.Location = New-Object System.Drawing.Size(60,10) + $ESRadioButtonTIANew.Size = New-Object System.Drawing.Size(17,17) + $ESRadioButtonTIANew.Name = "ESRadioButtonTIANew" + <#$ESRadioButtonTIANew.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure())#> + #$TabSeiteEigenschaften.Controls.Add($ESRadioButtonTIANew) + + $ESGroupBoxRadioButtons = New-Object System.Windows.Forms.GroupBox + $ESGroupBoxRadioButtons.Location = New-Object System.Drawing.Size($BasisBreite4,($BasisHoehe2x-5)) + $ESGroupBoxRadioButtons.Size = New-Object System.Drawing.Size(85,30) + $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonSimpelNew) + $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonTIANew) + $TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtons) + + $ESHinzufuegenButton = New-Object System.Windows.Forms.Button + $ESHinzufuegenButton.Location = New-Object System.Drawing.Size(730,$BasisHoehe2x) + $ESHinzufuegenButton.Size = New-Object System.Drawing.Size(150,30) + $ESHinzufuegenButton.Text = "Eintrag hinzufuegen" + $ESHinzufuegenButton.Add_Click({ + Write-Host "Eintrag hinzufuegen" + + if ($ESRadioButtonTIANew.Checked) { + $WandlungsTyp = "TIA" + } + else { + $WandlungsTyp = "Simpel" + } + Write-Host "WandlungsTyp: " $WandlungsTyp + + $NeueZielDatei = @([PSCustomObject]@{ + PrefixEingang = $ESTextfeldPrefixENew.Text + PrefixAusgang = $ESTextfeldPrefixANew.Text + DateiName = $ESTextfeldDateiNameNew.Text + WandlungsTyp = $WandlungsTyp + }) + EinstellungsDateiAendern "New" $FaktorHoehe $ZielDateien $NeueZielDatei + }) + $TabSeiteEigenschaften.Controls.Add($ESHinzufuegenButton) + + # Das hier später auslagern + Write-Host "Alle ZielDateien: " $ZielDateien + $FaktorHoehe = 0 + foreach ($ZielDatei in $ZielDateien) { + # Eintrag hinzufügen mit #1 Textfeldern für a) Eingang b) Ausgang #2 Textfeld für Dateiname #3 Radio-Buttons für a) Simpel b) TIA + # Todo: Wie kann ich weitere Eigenschaften festlegen? Probieren: Set-Variable + #New-Variable -Name ("ESTextFeldPrefixE" + $i) -Value $(New-Object System.Windows.Forms.TextBox) + <#Set-Variable -Name ("ESTextFeldPrefixE" + $i + ".Location") -Value $(New-Object System.Drawing.Size(10,100)) + Set-Variable -Name ("ESTextFeldPrefixE" + $i + ".Size") -Value $(New-Object System.Drawing.Size(400,20)) + Set-Variable -Name ("ESTextFeldPrefixE" + $i + ".Text") -Value $("Test zur Laufzeitgenerierung")#> + <#$(New-Variable -Name ("ESTextFeldPrefixE" + $i + ".Location")) # = New-Object System.Drawing.Size(10,100) + $(Get-Variable -Name ("ESTextFeldPrefixE" + $i + ".Location")).Value = New-Object System.Drawing.Size(10,100) + + $(New-Variable -Name ("ESTextFeldPrefixE" + $i + ".Size")) #= New-Object System.Drawing.Size(400,20) + $(New-Variable -Name ("ESTextFeldPrefixE" + $i + ".Text")) #= "Test zur Laufzeitgenerierung" + $TabSeiteEigenschaften.Controls.Add($(Get-Variable -Name $("ESTextFeldPrefixE" + $i)).Value)#> + + $ESTextfeldPrefixE = New-Object System.Windows.Forms.TextBox + $ESTextfeldPrefixE.Location = New-Object System.Drawing.Size($BasisBreite1,($BasisHoehe3+35*$FaktorHoehe)) + $ESTextfeldPrefixE.Size = New-Object System.Drawing.Size(40,20) + $ESTextfeldPrefixE.Text = $ZielDatei.PrefixEingang + $ESTextfeldPrefixE.Name = "ESTextfeldE$FaktorHoehe" + $ESTextfeldPrefixE.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldPrefixE) + + $ESTextfeldPrefixA = New-Object System.Windows.Forms.TextBox + $ESTextfeldPrefixA.Location = New-Object System.Drawing.Size($BasisBreite2,($BasisHoehe3+35*$FaktorHoehe)) + $ESTextfeldPrefixA.Size = New-Object System.Drawing.Size(40,20) + $ESTextfeldPrefixA.Text = $ZielDatei.PrefixAusgang + $ESTextfeldPrefixA.Name = "ESTextfeldA$FaktorHoehe" + $ESTextfeldPrefixA.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldPrefixA) + + $ESTextfeldDateiName = New-Object System.Windows.Forms.TextBox + $ESTextfeldDateiName.Location = New-Object System.Drawing.Size($BasisBreite3,($BasisHoehe3+35*$FaktorHoehe)) + $ESTextfeldDateiName.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeldDateiName.Text = $ZielDatei.DateiName + $ESTextfeldDateiName.Name = "ESTextfeldDateiName$FaktorHoehe" + $ESTextfeldDateiName.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldDateiName) + + $ESRadioButtonSimpel = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonSimpel.Location = New-Object System.Drawing.Size(15,10) + $ESRadioButtonSimpel.Size = New-Object System.Drawing.Size(17,17) + #$ESRadioButtonSimpel.Text = "Text Radio Button1" #$ZielDatei.DateiName + $ESRadioButtonSimpel.Name = "ESRadioButtonSimpel$FaktorHoehe" + <#$ESRadioButtonSimpel.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure())#> + #$TabSeiteEigenschaften.Controls.Add($ESRadioButtonSimpel) + + $ESRadioButtonTIA = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonTIA.Location = New-Object System.Drawing.Size(60,10) + $ESRadioButtonTIA.Size = New-Object System.Drawing.Size(17,17) + #$ESRadioButtonTIA.Text = "Text Radio Button2" #$ZielDatei.DateiName + $ESRadioButtonTIA.Name = "ESRadioButtonTIA$FaktorHoehe" + <#$ESRadioButtonTIA.Add_Click({ + Write-Host "Ausgabe bei Button $FaktorHoehe" + }.GetNewClosure())#> + #$TabSeiteEigenschaften.Controls.Add($ESRadioButtonTIA) + + $ESGroupBoxRadioButtons = New-Object System.Windows.Forms.GroupBox + $ESGroupBoxRadioButtons.Location = New-Object System.Drawing.Size($BasisBreite4,($BasisHoehe3-5+35*$FaktorHoehe)) + $ESGroupBoxRadioButtons.Size = New-Object System.Drawing.Size(85,30) + #$ESGroupBoxRadioButtons.Text = "Text ControlBox" + $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonSimpel) + $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonTIA) + $TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtons) + + if ($ZielDatei.WandlungsTyp -eq "TIA") { + $ESRadioButtonTIA.Checked = $true + } + else { + $ESRadioButtonSimpel.Checked = $true + } + + $ESLoeschenButton = New-Object System.Windows.Forms.Button + $ESLoeschenButton.Location = New-Object System.Drawing.Size(730,($BasisHoehe3+35*$FaktorHoehe)) + $ESLoeschenButton.Size = New-Object System.Drawing.Size(150,30) + $ESLoeschenButton.Text = "Loeschen" + $ESLoeschenButton.Add_Click({ + Write-Host "Loeschen von " $ZielDatei.DateiName " mit i-Wert " $FaktorHoehe + Write-Host "ZielDateien vor Übergabe: " $ZielDateien + EinstellungsDateiAendern "Del" $FaktorHoehe $ZielDateien "" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESLoeschenButton) + + $ESSpeichernButton = New-Object System.Windows.Forms.Button + $ESSpeichernButton.Location = New-Object System.Drawing.Size(570,($BasisHoehe3+35*$FaktorHoehe)) + $ESSpeichernButton.Size = New-Object System.Drawing.Size(150,30) + $ESSpeichernButton.Text = "Aenderungen Speichern" + $ESSpeichernButton.Add_Click({ + Write-Host "Speichern von " $ZielDatei.DateiName " mit i-Wert " $FaktorHoehe + + if ($ESRadioButtonTIA.Checked) { + $WandlungsTyp = "TIA" + } + else { + $WandlungsTyp = "Simpel" + } + Write-Host "Wandlungstyp: " $WandlungsTyp + + $ZielDateiNeu = @([PSCustomObject]@{ + PrefixEingang = $ESTextfeldPrefixE.Text + PrefixAusgang = $ESTextfeldPrefixA.Text + DateiName = $ESTextfeldDateiName.Text + WandlungsTyp = $WandlungsTyp + }) + Write-Host "Neue ZielDatei vor Übergabe: " $ZielDateiNeu + EinstellungsDateiAendern "Upd" $FaktorHoehe $ZielDateien $ZielDateiNeu + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESSpeichernButton) + + Write-Host "Counter i: " $FaktorHoehe + Write-Host "Wert Zieldatei: " $ZielDatei + #Write-Host "Ausgabe: " $(Get-Variable -Name ("ESTextFeldPrefixE" + $i + ".Location")).Value + + $FaktorHoehe++ + } + + + $Fenster.Add_Shown({$Fenster.Activate()}) + [void]$Fenster.ShowDialog() + + return +} + +#------------------- Funktion nur für das txt-GUI -------------------------- + +Function TXTReaktionReturn ($Pfad) +{ + if (PfadExistiert $Pfad) + { + # Gültiger Pfad oder .txt-Datei + $PfadEnde = $(Split-Path $Pfad -Leaf) + if ($($PfadEnde -match ".txt")) + { + #$Fenster.Dispose() + 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 ungültiger Pfad + AnzeigeAktualisieren "txt" "" + } + return +} + +#------------------- Funktion nur für das VerzeichnisWaehlen-GUI -------------------------- + + +# Führt $Pfad und $Auswahl zusammen und überprüft 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 +} +} + + +#------------------- Funktionen zum wechseln der Tabs -------------------------- + +Function ZuVERSpringen +{ + AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + AufgabenAktualisieren "Zielverzeichnis auswaehlen" + Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text + $TabBasis.SelectedIndex = 1 +} + +Function ZuFASpringen +{ + # Falls Einstellungen eingefügt werden: in dieser Funktion viel Todo + + AufgabenAktualisieren "Zieldateinamen erstellen" + Write-Host "Gewaehltes Verzeichnis: " $VERPfadFeld.Text + $TabBasis.SelectedIndex = 2 + + $PfadUrsprungsdatei = $TXTPfadFeld.Text + $PfadZielDateien = $VERPfadFeld.Text + $PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien + $PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien + + AufgabenAktualisieren "Neue Excel-Dateien erstellen" + ExcelDateiErstellen $PfadDateiEA + ExcelDateiErstellen $PfadDateiDIDQ + + AufgabenAktualisieren "Excel-Dateien mit Inhalten befuellen und Duplikate finden" + $AlleGleichenEA = ExcelDateiBeschreibenStandard $PfadUrsprungsdatei "E" "A" $PfadDateiEA + $AlleGleichenDIDQ = ExcelDateiBeschreibenSpezial $PfadUrsprungsdatei "%I" "%Q" $PfadDateiDIDQ + #Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA + $GleicheEingaenge = $AlleGleichenEA[0] + $GleicheAusgaenge = $AlleGleichenEA[1] + $Fehler = $AlleGleichenEA[2] + + Write-Host "Gleiche Eingaenge: " $GleicheEingaenge + Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge + Write-Host "Fehler: " $Fehler + + AufgabenAktualisieren "Ausgabe Duplikate" + 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 +} + +#------------------- Funktionen für alle GUIs -------------------------- + + +# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles +# Um die Laufwerke anzuzeigen, muss der $Pfad = "" sein +Function AnzeigeAktualisieren ($AuswahlTyp, $Pfad) +{ +# Write-Host "Übergebener Pfad: " $Pfad + +# Sicherstellen, dass es das Verzeichnis gibt +if (PfadExistiert $Pfad) +{ + Write-Host "Ordner anzeigen" + $Optionen = Optionen $AuswahlTyp $Pfad +} +elseif ($Pfad.Length -eq 0) { + Write-Host "Laufwerke anzeigen" + $Optionen = LaufwerkeFinden + $Pfad = "" +} +else +{ + AnzeigeAktualisieren "" + 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 Länge 0 hat, wurde ein Laufwerk gewählt + $Pfad = $Auswahl +} +else { + #Fehlerfall/ ungültiger Pfad: zurück zu Laufwerken navigieren + $Pfad = "" +} + +# Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen +if ($($($Auswahl -match ".txt") -and $($AuswahlTyp -eq "txt"))) +{ + # Für den Gesamtfortschritt Anzahl Dateien auslesen + $Datei = Get-Content $Pfad + $FATextfeldGesamtEintraege.Text = 2 * $($Datei.Length) + + # Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad + # Write-Host "Dateityp: " $Pfad.GetType() + 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 + # 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 zurueck" + # Fehler/ Nichts tun? + # Ermitteln: wann tritt dieser Fall ein? + $Pfad = "" +} +AnzeigeAktualisieren $AuswahlTyp $Pfad +return +} + +Function TastenReaktionPfadFeld($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + TXTReaktionReturn $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Return" { + $Pfad = $VERPfadFeld.Text + + AnzeigeAktualisieren "ver" $Pfad + } + # Entfernt, da man sonst im PfadFeld nicht groß schreiben kann! + <#"ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + + ReaktionShiftKey $Pfad $Auswahl + }#> + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +return +} + +Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt"){ + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Auswahl: " $Auswahl + # Write-Host "Pfad: " $Pfad + + VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +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 { + # Write-Hoste "Gedrückte Taste: " $Taste + } + } +} + +return +} + +Function TastenReaktionButtons($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Back" { + $Pfad = $VERPfadFeld.Text + VerzeichnisZurueck $AuswahlTyp $Pfad + } + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + ReaktionShiftKey $Pfad $Auswahl + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +return +} + +Function Optionen($AuswahlTyp, $Pfad) +{ +# Unterordner und .txt-Dateien finden +# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner, die mit "_" beginnen, nicht gefunden werden können +[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad + +if ($AuswahlTyp -eq "txt") { + $TxtDateien = TxtDateienFinden $Pfad + #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück + $Optionen = $UnterOrdner + $TxtDateien +} +elseif ($AuswahlTyp -eq "ver") { + #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück + $Optionen = $UnterOrdner +} +return $Optionen +} + +Function PfadExistiert ($Pfad) +{ +# Um Abzufangen, dass Test-Path mit leerem Wert durchlaufen wird. Leere Verzeichnisse gelten als ungültig. +if ($Pfad.Length -eq 0) { + return $false +} +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) +{ +$UnterOrdner = $(Get-ChildItem $Pfad -Directory) + +if ($($UnterOrdner.Length -gt 0)) +{ + $Ordner = $(Split-Path $UnterOrdner -Leaf) +} +else { + $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 + { + 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. höher 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 für Einstellungen ------------------------------- + +Function AnzeigeEinstellungenAktualisieren () +{ + +} + +Function StartVerzeichnisAendern () +{ + $Explorer = New-Object System.Windows.Forms.FolderBrowserDialog + $Explorer.ShowDialog() + $Pfad = $Explorer.SelectedPath + Write-Host "Einstellungsdatei: " $PfadEinstellungsDatei + Write-Host "Pfad: " $Pfad + #$PfadEinstellungsDatei | Out-File -FilePath $PfadEinstellungsDatei + $DateiInhalt = Get-Content $PfadEinstellungsDatei + $DateiInhalt[0] = $Pfad + Clear-Content $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $DateiInhalt + + AnzeigeAktualisieren "txt" $Pfad + AnzeigeAktualisieren "ver" $Pfad + #AnzeigenEinstellungenAktualisieren +} + +Function EinstellungsDateiAendern($Art, $Eintrag, $ZielDateien, $ZielDatei) +{ + # Anpassen von $ZielDateien + switch ($Art) { + New { + Write-Host "[New] Alte ZielDateien: " $ZielDateien + $ZielDateien += $ZielDatei + + Write-Host "[New] Neue ZielDateien: " $ZielDateien + + # Felder leeren + # Todo: auslagern in AnzeigenEinstellungenAktualisieren. Soll auch gemacht werden, nachdem Einträge geloescht oder veraendert wurden! + $ESTextfeldPrefixENew.Text = "" + $ESTextfeldPrefixANew.Text = "" + $ESTextfeldDateiNameNew.Text = "" + $ESRadioButtonSimpelNew.Checked = $false + $ESRadioButtonTIANew.Checked = $false + } + Upd { + Write-Host "[Upd] Alte ZielDateien: " $ZielDateien + Write-Host "Einzufuegende Zieldatei: " $ZielDatei + + $ZielDateien[$Eintrag] = $ZielDatei + + Write-Host "[Upd] Neue ZielDateien: " $ZielDateien + } + Del { + Write-Host "[Del] Alte ZielDateien: " $ZielDateien ", Eintrag: " $Eintrag + + $i = 0 + foreach ($ZielDatei in $ZielDateien) { + if ($Eintrag -ne $i) { + $NeueZielDateien += $ZielDatei + } + $i++ + } + + Clear-Variable ZielDateien + $ZielDateien = $NeueZielDateien + Write-Host "[Del] Neue ZielDateien: " $ZielDateien + } + Default {} + } + + # Schreiben in Einstellungsdatei + $StartPfad = $(Get-Content $PfadEinstellungsDatei)[0] + Clear-Content $PfadEinstellungsDatei + Write-Host "StartPfad: " $StartPfad " Pfad Einstellungsdatei: " $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $StartPfad + foreach ($ZielDatei in $ZielDateien) { + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDatei.PrefixEingang + "|" + $ZielDatei.PrefixAusgang + "|" + $ZielDatei.DateiName + "|" + $ZielDatei.WandlungsTyp) + } + + + # Anzeige in Einstellungen aktualisieren +} +#--------------------------------------- Ende Funktionen für GUI ------------------------------- + +Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDatei) +{ + $BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf + $BasisNameZielDateiLaenge = $BasisNameZielDatei.Length + $BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4)) + $GesamtPfadZielDatei = $PfadZielDatei + "\" + $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 ExcelDateiBeschreibenStandard ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 1 + $Eingaenge = @() + $ZuEingang = @("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 = @("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 $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 + Zeile = $i + }) + } + elseif ($($($BMKZahl.Substring(0,2)) -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 + 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++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +Function ExcelDateiBeschreibenSpezial ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 2 + $Eingaenge = @() + $ZuEingang = @("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 = @("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 = @() + + $Blatt.Cells.Item(1,1) = "Name" + $Blatt.Cells.Item(1,2) = "Path" + $Blatt.Cells.Item(1,3) = "Data Type" + $Blatt.Cells.Item(1,4) = "Logical Address" + $Blatt.Cells.Item(1,5) = "Comment" + $Blatt.Cells.Item(1,6) = "Hmi Visible" + $Blatt.Cells.Item(1,7) = "Hmi Accessible" + $Blatt.Cells.Item(1,8) = "Hmi Writeable" + $Blatt.Cells.Item(1,9) = "Typeobject ID" + $Blatt.Cells.Item(1,10) = "Version ID" + + $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 $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 + Zeile = $i + }) + } + elseif ($($($BMKZahl.Substring(0,2)) -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 + Zeile = $i + }) + } + else + { + Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Zeile = $i + }) + } + + #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar + $Blatt.Cells.Item($i,1) = $Kommentar #Name + $Blatt.Cells.Item($i,2) = "Standard-Variablentabelle" #Path + $Blatt.Cells.Item($i,3) = "Bool" #Data Type + $Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address + #$Blatt.Cells.Item($i,5) = "" #Comment + $Blatt.Cells.Item($i,6) = "'True" #Hmi Visible + $Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible + $Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable + #$Blatt.Cells.Item($i,9) = "" #Typeobject ID + #$Blatt.Cells.Item($i,10) = "" #Version ID + + + $i++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + 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 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 \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst5.ps1 b/Test-Skripte/GUI-Angepasst5.ps1 new file mode 100644 index 0000000..4c488d5 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst5.ps1 @@ -0,0 +1,1604 @@ +Function Main +{ + Write-Host "Programmstart" + + $ZielDateien = EinstellungsDateiVorhanden + Write-Host "Zieldateien in Main: " $ZielDateien + + $StartPfad = StartPfadHolen + + GUI $StartPfad $ZielDateien + +} + + + +Function GUI ($StartPfad, $ZielDateien) +{ + [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, 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 = "Dateikonvertierer txt zu xlsx" + + # 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 gedrückter 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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "txt" $Pfad $Auswahl + }) + $TXTListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen "txt" $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text + $Pfad = $TXTPfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck "txt" $Pfad + }) + $TXTZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 Übergabe + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad= $TXTPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $TXTPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "txt" $Pfad $Auswahl + }) + $TXTAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons "txt" $Taste + }) + $TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton) + + $A = AnzeigeAktualisieren "txt" $StartPfad # Ohne dem Aufruf kann kein Startverzeichnis übergeben werden. Wird der Aufruf keiner Variable zugewiesen verursacht dies Fehler bei der Rückgabe. + + #$TXTDatei = $TXTPfadFeld.Text + + # 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 gedrückter 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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + # Pfad aktualisieren + VerzeichnisAuswaehlen "ver" $Pfad $Auswahl + }) + $VERListeOrdnernamen.Add_KeyDown({ + # Reaktion bei gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionListeOrdnernamen "ver" $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen) + + # ZurückButton + $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({ + # Write-Host "Pfad ausgabe: " $VERPfadFeld.Text + $Pfad = $VERPfadFeld.Text + + #Pfad aktualisieren + VerzeichnisZurueck "ver" $Pfad + }) + $VERZurueckButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 Übergabe + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + # Write-Host "Gewählter Ordner/ Datei: " $Auswahl + # Write-Host "Vorheriger Pfad: " $VERPfad + + if ($($VERListeOrdnernamen.Items[0] -eq "")) + { + VERAuswahlBestaetigt $Pfad $Auswahl + } + else + { + # Pfad aktualisieren + VerzeichnisAuswaehlen "ver" $Pfad $Auswahl + } + }) + $VERAuswaehlenButton.Add_KeyDown({ + # Reaktion bei gedrückter 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 gedrückter Taste + $Taste = $_.KeyCode + TastenReaktionButtons "ver" $Taste + }) + $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton) + + # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird + #$A = AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + + #$ZielVerzeichnis = $VERPfadFeld.Text + + # 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(200,20) + $FATextfeld1.Text = "Aktuelle Aufgabe" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1) + + $FATextfeld2 = New-Object System.Windows.Forms.Label + $FATextfeld2.Location = New-Object System.Drawing.Size(300,10) + $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(10,40) + $FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60) + $FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe) + + $FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox + $FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) + $FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) + $FAListeErledigteAufgaben.Height = 150 + $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,100) + $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,120) + $FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30) + #$FAFortschrittsbar.Name = "Fortschrittsanzeige" + $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,170) + $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,200) + $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,170) + $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,200) + $FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20) + $FATextfeldGesamtEintraege.Text = $($Ursprungdatei.Length) + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege) + + # Tab: Ausgabe doppelte Ein- und Ausgänge 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 = 80 #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(180,20) + $ESTextfeld1.Text = "Startverzeichnis Navigation:" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld1) + + $ESTextfeldStartPfad = New-Object System.Windows.Forms.Label + $ESTextfeldStartPfad.Location = New-Object System.Drawing.Size(($BasisBreite1+180),10) + $ESTextfeldStartPfad.Size = New-Object System.Drawing.Size(530,20) + #$ESTextfeldStartPfad.Text = "$StartPfad" + $TabSeiteEigenschaften.Controls.Add($ESTextfeldStartPfad) + + $ESAendernButton = New-Object System.Windows.Forms.Button + $ESAendernButton.Location = New-Object System.Drawing.Size(730,10) + $ESAendernButton.Size = New-Object System.Drawing.Size(150,30) + $ESAendernButton.Text = "Aendern" + $ESAendernButton.Add_Click({ + StartVerzeichnisAendern + }) + $TabSeiteEigenschaften.Controls.Add($ESAendernButton) + + $ESTrollButton = New-Object System.Windows.Forms.Button + $ESTrollButton.Location = New-Object System.Drawing.Size(730,50) + $ESTrollButton.Size = New-Object System.Drawing.Size(150,50) + $ESTrollButton.Text = "Dinge entfernen" + $ESTrollButton.Add_Click({ + $TabSeiteEigenschaften.Controls.Remove($ESTextBoxPrefixE) + }) + $TabSeiteEigenschaften.Controls.Add($ESTrollButton) + +#------------------- Tabelle mit ZielDateien + + $ESTextfeld2 = New-Object System.Windows.Forms.Label + $ESTextfeld2.Location = New-Object System.Drawing.Size($BasisBreite1,50) + $ESTextfeld2.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeld2.Text = "Zieldateien:" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld2) + + $ESTextfeld3 = New-Object System.Windows.Forms.Label + $ESTextfeld3.Location = New-Object System.Drawing.Size(($BasisBreite1+30),$BasisHoehe1) + $ESTextfeld3.Size = New-Object System.Drawing.Size(80,20) + $ESTextfeld3.Text = "Prefix für" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld3) + + $ESTextfeld4 = New-Object System.Windows.Forms.Label + $ESTextfeld4.Location = New-Object System.Drawing.Size($BasisBreite1,$BasisHoehe2) + $ESTextfeld4.Size = New-Object System.Drawing.Size(50,20) + $ESTextfeld4.Text = "Eingang" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld4) + + $ESTextfeld5 = New-Object System.Windows.Forms.Label + $ESTextfeld5.Location = New-Object System.Drawing.Size(($BasisBreite2-5),$BasisHoehe2) + $ESTextfeld5.Size = New-Object System.Drawing.Size(55,20) + $ESTextfeld5.Text = "Ausgang" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld5) + + $ESTextfeld6 = New-Object System.Windows.Forms.Label + $ESTextfeld6.Location = New-Object System.Drawing.Size($BasisBreite3,$BasisHoehe1) + $ESTextfeld6.Size = New-Object System.Drawing.Size(150,40) + $ESTextfeld6.Text = "Dateiname" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld6) + + $ESTextfeld7 = New-Object System.Windows.Forms.Label + $ESTextfeld7.Location = New-Object System.Drawing.Size($BasisBreite4,$BasisHoehe1) + $ESTextfeld7.Size = New-Object System.Drawing.Size(110,20) + $ESTextfeld7.Text = "Konvertierungsart" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld7) + + $ESTextfeld8 = New-Object System.Windows.Forms.Label + $ESTextfeld8.Location = New-Object System.Drawing.Size($BasisBreite4,$BasisHoehe2) + $ESTextfeld8.Size = New-Object System.Drawing.Size(50,20) + $ESTextfeld8.Text = "Simpel" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld8) + + $ESTextfeld9 = New-Object System.Windows.Forms.Label + $ESTextfeld9.Location = New-Object System.Drawing.Size($BasisBreite5,$BasisHoehe2) + $ESTextfeld9.Size = New-Object System.Drawing.Size(50,20) + $ESTextfeld9.Text = "TIA" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld9) + +#--------------------------- Eintrag hinzufuegen Elemente + + $ESTextBoxPrefixENew = New-Object System.Windows.Forms.TextBox + $ESTextBoxPrefixENew.Location = New-Object System.Drawing.Size($BasisBreite1,$Basishoehe2x) + $ESTextBoxPrefixENew.Size = New-Object System.Drawing.Size(40,20) + $ESTextBoxPrefixENew.Name = "ESTextfeldENew" + $ESTextBoxPrefixENew.Add_Click({ + Write-Host "Ausgabe bei ESTextfeldENew" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixENew) + + $ESTextBoxPrefixANew = New-Object System.Windows.Forms.TextBox + $ESTextBoxPrefixANew.Location = New-Object System.Drawing.Size($BasisBreite2,$Basishoehe2x) + $ESTextBoxPrefixANew.Size = New-Object System.Drawing.Size(40,20) + $ESTextBoxPrefixANew.Name = "ESTextfeldANew" + $ESTextBoxPrefixANew.Add_Click({ + Write-Host "Ausgabe bei Button ESTextfeldANew" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixANew) + + $ESTextfeldDateiNameNew = New-Object System.Windows.Forms.TextBox + $ESTextfeldDateiNameNew.Location = New-Object System.Drawing.Size($BasisBreite3,$Basishoehe2x) + $ESTextfeldDateiNameNew.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeldDateiNameNew.Name = "ESTextfeldDateiNameNew" + $ESTextfeldDateiNameNew.Add_Click({ + Write-Host "Ausgabe bei Button ESTextfeldDateiNameNew" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldDateiNameNew) + + $ESRadioButtonSimpelNew = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonSimpelNew.Location = New-Object System.Drawing.Size(15,10) + $ESRadioButtonSimpelNew.Size = New-Object System.Drawing.Size(17,17) + $ESRadioButtonSimpelNew.Name = "ESRadioButtonSimpelNew" + + $ESRadioButtonTIANew = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonTIANew.Location = New-Object System.Drawing.Size(60,10) + $ESRadioButtonTIANew.Size = New-Object System.Drawing.Size(17,17) + $ESRadioButtonTIANew.Name = "ESRadioButtonTIANew" + + $ESGroupBoxRadioButtonsNew = New-Object System.Windows.Forms.GroupBox + $ESGroupBoxRadioButtonsNew.Location = New-Object System.Drawing.Size($BasisBreite4,($BasisHoehe2x-5)) + $ESGroupBoxRadioButtonsNew.Size = New-Object System.Drawing.Size(85,30) + $ESGroupBoxRadioButtonsNew.Controls.Add($ESRadioButtonSimpelNew) + $ESGroupBoxRadioButtonsNew.Controls.Add($ESRadioButtonTIANew) + $TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtonsNew) + + $ESHinzufuegenButton = New-Object System.Windows.Forms.Button + $ESHinzufuegenButton.Location = New-Object System.Drawing.Size(730,$BasisHoehe2x) + $ESHinzufuegenButton.Size = New-Object System.Drawing.Size(150,30) + $ESHinzufuegenButton.Text = "Eintrag hinzufuegen" + $ESHinzufuegenButton.Add_Click({ + Write-Host "Eintrag hinzufuegen" + + if ($ESRadioButtonTIANew.Checked) { + $WandlungsTyp = "TIA" + } + else { + $WandlungsTyp = "Simpel" + } + Write-Host "WandlungsTyp: " $WandlungsTyp + + $NeueZielDatei = @([PSCustomObject]@{ + PrefixEingang = $ESTextBoxPrefixENew.Text + PrefixAusgang = $ESTextBoxPrefixANew.Text + DateiName = $ESTextfeldDateiNameNew.Text + WandlungsTyp = $WandlungsTyp + }) + EinstellungsDateiAendern "New" $FaktorHoehe $ZielDateien $NeueZielDatei + }) + $TabSeiteEigenschaften.Controls.Add($ESHinzufuegenButton) + + # Wird benoetigt, um die Anzahl der Eintraege der dynamisch erstellten Variablen zu speichern + $ESAnzahlEintraegeTextfeld = New-Object System.Windows.Forms.Label + + AnzeigeEinstellungenAktualisieren + + $Fenster.Add_Shown({$Fenster.Activate()}) + [void]$Fenster.ShowDialog() + + return +} + +#------------------- Funktion nur für das txt-GUI -------------------------- + +Function TXTReaktionReturn ($Pfad) +{ + if (PfadExistiert $Pfad) + { + # Gültiger Pfad oder .txt-Datei + $PfadEnde = $(Split-Path $Pfad -Leaf) + if ($($PfadEnde -match ".txt")) + { + #$Fenster.Dispose() + 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 ungültiger Pfad + AnzeigeAktualisieren "txt" "" + } + return +} + +#------------------- Funktion nur für das VerzeichnisWaehlen-GUI -------------------------- + + +# Führt $Pfad und $Auswahl zusammen und überprüft 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 +} +} + + +#------------------- Funktionen zum wechseln der Tabs -------------------------- + +Function ZuVERSpringen +{ + AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + AufgabenAktualisieren "Zielverzeichnis auswaehlen" + Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text + $TabBasis.SelectedIndex = 1 +} + +Function ZuFASpringen +{ + # Falls Einstellungen eingefügt werden: in dieser Funktion viel Todo + + AufgabenAktualisieren "Zieldateinamen erstellen" + Write-Host "Gewaehltes Verzeichnis: " $VERPfadFeld.Text + $TabBasis.SelectedIndex = 2 + + $PfadUrsprungsdatei = $TXTPfadFeld.Text + $PfadZielDateien = $VERPfadFeld.Text + $PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien + $PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien + + AufgabenAktualisieren "Neue Excel-Dateien erstellen" + ExcelDateiErstellen $PfadDateiEA + ExcelDateiErstellen $PfadDateiDIDQ + + AufgabenAktualisieren "Excel-Dateien mit Inhalten befuellen und Duplikate finden" + $AlleGleichenEA = ExcelDateiBeschreibenStandard $PfadUrsprungsdatei "E" "A" $PfadDateiEA + $AlleGleichenDIDQ = ExcelDateiBeschreibenSpezial $PfadUrsprungsdatei "%I" "%Q" $PfadDateiDIDQ + #Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA + $GleicheEingaenge = $AlleGleichenEA[0] + $GleicheAusgaenge = $AlleGleichenEA[1] + $Fehler = $AlleGleichenEA[2] + + Write-Host "Gleiche Eingaenge: " $GleicheEingaenge + Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge + Write-Host "Fehler: " $Fehler + + AufgabenAktualisieren "Ausgabe Duplikate" + 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 +} + +#------------------- Funktionen für alle GUIs -------------------------- + + +# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles +# Um die Laufwerke anzuzeigen, muss der $Pfad = "" sein +Function AnzeigeAktualisieren ($AuswahlTyp, $Pfad) +{ +# Write-Host "Übergebener Pfad: " $Pfad + +# Sicherstellen, dass es das Verzeichnis gibt +if (PfadExistiert $Pfad) +{ + Write-Host "Ordner anzeigen" + $Optionen = Optionen $AuswahlTyp $Pfad +} +elseif ($Pfad.Length -eq 0) { + Write-Host "Laufwerke anzeigen" + $Optionen = LaufwerkeFinden + $Pfad = "" +} +else +{ + AnzeigeAktualisieren "" + 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 Länge 0 hat, wurde ein Laufwerk gewählt + $Pfad = $Auswahl +} +else { + #Fehlerfall/ ungültiger Pfad: zurück zu Laufwerken navigieren + $Pfad = "" +} + +# Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen +if ($($($Auswahl -match ".txt") -and $($AuswahlTyp -eq "txt"))) +{ + # Für den Gesamtfortschritt Anzahl Dateien auslesen + $Datei = Get-Content $Pfad + $FATextfeldGesamtEintraege.Text = 2 * $($Datei.Length) + + # Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad + # Write-Host "Dateityp: " $Pfad.GetType() + 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 + # 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 zurueck" + # Fehler/ Nichts tun? + # Ermitteln: wann tritt dieser Fall ein? + $Pfad = "" +} +AnzeigeAktualisieren $AuswahlTyp $Pfad +return +} + +Function TastenReaktionPfadFeld($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + TXTReaktionReturn $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Return" { + $Pfad = $VERPfadFeld.Text + + AnzeigeAktualisieren "ver" $Pfad + } + # Entfernt, da man sonst im PfadFeld nicht groß schreiben kann! + <#"ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + + ReaktionShiftKey $Pfad $Auswahl + }#> + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +return +} + +Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt"){ + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrückt" + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + # Write-Host "Auswahl: " $Auswahl + # Write-Host "Pfad: " $Pfad + + VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl + } + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +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 { + # Write-Hoste "Gedrückte Taste: " $Taste + } + } +} + +return +} + +Function TastenReaktionButtons($AuswahlTyp, $Taste) +{ +# Write-Host "Übergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Back" { + # Write-Host "Back gedrückt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Back" { + $Pfad = $VERPfadFeld.Text + VerzeichnisZurueck $AuswahlTyp $Pfad + } + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + ReaktionShiftKey $Pfad $Auswahl + } + Default { + # Write-Host "Gedrückte Taste: " $Taste + } + } +} +return +} + +Function Optionen($AuswahlTyp, $Pfad) +{ +# Unterordner und .txt-Dateien finden +# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner, die mit "_" beginnen, nicht gefunden werden können +[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad + +if ($AuswahlTyp -eq "txt") { + $TxtDateien = TxtDateienFinden $Pfad + #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück + $Optionen = $UnterOrdner + $TxtDateien +} +elseif ($AuswahlTyp -eq "ver") { + #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück + $Optionen = $UnterOrdner +} +return $Optionen +} + +Function PfadExistiert ($Pfad) +{ +# Um Abzufangen, dass Test-Path mit leerem Wert durchlaufen wird. Leere Verzeichnisse gelten als ungültig. +if ($Pfad.Length -eq 0) { + return $false +} +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) +{ +$UnterOrdner = $(Get-ChildItem $Pfad -Directory) + +if ($($UnterOrdner.Length -gt 0)) +{ + $Ordner = $(Split-Path $UnterOrdner -Leaf) +} +else { + $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 + { + 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. höher 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 für Einstellungen ------------------------------- + +Function PfadEinstellungsDateiHolen () { + # Könnte man eigentlich in einer Zeile machen, PS macht da aber Probleme + $AktuellesVerzeichnis = Get-Location + $PfadEinstellungsDatei = $("$AktuellesVerzeichnis\" + "EinstellungenSkriptKonvertierung.txt") + Write-Host "Pfad Einstellungsdatei: " $PfadEinstellungsDatei + return $PfadEinstellungsDatei +} + +Function StartPfadHolen () { + # Evtl. aendern um gegen Probleme abzusichern: "Pfad|" oder "StartPfad|" vor den Pfad schreiben und danach suchen. Falls es kein Ergebnis gibt, einfuegen. Ausserdem waere dann die Reihenfolge egal. + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei + $StartPfad = $EinstellungsInhalte[0] + return $StartPfad +} + +Function ZielDateienHolen () { + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei + 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] + }) + } + } + + return $ZielDateien +} + +Function EinstellungsDateiVorhanden () { + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + if (Test-Path $PfadEinstellungsDatei) { + #Es gibt eine Datei mit den Einstellungen -> auslesen + #Todo: Checken, ob Inhalte plausibel sind -> ggf. neue mit Standardwerten erstellen! + + $ZielDateien = ZielDateienHolen + } + else { + #Es gibt keine Datei mit den Einstellungen -> erstellen + #Todo: Umbauen: Eintraege via EinstellungsDateiAendern hinzufuegen!!! + + # Mögliches Problem mit der Funktion "StartVerzeichnisAendern". Überprüfen! + + New-Item $PfadEinstellungsDatei -ItemType File + + $StartPfad = Get-Location + + $ZielDateien = @([PSCustomObject]@{ + PrefixEingang = "E" + PrefixAusgang = "A" + DateiName = "EA_[Ursprungsdatei]" + WandlungsTyp = "Simpel" + }) + $ZielDateien += @([PSCustomObject]@{ + PrefixEingang = "%I" + PrefixAusgang = "%Q" + DateiName = "DIDQ_[Ursprungsdatei]" + WandlungsTyp = "TIA" + }) + + Add-Content $PfadEinstellungsDatei $($StartPfad) + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDateien[0].PrefixEingang + "|" + $ZielDateien[0].PrefixAusgang + "|" + $ZielDateien[0].DateiName + "|" + $ZielDateien[0].WandlungsTyp) + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDateien[1].PrefixEingang + "|" + $ZielDateien[1].PrefixAusgang + "|" + $ZielDateien[1].DateiName + "|" + $ZielDateien[1].WandlungsTyp) + } + return $ZielDateien +} + +Function AnzeigeEinstellungenAktualisieren () +{ + # Neue Werte sollen nicht übergeben werden, sondern aus der Einstellungsdatei ausgelesen werden, um Fehler zu vermeiden. + # Einzige Voraussetzung: es muss eine Einstellungsdatei geben! + + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + #Write-Host "Ansicht Einstellungen aktualisieren mit dem Verzeichnis: " $PfadEinstellungsDatei + + # Entfernen der vorher erstellten Einträge + + $AnzahlAlteEintraege = $ESAnzahlEintraegeTextfeld.Text + Write-Host "Anzahl ermittelter Eintraege -1: " $AnzahlAlteEintraege + + #Abfangen: falls es keine Eintrage gibt, wird dennoch in die Schleife gesprungen, da $AnzahlAlteEintraege dennoch 0 ist. In diesem Fall neue Eintraege erstellen? + for ($i = 0; $i -le $AnzahlAlteEintraege; $i++) { + $TextBoxEExistiert = Test-Path Variable:\ESTextBoxPrefixE + Write-Host "Text Box E existiert: " $TextBoxEExistiert + $TabSeiteEigenschaften.Controls.Remove($ESTextBoxPrefixE) + $TabSeiteEigenschaften.Controls.Remove($ESTextBoxPrefixA) + $TabSeiteEigenschaften.Controls.Remove($ESTextfeldDateiName) + $TabSeiteEigenschaften.Controls.Remove($ESRadioButtonSimpel) + $TabSeiteEigenschaften.Controls.Remove($ESRadioButtonTIA) + $TabSeiteEigenschaften.Controls.Remove($ESGroupBoxRadioButtons) + $TabSeiteEigenschaften.Controls.Remove($ESLoeschenButton) + $TabSeiteEigenschaften.Controls.Remove($ESSpeichernButton) + } + + # Erstellen der neuen Einträge + + $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei + + $StartPfad = $EinstellungsInhalte[0] + foreach ($EinstellungsZeile in $EinstellungsInhalte) { + $EinstellungsBestandteile = $EinstellungsZeile.Split("|") + if ($EinstellungsBestandteile[0] -eq "Datei") { + $ZielDateien += @([PSCustomObject]@{ + PrefixEingang = $EinstellungsBestandteile[1] + PrefixAusgang = $EinstellungsBestandteile[2] + DateiName = $EinstellungsBestandteile[3] + WandlungsTyp = $EinstellungsBestandteile[4] + }) + } + } + + + $BasisHoehe1 = 80 #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 + + + $ESTextfeldStartPfad.Text = $StartPfad + + $ESTextBoxPrefixENew.Text = "" + $ESTextBoxPrefixANew.Text = "" + $ESTextfeldDateiNameNew.Text = "" + $ESRadioButtonSimpelNew.Checked = $false + $ESRadioButtonTIANew.Checked = $false + + Write-Host "Alle ZielDateien: " $ZielDateien + $FaktorHoehe = 0 + foreach ($ZielDatei in $ZielDateien) { + + # Problem bei diesem Ansatz: $FaktorHoehe wird nicht durch den Zahlenwert ersetzt +<# ${ESSpezial$FaktorHoehe} = New-Object System.Windows.Forms.TextBox + ${ESSpezial$FaktorHoehe}.Location = New-Object System.Drawing.Size(20,400) + $TabSeiteEigenschaften.Controls.Add(${ESSpezial$FaktorHoehe}) #> + + # Anderer Ansatz: Alles in {}.getNewClosure() schreiben. Funktioniert nicht, weil dabei alles innerhalb der {} als Text ausgegeben wird. + + $ESTextBoxPrefixE = New-Object System.Windows.Forms.TextBox + $ESTextBoxPrefixE.Location = New-Object System.Drawing.Size($BasisBreite1,($BasisHoehe3+35*$FaktorHoehe)) + $ESTextBoxPrefixE.Size = New-Object System.Drawing.Size(40,20) + $ESTextBoxPrefixE.Text = $ZielDatei.PrefixEingang + $ESTextBoxPrefixE.Name = "ESTextBoxPrefixE" + $ESTextBoxPrefixE.Add_Click({ + Write-Host "Mein Name ist " $ESTextBoxPrefixE.Name + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixE) + + $ESTextBoxPrefixA = New-Object System.Windows.Forms.TextBox + $ESTextBoxPrefixA.Location = New-Object System.Drawing.Size($BasisBreite2,($BasisHoehe3+35*$FaktorHoehe)) + $ESTextBoxPrefixA.Size = New-Object System.Drawing.Size(40,20) + $ESTextBoxPrefixA.Text = $ZielDatei.PrefixAusgang + $ESTextBoxPrefixA.Name = "ESTextfeldA$FaktorHoehe" + $ESTextBoxPrefixA.Add_Click({ + + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixA) + + $ESTextfeldDateiName = New-Object System.Windows.Forms.TextBox + $ESTextfeldDateiName.Location = New-Object System.Drawing.Size($BasisBreite3,($BasisHoehe3+35*$FaktorHoehe)) + $ESTextfeldDateiName.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeldDateiName.Text = $ZielDatei.DateiName + $ESTextfeldDateiName.Name = "ESTextfeldDateiName$FaktorHoehe" + $ESTextfeldDateiName.Add_Click({ + + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldDateiName) + + $ESRadioButtonSimpel = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonSimpel.Location = New-Object System.Drawing.Size(15,10) + $ESRadioButtonSimpel.Size = New-Object System.Drawing.Size(17,17) + $ESRadioButtonSimpel.Name = "ESRadioButtonSimpel$FaktorHoehe" + + $ESRadioButtonTIA = New-Object System.Windows.Forms.RadioButton + $ESRadioButtonTIA.Location = New-Object System.Drawing.Size(60,10) + $ESRadioButtonTIA.Size = New-Object System.Drawing.Size(17,17) + $ESRadioButtonTIA.Name = "ESRadioButtonTIA$FaktorHoehe" + + $ESGroupBoxRadioButtons = New-Object System.Windows.Forms.GroupBox + $ESGroupBoxRadioButtons.Location = New-Object System.Drawing.Size($BasisBreite4,($BasisHoehe3-5+35*$FaktorHoehe)) + $ESGroupBoxRadioButtons.Size = New-Object System.Drawing.Size(85,30) + $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonSimpel) + $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonTIA) + $TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtons) + + if ($ZielDatei.WandlungsTyp -eq "TIA") { + $ESRadioButtonTIA.Checked = $true + } + else { + $ESRadioButtonSimpel.Checked = $true + } + + $ESLoeschenButton = New-Object System.Windows.Forms.Button + $ESLoeschenButton.Location = New-Object System.Drawing.Size(730,($BasisHoehe3+35*$FaktorHoehe)) + $ESLoeschenButton.Size = New-Object System.Drawing.Size(150,30) + $ESLoeschenButton.Text = "Loeschen" + $ESLoeschenButton.Add_Click({ + Write-Host "Loeschen von " $ZielDatei.DateiName " mit i-Wert " $FaktorHoehe + Write-Host "ZielDateien vor Übergabe: " $ZielDateien + # Todo: Falls es dadurch keine zu erstellenden Eintraege mehr gibt, entweder loeschen verhindern oder neue Eintraege erstellen + EinstellungsDateiAendern "Del" $FaktorHoehe $ZielDateien "" + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESLoeschenButton) + + $ESSpeichernButton = New-Object System.Windows.Forms.Button + $ESSpeichernButton.Location = New-Object System.Drawing.Size(570,($BasisHoehe3+35*$FaktorHoehe)) + $ESSpeichernButton.Size = New-Object System.Drawing.Size(150,30) + $ESSpeichernButton.Text = "Aenderungen Speichern" + $ESSpeichernButton.Add_Click({ + Write-Host "Speichern von " $ZielDatei.DateiName " mit i-Wert " $FaktorHoehe + + if ($ESRadioButtonTIA.Checked) { + $WandlungsTyp = "TIA" + } + else { + $WandlungsTyp = "Simpel" + } + Write-Host "Wandlungstyp: " $WandlungsTyp + + $ZielDateiNeu = @([PSCustomObject]@{ + PrefixEingang = $ESTextBoxPrefixE.Text + PrefixAusgang = $ESTextBoxPrefixA.Text + DateiName = $ESTextfeldDateiName.Text + WandlungsTyp = $WandlungsTyp + }) + Write-Host "Neue ZielDatei vor Übergabe: " $ZielDateiNeu + EinstellungsDateiAendern "Upd" $FaktorHoehe $ZielDateien $ZielDateiNeu + }.GetNewClosure()) + $TabSeiteEigenschaften.Controls.Add($ESSpeichernButton) + + Write-Host "Counter i: " $FaktorHoehe + Write-Host "Wert Zieldatei: " $ZielDatei + + $ESAnzahlEintraegeTextfeld.Text = $FaktorHoehe + + $FaktorHoehe++ + } +} + +Function StartVerzeichnisAendern () +{ + $Explorer = New-Object System.Windows.Forms.FolderBrowserDialog + $Explorer.ShowDialog() + $Pfad = $Explorer.SelectedPath + Write-Host "Einstellungsdatei: " $PfadEinstellungsDatei + Write-Host "Pfad: " $Pfad + #$PfadEinstellungsDatei | Out-File -FilePath $PfadEinstellungsDatei + $DateiInhalt = Get-Content $PfadEinstellungsDatei + $DateiInhalt[0] = $Pfad + Clear-Content $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $DateiInhalt + + AnzeigeAktualisieren "txt" $Pfad + AnzeigeAktualisieren "ver" $Pfad + AnzeigeEinstellungenAktualisieren +} + +Function EinstellungsDateiAendern($Art, $Eintrag, $ZielDateien, $ZielDatei) +{ + # Aendern: Nicht mehr $ZielDateien uebergeben, sondern Verzeichnis der Einstellungsdatei holen und %ZielDateien selber erstellen + + # Anpassen von $ZielDateien + switch ($Art) { + New { + Write-Host "[New] Alte ZielDateien: " $ZielDateien + $ZielDateien += $ZielDatei + + Write-Host "[New] Neue ZielDateien: " $ZielDateien + + # Felder leeren + # Todo: auslagern in AnzeigenEinstellungenAktualisieren. Soll auch gemacht werden, nachdem Einträge geloescht oder veraendert wurden! + $ESTextBoxPrefixENew.Text = "" + $ESTextBoxPrefixANew.Text = "" + $ESTextfeldDateiNameNew.Text = "" + $ESRadioButtonSimpelNew.Checked = $false + $ESRadioButtonTIANew.Checked = $false + } + Upd { + Write-Host "[Upd] Alte ZielDateien: " $ZielDateien + Write-Host "Einzufuegende Zieldatei: " $ZielDatei + + $ZielDateien[$Eintrag] = $ZielDatei + + Write-Host "[Upd] Neue ZielDateien: " $ZielDateien + } + Del { + Write-Host "[Del] Alte ZielDateien: " $ZielDateien ", Eintrag: " $Eintrag + + $i = 0 + foreach ($ZielDatei in $ZielDateien) { + if ($Eintrag -ne $i) { + # Todo: Fehler, wenn man erst Eintrag hinzufuegt und anschließend wieder entfernt ("Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition") + $NeueZielDateien += $ZielDatei + } + $i++ + } + + Clear-Variable ZielDateien + $ZielDateien = $NeueZielDateien + Write-Host "[Del] Neue ZielDateien: " $ZielDateien + } + Default {} + } + + # Schreiben in Einstellungsdatei + $StartPfad = StartPfadHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + # Loeschen der Inhalte der Einstellungsdatei + Clear-Content $PfadEinstellungsDatei + Write-Host "StartPfad: " $StartPfad " Pfad Einstellungsdatei: " $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $StartPfad + foreach ($ZielDatei in $ZielDateien) { + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDatei.PrefixEingang + "|" + $ZielDatei.PrefixAusgang + "|" + $ZielDatei.DateiName + "|" + $ZielDatei.WandlungsTyp) + } + + # Anzeige in Einstellungen aktualisieren + AnzeigeEinstellungenAktualisieren +} + + +#--------------------------------------- Ende Funktionen für GUI ------------------------------- + +Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDatei) +{ + $BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf + $BasisNameZielDateiLaenge = $BasisNameZielDatei.Length + $BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4)) + $GesamtPfadZielDatei = $PfadZielDatei + "\" + $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 ExcelDateiBeschreibenStandard ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 1 + $Eingaenge = @() + $ZuEingang = @("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 + + 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 + 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 + 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++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +Function ExcelDateiBeschreibenSpezial ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 2 + $Eingaenge = @() + $ZuEingang = @("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 = @() + + $Blatt.Cells.Item(1,1) = "Name" + $Blatt.Cells.Item(1,2) = "Path" + $Blatt.Cells.Item(1,3) = "Data Type" + $Blatt.Cells.Item(1,4) = "Logical Address" + $Blatt.Cells.Item(1,5) = "Comment" + $Blatt.Cells.Item(1,6) = "Hmi Visible" + $Blatt.Cells.Item(1,7) = "Hmi Accessible" + $Blatt.Cells.Item(1,8) = "Hmi Writeable" + $Blatt.Cells.Item(1,9) = "Typeobject ID" + $Blatt.Cells.Item(1,10) = "Version ID" + + $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 -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 + 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 + Zeile = $i + }) + } + else + { + Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Zeile = $i + }) + } + + #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar + $Blatt.Cells.Item($i,1) = $Kommentar #Name + $Blatt.Cells.Item($i,2) = "Standard-Variablentabelle" #Path + $Blatt.Cells.Item($i,3) = "Bool" #Data Type + $Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address + #$Blatt.Cells.Item($i,5) = "" #Comment + $Blatt.Cells.Item($i,6) = "'True" #Hmi Visible + $Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible + $Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable + #$Blatt.Cells.Item($i,9) = "" #Typeobject ID + #$Blatt.Cells.Item($i,10) = "" #Version ID + + + $i++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + 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 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 \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst6 - Kommentare.ps1 b/Test-Skripte/GUI-Angepasst6 - Kommentare.ps1 new file mode 100644 index 0000000..64938a5 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst6 - Kommentare.ps1 @@ -0,0 +1,1658 @@ +Function Main +{ + Write-Host "Programmstart" + + # Todo: Wird $ZielDateien wirklich noch im GUI benoetigt? + #$ZielDateien = ZielDateienHolen + #Write-Host "Zieldateien in Main: " $ZielDateien + + $StartPfad = StartPfadHolen + + GUI $StartPfad #$ZielDateien + +} + + + +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 Groeße des Fensters nicht veraendert werden kann + $Fenster.MinimumSize = $Fenster.Size + $Fenster.Text = "Dateikonvertierer txt zu xlsx" + + # 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({ + # Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text + $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({ + # Write-Host "Pfad ausgabe: " $VERPfadFeld.Text + $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) + + #Todo: Ansicht ueberarbeiten! + + $FATextfeld1 = New-Object System.Windows.Forms.Label + $FATextfeld1.Location = New-Object System.Drawing.Size(10,10) + $FATextfeld1.Size = New-Object System.Drawing.Size(200,20) + $FATextfeld1.Text = "Aktuelle Aufgabe" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1) + + $FATextfeld2 = New-Object System.Windows.Forms.Label + $FATextfeld2.Location = New-Object System.Drawing.Size(300,10) + $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(10,40) + $FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60) + $FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen" + $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe) + + $FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox + $FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) + $FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) + $FAListeErledigteAufgaben.Height = 150 + $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,100) + $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,120) + $FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30) + #$FAFortschrittsbar.Name = "Fortschrittsanzeige" + $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,170) + $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,200) + $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,170) + $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,200) + $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({ + # Todo: Speichern + #VerzeichnisAendern (ZielPfad) + }) + $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({ + #Todo: Scheint nicht zu funktionieren + Write-Host "Aenderungen speichern" + EinstellungsDateiAktualisieren + }) + $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" + Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text + $TabBasis.SelectedIndex = 1 +} + +Function ZuFASpringen +{ + Write-Host "Gewaehltes Zielverzeichnis: " $VERPfadFeld.Text + $TabBasis.SelectedIndex = 2 + + $ZielDateien = ZielDateienHolen + + $PfadUrsprungsdatei = $TXTPfadFeld.Text + $PfadZielDateien = $VERPfadFeld.Text + + $AnzahlZielDateien = $ZielDateien.count + Write-Host "Anzahl ZielDateien: " $AnzahlZielDateien + + foreach ($ZielDatei in $ZielDateien) { + AufgabenAktualisieren $("Zieldatei " + $ZielDatei.DateiName + " bearbeiten") + + + $ZielPfad = ExcelDateiNameErstellen $($ZielDatei.DateiName) $PfadUrsprungsdatei $PfadZielDateien + + AufgabenAktualisieren $("Excel Datei erstellen im Verzeichnis " + $ZielPfad) + ExcelDateiErstellen $ZielPfad + + 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 + } + else { + Write-Host "Fehler bei Wandlungsart! Fuehre Simpel-Wandlung durch" + $Gleiche = ExcelDateiBeschreibenSimpel $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad + } + } + + $GleicheEingaenge = $Gleiche[0] + $GleicheAusgaenge = $Gleiche[1] + $Fehler = $Gleiche[2] + + Write-Host "Gleiche Eingaenge: " $GleicheEingaenge + Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge + Write-Host "Fehler: " $Fehler + + AufgabenAktualisieren "Ausgabe Duplikate" + 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) +{ + Write-Host "Ordner anzeigen" + $Optionen = Optionen $AuswahlTyp $Pfad +} +elseif ($Pfad.Length -eq 0) { + Write-Host "Laufwerke anzeigen" + $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) + + # Write-Host ".txt-Datei ausgewaehlt, Pfad: " $Pfad + # Write-Host "Dateityp: " $Pfad.GetType() + 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 + # Write-Host "Laufwerke anzeigen" + $Pfad = "" +} +else +{ + Write-Host "Fehler bei Verzeichnis zurueck" + # Fehler/ Nichts tun? + # Ermitteln: wann tritt dieser Fall ein? + $Pfad = "" +} +AnzeigeAktualisieren $AuswahlTyp $Pfad +return +} + +Function TastenReaktionPfadFeld($AuswahlTyp, $Taste) +{ +# Write-Host "Uebergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrueckt" + $Pfad = $TXTPfadFeld.Text + # Write-Host "Pfad: " $Pfad + + TXTReaktionReturn $Pfad + } + Default { + # Write-Host "Gedrueckte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Return" { + $Pfad = $VERPfadFeld.Text + + AnzeigeAktualisieren "ver" $Pfad + } + Default { + # Write-Host "Gedrueckte Taste: " $Taste + } + } +} +return +} + +Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste) +{ +# Write-Host "Uebergebene Taste: " $Taste +if ($AuswahlTyp -eq "txt"){ + switch ($Taste){ + "Return" { + # Write-Host "Enter gedrueckt" + $Auswahl = $TXTListeOrdnernamen.SelectedItem + $Pfad = $TXTPfadFeld.Text + VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl + } + "Back" { + $Pfad = $TXTPfadFeld.Text + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrueckte Taste: " $Taste + } + } +} +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 { + # Write-Hoste "Gedrueckte Taste: " $Taste + } + } +} + +return +} + +Function TastenReaktionButtons($AuswahlTyp, $Taste) +{ +if ($AuswahlTyp -eq "txt") { + switch ($Taste){ + "Back" { + $Pfad = $TXTPfadFeld.Text + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + # Write-Host "Gedrueckte Taste: " $Taste + } + } +} +elseif ($AuswahlTyp -eq "ver") { + switch ($Taste) { + "Back" { + $Pfad = $VERPfadFeld.Text + VerzeichnisZurueck $AuswahlTyp $Pfad + } + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + ReaktionShiftKey $Pfad $Auswahl + } + Default { + # Write-Host "Gedrueckte Taste: " $Taste + } + } +} +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 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 + { + 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 PfadEinstellungsDateiHolen () { + # Koennte man eigentlich in einer Zeile machen, PS macht da aber Probleme + $AktuellesVerzeichnis = Get-Location + $PfadEinstellungsDatei = $("$AktuellesVerzeichnis\" + "EinstellungenSkriptKonvertierung.txt") + Write-Host "Pfad Einstellungsdatei in Funktion: " $PfadEinstellungsDatei + return $PfadEinstellungsDatei + + # if (Test-Path $PfadEinstellungsDatei) { + # return $PfadEinstellungsDatei + # } + # else { + # return EinstellungsDateiErstellen + # } +} + +Function InhalteEinstellungsDateiHolen () { + # Koennte man eigentlich in einer Zeile machen, PS macht da aber Probleme + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + Write-Host "Pfad Einstellungsdatei: " $PfadEinstellungsDatei + + if (Test-Path $PfadEinstellungsDatei) { + } + else { + $A = EinstellungsDateiErstellen + Write-Host "A-Holder: $A" + } + + $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei + Write-Host "Dateipfad Einstellungsdatei: $PfadEinstellungsDatei" + Write-Host "Zurueckgegebene Einstellungsdatei: $EinstellungsInhalte" + return $EinstellungsInhalte +} + +Function StartPfadHolen () { + $EinstellungsZeilen = InhalteEinstellungsDateiHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + foreach ($EinstellungsZeile in $EinstellungsZeilen) { + $EinstellungsBestandteile = $EinstellungsZeile.Split("|") + if ($EinstellungsBestandteile[0] -eq "StartPfad") { + $StartPfad = $EinstellungsBestandteile[1] + return $StartPfad + } + } + + # Falls kein StartPfad gefunden wurde, soll der Pfad der Einstellungsdatei als Pfad angegeben werden + $StartPfad = Split-Path $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $("StartPfad|" + $StartPfad) + #Write-Host "Zurueckgegebener 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) + #Write-Host "Zurueckgegebener StartPfad: " $StartPfad + 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|WieZielDatei") + 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) { + # Macht aktuell nur begrenzt Sinn. Haupt-Funktion: Intern die Werte korrigiern und beim speichern von neuen Werten nur richtige Werte abspeichern. Ausgegeben werden weiterhin falsche Werte! Todo + foreach ($ZielDatei in $ZielDateien) { + if ($ZielDatei.PrefixEingang.Length -gt 3) { + Write-Host "Ungewoehnlich langen Prefix bei Eingang gefunden: " $ZielDatei.PrefixEingang + $ZielDatei.PrefixEingang = $ZielDatei.PrefixEingang.Substring(0,3) + } + if ($ZielDatei.PrefixAusgang.Length -gt 3) { + Write-Host "Ungewoehnlich langen Prefix bei Ausgang gefunden: " $ZielDatei.PrefixAusgang + $ZielDatei.PrefixAusgang = $ZielDatei.PrefixAusgang.Substring(0,3) + } + if ($ZielDatei.DateiName.Length -gt 150) { + Write-Host "Gefaehrlich langer Dateiname gefunden: " $ZielDatei.DateiName + $ZielDatei.DateiName = $ZielDatei.DateiName.Substring(0,150) + } + if (($ZielDatei.WandlungsTyp -ne "TIA") -and ($ZielDatei.WandlungsTyp -ne "WSCAD") -and ($ZielDatei.WandlungsTyp -ne "Simpel")) { + Write-Host "Falschen Wandlungstyp gefunden: " $ZielDatei.WandlungsTyp + $ZielDatei.WandlungsTyp = "Simpel" + } + $GepruefteZielDateien += @([PSCustomObject]@{ + PrefixEingang = $ZielDatei.PrefixEingang + PrefixAusgang = $ZielDatei.PrefixAusgang + DateiName = $ZielDatei.DateiName + WandlungsTyp = $ZielDatei.WandlungsTyp + }) + } + return $GepruefteZielDateien +} + +Function EinstellungsDateiErstellen () { + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + Write-Host "Funktion EinstellungsDateiErstellen ist gestartet..." + + # Todo: Umbauen: Eintraege via EinstellungsDateiAktualisieren hinzufuegen(?) + # 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 = "%I" + PrefixAusgang = "%Q" + 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) + } + + Write-Host "Funktion EinstellungsDateiErstellen ist abgeschlossen." + 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-Schaltfläche + $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 ($Bereich) +{ + $Explorer = New-Object System.Windows.Forms.FolderBrowserDialog + $Explorer.ShowDialog() + $Pfad = $Explorer.SelectedPath + $DateiInhalt = InhalteEinstellungsDateiHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + Clear-Content $PfadEinstellungsDatei + + foreach ($DateiZeile in $DateiInhalt) { + $DateiBestandTeile = $DateiZeile.Split("|") + if ($DateiBestandTeile[0] -eq $Bereich) { + $DateiBestandTeile[1] = $Pfad + $DateiZeile = $($DateiBestandTeile[0] + "|" + $DateiBestandTeile[1]) + } + Write-Host "DateiZeile: " $DateiZeile + Add-Content $PfadEinstellungsDatei $DateiZeile + } + + # Ansichten aktualisieren zum neuen Startverzeichnis + AnzeigeAktualisieren "txt" $Pfad + VERVorauswahlAnzeigeAktualisieren + $ESTextfeldStartPfad.Text = $Pfad +} + +Function RadioButtonSpeichern () { + # Todo + # In Einstellungsdatei speichern + # Todo: Inhalte erzeugen (if, elseif, else) + + $DateiInhalt = InhalteEinstellungsDateiHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + Clear-Content $PfadEinstellungsDatei + + foreach ($DateiZeile in $DateiInhalt) { + $DateiBestandTeile = $DateiZeile.Split("|") + if ($DateiBestandTeile[0] -eq "VerzeichnisWahl") { + $DateiBestandTeile[1] = $Pfad + $DateiZeile = $($DateiBestandTeile[0] + "|" + $DateiBestandTeile[1]) + } + Write-Host "DateiZeile: " $DateiZeile + Add-Content $PfadEinstellungsDatei $DateiZeile + } + # Ansicht Einstellungen ggf. ausblenden + # Ansicht ver aktualisieren +} + +Function EinstellungsDateiAktualisieren () +{ + # Erstellen von $ZielDateien + for ($i = 0; $i -lt ($ESListeEinstellungen.RowCount-1); $i++) { + $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 + Write-Host "ZielDateien: " $ZielDateien + + # Schreiben in Einstellungsdatei + $StartPfad = StartPfadHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + # Loeschen der Inhalte der Einstellungsdatei + Clear-Content $PfadEinstellungsDatei + Write-Host "StartPfad: " $StartPfad " Pfad Einstellungsdatei: " $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $("StartPfad|" + $StartPfad) + foreach ($ZielDatei in $ZielDateien) { + Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDatei.PrefixEingang + "|" + $ZielDatei.PrefixAusgang + "|" + $ZielDatei.DateiName + "|" + $ZielDatei.WandlungsTyp) + } + + # 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 ExcelDateiErstellen ($DateiPfad) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Add() + $Mappe.SaveAs($DateiPfad) + $Datei.Quit() + + return +} + +Function ExcelDateiBeschreibenSimpel ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 1 + $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 + + 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 + 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 + 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++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +Function ExcelDateiBeschreibenTIA ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 2 + $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 = @() + + $Blatt.Cells.Item(1,1) = "Name" + $Blatt.Cells.Item(1,2) = "Path" + $Blatt.Cells.Item(1,3) = "Data Type" + $Blatt.Cells.Item(1,4) = "Logical Address" + $Blatt.Cells.Item(1,5) = "Comment" + $Blatt.Cells.Item(1,6) = "Hmi Visible" + $Blatt.Cells.Item(1,7) = "Hmi Accessible" + $Blatt.Cells.Item(1,8) = "Hmi Writeable" + $Blatt.Cells.Item(1,9) = "Typeobject ID" + $Blatt.Cells.Item(1,10) = "Version ID" + #Todo: Zweites Tabellenblatt (s. Beispiel-Export von Christian) benoetigt? + #Todo: Muss/Soll Tabellblatt 1 "PLC Tags" heißen? (s. Beispiel-Export von Christian) + + $Ursprungdatei = Get-Content $PfadUrsprungsdatei + + 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]","") + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $BMKZahl = $PrefixEingang + $BMKZahl + $Eingaenge += @([PSCustomObject]@{ + Name = $BMKZahl + 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 + Zeile = $i + }) + } + else + { + Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Zeile = $i + }) + } + + #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar " BMKZahlOriginal: " $BMKZahlOriginal + $Blatt.Cells.Item($i,1) = $BMKZahlOriginal #Name + $Blatt.Cells.Item($i,2) = "WSCAD-Export" #Path + $Blatt.Cells.Item($i,3) = "Bool" #Data Type + $Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address + $Blatt.Cells.Item($i,5) = $Kommentar #Comment + $Blatt.Cells.Item($i,6) = "'True" #Hmi Visible + $Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible + $Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable + #$Blatt.Cells.Item($i,9) = "" #Typeobject ID + #$Blatt.Cells.Item($i,10) = "" #Version ID + + $i++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +Function ExcelDateiBeschreibenWSCAD ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + $Datei = New-Object -ComObject Excel.Application + $Mappe = $Datei.Workbooks.Open($ZielDatei) + $Blatt = $Mappe.WorkSheets.item(1) + $Datei.Visible = $false + + $i = 2 + $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 = @() + + $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" + + $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 -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 + 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 + Zeile = $i + }) + } + else + { + Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Zeile = $i + }) + } + + #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar + $Blatt.Cells.Item($i,1) = $BMKZahl #Anschluss Todo: Passt das so? In Muster ist die Zahl der BMKZahl teilweise nur zweistellig; es kommen außerdem auch "X", "P" und "C" vor + $Blatt.Cells.Item($i,2) = $Kommentar #Kommentar Todo: Passt das so? In Muster teilweise leer(?) + #$Blatt.Cells.Item($i,3) = "" #Symboltext + #$Blatt.Cells.Item($i,4) = "" #Bezug + + $i++ + + DateiBeschreibenAktualisieren + } + + $Mappe.Save() + $Datei.Quit() + + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge + Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge + Write-Host "Fehler bei: " $Fehler + + 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)] + #Write-Host "Gleiche: " $Gleiche + } + } + + if ( $($Gleiche.Length -eq 0)) + { + $Gleiche += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $Gleiche +} + + +Main \ No newline at end of file diff --git a/Test-Skripte/GUI-Angepasst6.ps1 b/Test-Skripte/GUI-Angepasst6.ps1 new file mode 100644 index 0000000..320eb53 --- /dev/null +++ b/Test-Skripte/GUI-Angepasst6.ps1 @@ -0,0 +1,2142 @@ +Function Main +{ + #Generieren des StartPfades, damit dieser im GUI direkt angezeigt wird + $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" + $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) + + #Mit dieser Variable sollen ungewollt zurueckgegebene Werte der Funktion abgefangen werden, um Probleme im spaeteren Programmverlauf zu verhindern + $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" + $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" + $TabSeiteFortschrittsanzeige.DataBindings.DefaultDataSourceUpdateMode = 0 + $TabBasis.Controls.Add($TabSeiteFortschrittsanzeige) + + #Textfeld fuer Konstante "Aktuelle Aufgabe" + $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) + + #Textfeld fuer Konstante "Erledigte Aufgaben" + $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) + + #TextfeldAktuelleAufgabe + $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) + + #ListeErledigteAufgaben + $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) + + #Textfeld fuer Konstante "Fortschritt Excel-Dateien beschreiben" + $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) + + #Fortschrittsbar fuer das Schreiben von Werten in die Excel-Tabelle + $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) + + #Textfeld zum globalen zwischenspeichern des aktuellen Werts fuer obige Fortschrittsbar, um exaktere Werte nutzen zu koennen + $FATextfeldRealwertFortschrittsbar = New-Object System.Windows.Forms.Label + + #Textfeld fuer Konstante "Bearbeitete Eintraege:" + $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) + + #Textfeld fuer Konstante "Gesamteintraege:" + $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) + + #TextfeldBearbeitetEintraege fuer die Ausgabe eines Zahlenwerts beim schreiben von Werten in die Excel-Tabelle + $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) + + #TextfeldGesamtEintraege fuer die Ausgabe der insgesamt zu schreibenden Eintraege in die Excel-Tabelle + $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" + $TabSeiteDuplikate.DataBindings.DefaultDataSourceUpdateMode = 0 + $TabBasis.Controls.Add($TabSeiteDuplikate) + + #Textfeld fuer Konstante "Bei den Eingaengen gibt es folgende Duplikate: " + $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) + + #ListeEingaenge zur Ausgabe der doppelt genutzten Eingaenge + $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) + + #Textfeld fuer Konstante "Bei den Ausgaengen gibt es folgende Duplikate: " + $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) + + #ListeAusgaenge zur Ausgabe der doppelt genutzten Ausgaenge + $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) + + #Textfeld fuer Konstante "Folgende Eintraege konnten keinem Betriebsmittel zugewiesen werden: " + $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) + + #ListeFehler zur Ausgabe von Eintraegen, die weder einem Ein-, noch einem Ausgang zugeordnet werden konnten + $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) + + #BestaetigenButton zum beenden des Programms + $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" + $TabSeiteEigenschaften.DataBindings.DefaultDataSourceUpdateMode = 0 + $TabBasis.Controls.Add($TabSeiteEigenschaften) + + #Zum festlegen eines gleichen Abstands zum linken Rand + $BasisBreite = 10 + + #Textfeld fuer Konstante "Startverzeichnis Auswahl .txt-Datei: " + $ESTextfeld1 = New-Object System.Windows.Forms.Label + $ESTextfeld1.Location = New-Object System.Drawing.Size($BasisBreite,10) + $ESTextfeld1.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeld1.Text = "Startverzeichnis Auswahl .txt-Datei:" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld1) + + #Textfeld zur Ausgabe des aktuell gespeicherten StartPfades + $ESTextfeldStartPfad = New-Object System.Windows.Forms.Label + $ESTextfeldStartPfad.Location = New-Object System.Drawing.Size(($BasisBreite+200),10) + $ESTextfeldStartPfad.Size = New-Object System.Drawing.Size(510,20) + $TabSeiteEigenschaften.Controls.Add($ESTextfeldStartPfad) + + #StartPfadAenderButton + $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) + + #Textfeld fuer Konstante "Startverzeichnis bei Auswahl des Zielverzeichnisses der Datei(en): " + $ESTextfeld2 = New-Object System.Windows.Forms.Label + $ESTextfeld2.Location = New-Object System.Drawing.Size($BasisBreite,45) + $ESTextfeld2.Size = New-Object System.Drawing.Size(450,20) + $ESTextfeld2.Text = "Startverzeichnis bei Auswahl des Zielverzeichnisses der Datei(en):" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld2) + + #RadioButtonWieTXT + $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" + + #RadioButtonWieZieldatei + $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" + + #RadioButtonEigenerPfad + $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" + + #GroupBoxRadioButtons zum gruppieren der obigen RadioButtons + $ESGroupBoxRadioButtons = New-Object System.Windows.Forms.GroupBox + $ESGroupBoxRadioButtons.Location = New-Object System.Drawing.Size(($BasisBreite),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) + + #SpeichernButton + $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) + + #Textfeld fuer Konstante "Startverzeichnis Auswahl Zielverzeichnis: " + $ESTextfeld3 = New-Object System.Windows.Forms.Label + $ESTextfeld3.Location = New-Object System.Drawing.Size($BasisBreite,95) + $ESTextfeld3.Size = New-Object System.Drawing.Size(250,20) + $ESTextfeld3.Text = "Startverzeichnis Auswahl Zielverzeichnis:" + + #TextfeldZielPfad + $ESTextfeldZielPfad = New-Object System.Windows.Forms.Label + $ESTextfeldZielPfad.Location = New-Object System.Drawing.Size(($BasisBreite+250),95) + $ESTextfeldZielPfad.Size = New-Object System.Drawing.Size(460,20) + + #ZielPfadAendernButton + $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 + + #Textfeld fuer Konstante "Zieldateien:" + $ESTextfeld4 = New-Object System.Windows.Forms.Label + $ESTextfeld4.Location = New-Object System.Drawing.Size($BasisBreite,140) + $ESTextfeld4.Size = New-Object System.Drawing.Size(200,20) + $ESTextfeld4.Text = "Zieldateien:" + $TabSeiteEigenschaften.Controls.Add($ESTextfeld4) + + #AenderungeSpeichernButton zum speichern der Werte aus der Tabelle mit den ZielDateien + $ESAenderungenSpeichernButton = New-Object System.Windows.Forms.Button + $ESAenderungenSpeichernButton.Location = New-Object System.Drawing.Size(730,$170) + $ESAenderungenSpeichernButton.Size = New-Object System.Drawing.Size(150,30) + $ESAenderungenSpeichernButton.Text = "Aenderungen Speichern" + $ESAenderungenSpeichernButton.Add_Click({ + EinstellungenZielDateienSpeichern + }) + $TabSeiteEigenschaften.Controls.Add($ESAenderungenSpeichernButton) + + #ListeEinstellungen mit den ZielDateien und zugehoerigen Einstellungen + $ESListeEinstellungen = New-Object System.Windows.Forms.DataGridView + $ESListeEinstellungen.Location = New-Object System.Drawing.Size(10,$170) + $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) + + #Tab "Einstellungen" mit Werten beim Start befuellen + AnzeigeEinstellungenInitialisieren + + $Fenster.Add_Shown({$Fenster.Activate()}) + [void]$Fenster.ShowDialog() + + return +} + +#------------------- Funktion nur fuer das txt-GUI -------------------------- + +#Funktion, die beim druecken der Enter-Taste ausgeloest wird, wenn man im Dateiauswahl-Bereich ist +Function TXTReaktionReturn ($Pfad) +{ + #Ueberpruefen, ob der uebergebene Pfad vorhanden ist + if (PfadExistiert $Pfad) + { + #Ende des Pfads trennen + $PfadEnde = $(Split-Path $Pfad -Leaf) + #Bei Auswahl einer Datei mit der Endung ".txt" + if ($($PfadEnde -match ".txt")) + { + #In den Tab zur Auswahl des Zielverzeichnisses wechseln + ZuVERSpringen + #Loest unbekannte Probleme in der GUI + $TXTPfadFeld.Text = $Pfad + return + } + #Bei Auswahl eines Ordners + else + { + AnzeigeAktualisieren "txt" $Pfad + } + } + #Der Pfad ist ungueltig/ existiert nicht + else + { + #Springe in die Verzeichnisauswahl + AnzeigeAktualisieren "txt" "" + } + return +} + +#------------------- Funktion nur fuer das VerzeichnisWaehlen-GUI -------------------------- + +#Funktion, die beim bestaetigen des aktuellen Verzeichnisses genutzt wird. Sie ueberprueft zunaechst, ob das Verzeichnis vorhanden ist und wechselt dann ggf. in den Tab Fortschrittsanzeige +Function VERAuswahlBestaetigt($Pfad, $Auswahl) +{ + #Zusammenfuegen von $Pfad und $Auswahl + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve + + #Ueberpruefen, ob der Pfad vorhanden ist + if (PfadExistiert $Pfad) + { + #Wechseln in den Tab der Fortschrittsanzeige + ZuFASpringen + #Loest unbekannte Probleme in der GUI + $VERPfadfeld.Text = $Pfad + return + } +} + +#Funktion, die vorauswahl fuer die Funktion AnzeigeAktualisieren trifft, weil je nach gewaehlter Nutzer-Einstellung anders reagiert werden muss +Function VERVorauswahlAnzeigeAktualisieren () { + # Todo: Soll evtl. in AnzeigeAktualisieren migriert werden. Problem: Innerhalb der Verzeichniswahl koennte man dann evtl. nicht mehr navigieren. + #Generieren des Werts des RadioButtons + $RadioButton = RadioButtonHolen + switch ($RadioButton) { + EigenerPfad { + $ZielPfad = ZielPfadHolen + AnzeigeAktualisieren "ver" $ZielPfad + } + WieTXT { + $StartPfad = StartPfadHolen + AnzeigeAktualisieren "ver" $StartPfad + } + WieZielDatei { + AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + } + #Falls der Wert ungueltig ist, wird in das gleiche Verzeichnis gesprungen, dass auch bei der .txt-Datei ausgewaehlt wurde + Default { + AnzeigeAktualisieren "ver" $TXTPfadFeld.Text + } + } +} + + +#------------------- Funktionen zum wechseln der Tabs -------------------------- + +#Funktion, die in den Tab zur Verzeichnisauswahl des Zielverzeichnisses wechselt und dabei benoetigte Schritte durchfuehrt +Function ZuVERSpringen +{ + VERVorauswahlAnzeigeAktualisieren + AufgabenAktualisieren "Zielverzeichnis auswaehlen" + $TabBasis.SelectedIndex = 1 +} + +#Funktion, die in den Tab zur Fortschrittsanzeige wechselt und dabei benoetigte Schritte durchfuehrt +Function ZuFASpringen +{ + $TabBasis.SelectedIndex = 2 + + #Ermitteln von Variablen + $ZielDateien = ZielDateienHolen + $PfadUrsprungsdatei = $TXTPfadFeld.Text + $PfadZielDateien = $VERPfadFeld.Text + + #Fuer jede in der Einstellungsdatei hinterlegte Zieldatei die Konvertierung durchfuehren + foreach ($ZielDatei in $ZielDateien) { + #Erstellen des Zielpfads + $ZielPfad = ExcelDateiNameErstellen $($ZielDatei.DateiName) $PfadUrsprungsdatei $PfadZielDateien + + AufgabenAktualisieren $("Excel-Datei $($ZielDatei.DateiName) erstellen") + + #Unterscheiden des Wandlungstyps und aufruf der entsprechenden Funktion; kein oder falscher Wandlungstyp gilt als "Simpel" + 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 + } + else { + $Gleiche = ExcelDateiBeschreibenSimpel $PfadUrsprungsdatei $($ZielDatei.PrefixEingang) $($ZielDatei.PrefixAusgang) $ZielPfad + } + } + + #Aufteilen der Rueckgabe in gleiche Eingaenge, gleiche Ausgaenge und Betriebsmittel, die weder Ein- noch Ausgaengen zugeordnet werden koennen, also Fehler sind + $GleicheEingaenge = $Gleiche[0] + $GleicheAusgaenge = $Gleiche[1] + $Fehler = $Gleiche[2] + + AufgabenAktualisieren "Ausgabe Duplikate und Fehler" + #Wechseln in die Ansicht zur Ausgabe von Duplikaten und Fehlern + ZuDPSpringen $GleicheEingaenge $GleicheAusgaenge $Fehler +} + +#Funktion, die in den Tab zur Ansicht der Ausgabe von Duplikaten und Fehlern wechselt und dabei benoetigte Schritte durchfuehrt +Function ZuDPSpringen ($GleicheEingaenge, $GleicheAusgaenge, $Fehler) +{ + #Liste der gleichen Eingaenge befuellen + foreach ($GleichenEingang in $GleicheEingaenge) { + $DPListeEingaenge.Rows.Add($($GleichenEingang.Zeile),($GleichenEingang.Name)) + } + + #Liste der gleichen Ausgaenge befuellen + foreach ($GleichenAusgang in $GleicheAusgaenge) { + $DPListeAusgaenge.Rows.Add($($GleichenAusgang.Zeile),($GleichenAusgang.Name)) + } + + #Liste der nicht zuweisbaren Zeilen befuellen + foreach ($Fehlen in $Fehler) { + $DPListeFehler.Rows.Add($($Fehlen.Zeile),($Fehlen.Name)) + } + + #Tab oeffnen + $TabBasis.SelectedIndex = 3 + + # Werte zuruecksetzen, um weitere durchlauefe zu ermoeglichen + # Todo: Fehler und Duplikate zuruecksetzen!!! Ueberpruefen, ob weitere Werte zurueckgesetzt werden muessen + VERVorauswahlAnzeigeAktualisieren + AnzeigeAktualisieren "txt" $($ESTextfeldStartPfad.Text) + $FAFortschrittsbar.Value = 0 + $FATextfeldBearbeiteteEintraege.Text = "0" +} + +#------------------- Funktionen fuer alle GUIs -------------------------- + + +#Funktion, um die Ansicht der Datei- und Ordnerauswahl zu aktualisieren +#Bei falschem/ nicht existierendem/ leeren Pfad wird in die Ansicht zur Laufwerkswahl gewechselt +Function AnzeigeAktualisieren ($AuswahlTyp, $Pfad) +{ +# Ueberpruefen, ob es das Verzeichnis gibt +if (PfadExistiert $Pfad) +{ + #Ermitteln der Auswahloptionen (Ordner und ggf. .txt-Dateien) + $Optionen = Optionen $AuswahlTyp $Pfad +} +else { + #Ermitteln der Auswahloptionen (Laufwerke) + $Optionen = LaufwerkeFinden + $Pfad = "" +} + +#Nur fuer die Ansicht bei Auswahl einer .txt-Datei: Aktualisieren der GUI +if ($($AuswahlTyp -eq "txt")) { + $TXTPfadFeld.Text = $Pfad + $TXTListeOrdnernamen.Items.Clear() + foreach ($Option in $Optionen) + { + if ($Option.Length -gt 0) + { + $TXTListeOrdnernamen.Items.Add($Option) + } + } +} +#Nur fuer die Ansicht bei Auswahl eines Verzeichnisses: Aktualisieren der GUI +elseif ($($AuswahlTyp -eq "ver")) { + $VERPfadFeld.Text = $Pfad + $VERListeOrdnernamen.Items.Clear() + foreach ($Option in $Optionen) + { + if ($Option.Length -gt 0) + { + $VERListeOrdnernamen.Items.Add($Option) + } + } +} +return +} + +#Funktion, die bei Auswahl eines Verzeichnisses oder einer .txt-Datei aufgerufen wird, um Fehler zu erkennen +Function VerzeichnisAuswaehlen ($AuswahlTyp, $Pfad, $Auswahl) +{ +#Falls das bisherige Verzeichnis existiert, fuege es mit der getroffenen Auswahl zusammen +if (PfadExistiert $Pfad) +{ + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve +} +#Falls der Pfad die Laenge 0 hat, wurde ein Laufwerk gewaehlt +elseif ($Pfad.Length -eq 0) { + $Pfad = $Auswahl +} +#Fehlerfall/ ungueltiger Pfad: zurueck zu Laufwerken navigieren +else { +$Pfad = "" +} + +#Erkennen, ob .txt-Datei gewaehlt wurde -> ggf. Auswahl abgeschlossen +#Falls es der Aufruf vom Reiter der Auswahl der txt-Dateiauswahl war und der gewaehlte Eintrag die Endung ".txt" hat, ist die Auswahl abgeschlossen +if ($($($Auswahl -match ".txt") -and $($AuswahlTyp -eq "txt"))) +{ + #Fuer den Gesamtfortschritt Anzahl Dateien auslesen und mit der Anzahl der zu erstellenden Dateien (=Zeilen in der urspruenglichen Datei) multiplizieren + #Dies ist nur die Mindestanzahl der Eintraege, die sich erhoet, falls nicht alle Anschluesse der SPS genutzt werden (i.d.R. der Fall). Dies erfolgt in der Funktion "AnschluesseErgaenzen" + $Datei = Get-Content $Pfad + $ZielDateien = ZielDateienHolen + $FATextfeldGesamtEintraege.Text = $($ZielDateien.count) * $($Datei.Length) + + #In die Ansicht der Verzeichniswahl wechseln + ZuVERSpringen + #Loest unbekannte Probleme in der GUI + $TXTPfadFeld.Text = $Pfad + return +} +#Aktualisieren der entsprechenden Ansicht mit dem neuen Pfad +AnzeigeAktualisieren $AuswahlTyp $Pfad +return +} + +#Funktion, die den Tastendruck der Loeschen-Taste managt +Function VerzeichnisZurueck ($AuswahlTyp, $Pfad) +{ +#Falls die Laenge des bisherigen Pfades min. 3 Zeichen lang ist, muessen anschließend Ordner angezeigt werden, ansonsten Laufwerke +if ($Pfad.Length -gt 3) +{ + $Pfad = Split-Path $Pfad +} +else +{ + $Pfad = "" +} +#Aktualisieren der entsprechenden Ansicht mit dem neuen Pfad +AnzeigeAktualisieren $AuswahlTyp $Pfad +return +} + +#Funktion, die auf Tastendruck im PfadFeld reagiert +Function TastenReaktionPfadFeld($AuswahlTyp, $Taste) +{ +#Unterscheiden, ob der Tastendruck in der Ansicht der Verzeichnisauswahl oder der .txt-Dateiauswahl erfolgt ist +if ($AuswahlTyp -eq "txt") { + #Unterscheiden, welche Taste gedrueckt wurde + switch ($Taste){ + "Return" { + $Pfad = $TXTPfadFeld.Text + TXTReaktionReturn $Pfad + } + Default { + } + } +} +elseif ($AuswahlTyp -eq "ver") { + #Unterscheiden, welche Taste gedrueckt wurde + switch ($Taste) { + "Return" { + $Pfad = $VERPfadFeld.Text + AnzeigeAktualisieren "ver" $Pfad + } + Default { + } + } +} +return +} + +#Funktion, die auf Tastendruck in der Liste der Ordnernamen reagiert +Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste) +{ +#Unterscheiden, ob der Tastendruck in der Ansicht der Verzeichnisauswahl oder der .txt-Dateiauswahl erfolgt ist +if ($AuswahlTyp -eq "txt"){ + #Unterscheiden, welche Taste gedrueckt wurde + 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") { + #Unterscheiden, welche Taste gedrueckt wurde + switch ($Taste) { + "Return" { + $Auswahl = $VERListeOrdnernamen.SelectedItem + $Pfad = $VERPfadFeld.Text + VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl + } + "Back" { + $Pfad = $VERPfadFeld.Text + VerzeichnisZurueck $AuswahlTyp $Pfad + } + #ShiftKey bedeutet, dass das aktuelle verzeichnis bestaetigt werden soll + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + ReaktionShiftKey $Pfad $Auswahl + } + Default { + } + } +} + +return +} + +#Funktion, die auf Tastendruck auf den Buttons/Knoepfen reagiert +Function TastenReaktionButtons($AuswahlTyp, $Taste) +{ +#Unterscheiden, ob der Tastendruck in der Ansicht der Verzeichnisauswahl oder der .txt-Dateiauswahl erfolgt ist +if ($AuswahlTyp -eq "txt") { + #Unterscheiden, welche Taste gedrueckt wurde + switch ($Taste){ + "Back" { + $Pfad = $TXTPfadFeld.Text + # Pfad aktualisieren + VerzeichnisZurueck $AuswahlTyp $Pfad + } + Default { + } + } +} +elseif ($AuswahlTyp -eq "ver") { + #Unterscheiden, welche Taste gedrueckt wurde + switch ($Taste) { + "Back" { + $Pfad = $VERPfadFeld.Text + VerzeichnisZurueck $AuswahlTyp $Pfad + } + #ShiftKey bedeutet, dass das aktuelle verzeichnis bestaetigt werden soll + "ShiftKey" { + $Pfad = $VERPfadFeld.Text + $Auswahl = $VERListeOrdnernamen.SelectedItem + ReaktionShiftKey $Pfad $Auswahl + } + Default { + } + } +} +return +} + +#Funktion, die in Abhaenigigkeit des Pfades und des Auswahltyps (.txt-Datei oder Verzeichnis) die Auswahloptionen (also Unterordner oder Unterordner und .txt-Dateien) zurueckgibt +Function Optionen($AuswahlTyp, $Pfad) +{ +#Zuweisen der Unterordner +#Typzuweisung noetig, da aus unbekanntem Grund sonst Unterordner, die mit "_" beginnen, nicht gefunden werden koennen +[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad + +#Bei Auswahltp "txt" zusaetzlich auch diese zuweisen und alles zurueckgeben +if ($AuswahlTyp -eq "txt") { + $TxtDateien = TxtDateienFinden $Pfad + #Gibt auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurueck, verursacht aber keine Probleme + $Optionen = $UnterOrdner + $TxtDateien +} +#Bei Auswahltyp "ver" sind die Optionen nur die Unterordner +elseif ($AuswahlTyp -eq "ver") { + #Gibt auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurueck, verursacht aber keine Probleme + $Optionen = $UnterOrdner +} +return $Optionen +} + +#Funktion, die ueberprueft, ob ein gegebener Pfad vorhanden ist. Pfad mit der Endung "*.txt" werden auch als vorhanden gewertet +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 +} +} + +#Funktion, die eine Liste der Laufwerke zurueckgibt +Function LaufwerkeFinden() +{ +#Festlegen der Laufwerksbuchstaben. Mit der Where-Object Bedingung werden virtuell von Powershell erzeugte Laufwerke entfernt +$Laufwerke = $(Get-PSDrive | Where-Object {$_.Free}).Name + +#Hinzufuegen von ":\" an die Laufwerksbuchstaben, damit diese passend fuer den Pfad sind +$i = 0 +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} +return $Laufwerke +} + +#Funktion, die in Abhaengigkeit des Pfades eine Liste der Unterordner dieses Pfades zurueckgibt +Function UnterOrdnerFinden($Pfad) +{ +#Festlegen der Unterordner +$UnterOrdner = $(Get-ChildItem $Pfad -Directory) + +#Falls es Unterordner gibt, wird der restliche Pfad entfernt +if ($($UnterOrdner.Length -gt 0)) +{ + $Ordner = $(Split-Path $UnterOrdner -Leaf) +} +else { + $Ordner = "" +} + +return $Ordner +} + +#Funktion, die bei einer gegebenen Datei ueberprueft, ob diese Kompatibel ist fuer die Konvertierung +function KompatibilitaetsCheck ($SpeicherOrt){ + $Inhalte = Get-Content $SpeicherOrt + #Dateien mit der Laenge 0 (also keinem Inhalt) gelten als nicht kompatibel + if ($Inhalte.Length -eq 0) { + return $false + } + else { + #Gehe durch alle Zeilen der Datei. Falls eine Zeile nicht korrekt ist, wird $false zurueckgegeben + foreach ($Zeile in $Inhalte) { + if (-not ($Zeile -match "'\w+','.+'") -and $Zeile.Length -gt 0) { + return $false + } + } + } + #Wenn keine Zeile falsch war, gilt die Datei als kompatibel + return $true +} + +#Funktion, die in Abhaengigkeit eines Pfades eine Liste der .txt-Dateien zurueckgibt. Es werden nur fuer die Konvertierung kompatible Dateien zurueckgegeben +Function TxtDateienFinden($Pfad) +{ +#Definieren aller im Verzeichnis vorhandenen .txt-Dateien +$TxtDateien = $(Get-Childitem $Pfad\*.txt) +$KompatibleTxtDateien = @() + +#Falls .txt-Dateien gefunden wurden, pruefe diese auf kompatibilitaet +if ($TxtDateien.Length -gt 0) +{ + #Jede Datei, die kompatibel ist, wird dem Arry $KompatibleTxtDateien hinzugefuegt + foreach ($TxtDatei in $TxtDateien) { + if (KompatibilitaetsCheck $TxtDatei) { + $KompatibleTxtDateien += $TxtDatei + } + } + #Falls kompatible .txt-Dateien gefunden wurden, gebe deren Namen zurueck + if ($KompatibleTxtDateien.Length -gt 0) { + return $(Split-Path $KompatibleTxtDateien -Leaf) + } + else { + return + } +} +else +{ + return +} +} + +#Funktion, die den Tastedruck der Shift-Taste verarbeitet +Function ReaktionShiftKey ($Pfad, $Auswahl) +{ + #Falls das Verzeichnis existiert, ist die Auswahl des Zielverzeichnisses abgeschlossen + if (PfadExistiert $Pfad) + { + VERAuswahlBestaetigt $Pfad $Auswahl + } + #Falls das Verzeichnis nicht existiert, zeige die Laufwerke an + else + { + AnzeigeAktualisieren "ver" "" + } + return +} + + +#Funktion, die sowohl die aktuell uebergebene Aufgabe ausgibt, als auch die Liste der vorher durchgefuehrten Aufgaben aktualisiert +Function AufgabenAktualisieren ($Aufgabe) +{ + #Die zuletzt ausgefuehrte Aufgabe zu den erledigten Aufgaben hinzufuegen + $FAListeErledigteAufgaben.Items.Add($FATextfeldAktuelleAufgabe.Text) + #Die uebergebene Aufgabe als aktuell durchgefuehrte Aufgabe ausgeben + $FATextfeldAktuelleAufgabe.Text = $Aufgabe +} + +#Funktion, die den Fortschrittsbalken des Dateibeschreibens bei jedem Aufruf um einen Anteil der Gesamteintraege weiter bewegt +Function DateiBeschreibenAktualisieren +{ + #Stelle fest, um welchen Wert die Anzeige pro Aufruf der Funktion erhoeht werden muss. Der Wert ist entspricht 100 Prozent fortschritt + $AnteilJeAufruf = 100 / $($FATextfeldGesamtEintraege.Text) + #Erhoehen des gespeicherten Werts der Fortschrittsbar um den vorher ermittelten Anteil Aufruf + #Der Wert wird versteckt in einem Textfeld in der GUI gespeichert, weil der Wert von $FAFortschrittsbar.Value zu ungenau ist + [System.double] $FATextfeldRealwertFortschrittsbar.Text += $AnteilJeAufruf + + #Da $FAFortschrittsbar.Value sich wie ein int verhaelt, ist der letzte Wert i. d. R. hoeher als 100 -> Fehler, der hiermit abgefangen wird, indem dann der Wert 100 zugewiesen wird + if ($([System.Double]$FATextfeldRealwertFortschrittsbar.Text) -ge 100) + { + $FAFortschrittsbar.Value = 100 + } + #Weise ansonsten den tatsaechlichen Wert der Fortschrittsbar zu + else + { + $FAFortschrittsbar.Value = $FATextfeldRealwertFortschrittsbar.Text + } + + #Ermitteln der bisher bearbeiteten Eintraege und erhoehen des Werts + [System.Int64] $BearbeiteteEintraege = $FATextfeldBearbeiteteEintraege.Text + $BearbeiteteEintraege++ + #Aktualisieren der Ausgabe der bearbeiteten Eintraege + $FATextfeldBearbeiteteEintraege.Text = $BearbeiteteEintraege +} + +#--------------------------------------- Start Funktionen fuer Einstellungen ------------------------------- + +#Funktion, die den Benutzernamen des aktuell angemeldeten Benutzers ausgibt +Function BenutzerNameHolen () { + return $env:USERNAME +} + +#Funktion, die den Pfad mit Namen der Einstellungsdatei zurueckgibt. Die Einstellungsdatei liegt im gleichen Verzeichnis, in dem das Skript abgespeichert ist +Function PfadEinstellungsDateiHolen () { + # Koennte man eigentlich in einer Zeile machen, aber PS macht da Probleme + $AktuellesVerzeichnis = Get-Location + #Fuer persoenliche Einstellungsdateien werden diese in Abhaengigkeit des Benutzernamens erstellt + $Benutzer = BenutzerNameHolen + $PfadEinstellungsDatei = $("$AktuellesVerzeichnis\" + "EinstellungenSkriptKonvertierung_" + $Benutzer + ".txt") + return $PfadEinstellungsDatei +} + +#Funktion, die die Inhalte (also den Text) der Einstellungsdatei zurueckgibt +Function InhalteEinstellungsDateiHolen () { + #Festlegen des Pfades + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + #Ueberpruefen, ob es den Pfad gibt. Falls er nicht vorhanden ist, erstellen der Einstellungsdatei + if (-not (Test-Path $PfadEinstellungsDatei)) { + #Die Funktion muss zugewiesen werden, weil sonst (zufaellige) Rueckgaben Probleme verursachen + $A = EinstellungsDateiErstellen + } + else { + $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei + return $EinstellungsInhalte + } +} + +#Funktion, die den StartPfad fuer die Auswahl der .txt-Datei aus der Einstellungsdatei ausliest und zurueckgibt +Function StartPfadHolen () { + #Inhalte der Einstellungsdatei speichern + $EinstellungsZeilen = InhalteEinstellungsDateiHolen + + #Durch jede Zeile der Einstellungsdatei iterieren. Sobald in einer Zeile die Einstellung fuer StartPfad gefunden wird, wird der Wert dieser Zeile zurueckgegeben + #Sollte es mehrere Zeilen geben, in denen der StartPfad angegeben ist, wird also nur der als erstes Gefundene (also i. d. R. der Oberste) beruecksichtigt + #Falls der gefundene StartPfad nicht existiert, wird stattdessen das Verzeichnis des Skripts zurueckgegeben + 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. Dieser wird auch in der Einstellungsdatei gespeichert. + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + $StartPfad = Split-Path $PfadEinstellungsDatei + Add-Content $PfadEinstellungsDatei $("StartPfad|" + $StartPfad) + return $StartPfad +} + +#Funktion, die den StartPfad fuer die Auswahl des Zielverzeichnisses aus der Einstellungsdatei ausliest und zurueckgibt +Function ZielPfadHolen () { + #Inhalte der Einstellungsdatei speichern + $EinstellungsZeilen = InhalteEinstellungsDateiHolen + + #Durch jede Zeile der Einstellungsdatei iterieren. Sobald in einer Zeile die Einstellung fuer ZielPfad gefunden wird, wird der Wert dieser Zeile zurueckgegeben + #Sollte es mehrere Zeilen geben, in denen der ZielPfad angegeben ist, wird also nur der als erstes Gefundene (also i. d. R. der Oberste) beruecksichtigt + #Falls der gefundene ZielPfad nicht existiert, wird stattdessen das Verzeichnis des Skripts zurueckgegeben + 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. Dieser wird auch in der Einstellungsdatei gespeichert. + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + $ZielPfad = StartPfadHolen + Add-Content $PfadEinstellungsDatei $("ZielPfad|" + $ZielPfad) + return $ZielPfad +} + +#Funktion, die den Wert der RadioButtons aus der Einstellungsdatei ausliest und zurueckgibt. +#In den RadioButtons ist festgelegt, ob das initial geoeffnete Verzeichnis bei der Auswahl des Zielverzeichnisses +# a) gleich dem Verzeichnis ist, in dem die .txt-Datei gespeichert ist +# b) gleich dem Verzeichnis ist, das initial bei Auswahl der .txt-Datei angzeigt wird +# c) ein unabhaenig davon festgelegtes Verzeichnis ist +# Unabhaengig von der Auswahl der RadioButtons kann natuerlich frei durch die Verzeichnisse navigiert werden +Function RadioButtonHolen () { + #Inhalte der Einstellungsdatei speichern + $EinstellungsZeilen = InhalteEinstellungsDateiHolen + + #Durch jede Zeile der Einstellungsdatei iterieren. Sobald in einer Zeile die Einstellung fuer RadioButton gefunden wird, wird der Wert dieser Zeile zurueckgegeben + #Sollte es mehrere Zeilen geben, in denen der RadioButton angegeben ist, wird also nur der als erstes Gefundene (also i. d. R. der Oberste) beruecksichtigt + #Falls der gefundene RadioButton nicht existiert, wird stattdessen das Verzeichnis des Skripts zurueckgegeben + 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, also gleich dem Verzeichnis, in dem die .txt-Datei ausgewaehlt wurde. + #Dieser Wert wird auch in der Einstellungsdatei gespeichert. + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + Add-Content $PfadEinstellungsDatei $("VerzeichnisWahl|Gleich") + return "Gleich" +} + +#Funktion, die eine ueberpruefte Version der zu erstellenden ZielDateien zurueckgibt. +Function ZielDateienHolen () { + #Inhalte der Einstellungsdatei speichern + $EinstellungsInhalte = InhalteEinstellungsDateiHolen + + #Durch jede Zeile der Einstellungsdatei iterieren. In jeder Zeile, in der Werte fuer die ZielDateien gefunden werden, werden diese in $ZielDateien zwischengespeichert + 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] + }) + } + } + #Ueberpruefen der $ZielDateien in der Funktion ZielDateienCheck + #Todo: Was passiert, wenn $ZielDateien leer ist? Wird dies als "Ich wollte nur nach Duplikaten und falschen BMKs suchen" gewertet? + $ZielDateienSicher = ZielDateienCheck $ZielDateien + return $ZielDateienSicher +} + +#Funktion, die ein Array mit Einstellungswerten der zu erstellenden Dateien erhaelt und bei diesen einige Fehler findet und so gut es geht korrigiert +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 + #Wenn ein falscher Wert gefunden wird, wird die entsprechende Spalte in der GUI Rot markiert + $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 "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" + } + 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" + } + 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 +} + +#Funktion, die eine Datei mit den Einstellungen und Standardwerten erstellt +Function EinstellungsDateiErstellen () { + #Verzeichnis, in dem die Einstellungsdatei gespeicher werden soll, festlegen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + # Todo: Moegliches Problem mit der Funktion "StartVerzeichnisAktualisieren". Ueberpruefen! + + New-Item $PfadEinstellungsDatei -ItemType File + + #Festlegen von Variablen, die in die Einstellungsdatei geschrieben werden + $StartPfad = Get-Location + $ZielDateien = @([PSCustomObject]@{ + PrefixEingang = "E" + PrefixAusgang = "A" + DateiName = "WSCAD_[Ursprungsdatei]" + WandlungsTyp = "WSCAD" + }) + $ZielDateien += @([PSCustomObject]@{ + PrefixEingang = "%E" + PrefixAusgang = "%A" + DateiName = "TIA_[Ursprungsdatei]" + WandlungsTyp = "TIA" + }) + $ZielDateien += @([PSCustomObject]@{ + PrefixEingang = "E" + PrefixAusgang = "A" + DateiName = "EA_[Ursprungsdatei]" + WandlungsTyp = "Simpel" + }) + + #Aus Gruenden der besseren Uebersichtlichkeit im Code wird das Schreiben mit Add-Content durchgefuehrt + + #Schreiben in die Einstellungsdatei: Hinweise fuer den Benutzer + 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!" + + #Schreiben in die Einstellungsdatei: StartPfad, VerzeichnisWahl, ZielPfad und Datei(en) + 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 +} + +#Funktion, die die Werte in die GUI fuer den Einstellungen-Reiter initialisiert +Function AnzeigeEinstellungenInitialisieren () +{ + #Inhalte der Einstellungsdatei speichern + $EinstellungsInhalte = InhalteEinstellungsDateiHolen + + #Auslesen und anzeigen der Werte fuer die ZielDateien + foreach ($EinstellungsZeile in $EinstellungsInhalte) { + $EinstellungsBestandteile = $EinstellungsZeile.Split("|") + if ($EinstellungsBestandteile[0] -eq "Datei") { + $ESListeEinstellungen.Rows.Add($($EinstellungsBestandteile[1]),$($EinstellungsBestandteile[2]),$($EinstellungsBestandteile[3]),$($EinstellungsBestandteile[4])) + } + } + + #Auslesen und anzeigen des Werts fuer den StartPfad + $StartPfad = StartPfadHolen + $ESTextfeldStartPfad.Text = $StartPfad + + #Auslesen und anzeigen des Werts fuer die RadioButtons + #In den RadioButtons ist festgelegt, ob das initial geoeffnete Verzeichnis bei der Auswahl des Zielverzeichnisses + # a) gleich dem Verzeichnis ist, in dem die .txt-Datei gespeichert ist + # b) gleich dem Verzeichnis ist, das initial bei Auswahl der .txt-Datei angzeigt wird + # c) ein unabhaenig davon festgelegtes Verzeichnis ist + # Unabhaengig von der Auswahl der RadioButtons kann natuerlich frei durch die Verzeichnisse navigiert werden + $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 + } + } +} + +#Funktion, die einen Explorer oeffnet, bei der ein Verzeichnis ausgewaehlt wird, dieses in der Einstellungsdatei speichert und in der GUI im Tab der Einstellungen +#das neue Verzeichnis ausgibt. Zuvor wird das alte Verzeichnis geloescht. +#Welches Verzeichnis (i. d. R. StartPfad oder ZielPfad) geaendert wird, muss der Funktion uebergeben werden +Function VerzeichnisAendern ($SuchBereich) +{ + #Inhalte der Einstellungsdatei einlesen und die Inhalte der Datei loeschen + $DateiInhalt = InhalteEinstellungsDateiHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + Clear-Content $PfadEinstellungsDatei + + #Wieder-Beschreiben der Datei und austauschen der in $SuchBereich uebergebenen Einstellung sowie oeffnen des Explorers, zur Auswahl des neuen Verzeichnisses + 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 + } + + #Anzeige der GUI im Tab Verzeichnisauswahl des Verzeichnisses, in dem die Dateien gespeichert werden, aktualisieren. Dies muss aktualisiert werden, da evtl. aufgrund + #der Einstellung der Radio-Buttons auch bei Aenderung des Verzeichnisses zur Wahl der .txt-Datei diese Ansicht aktualisiert werden muss + VERVorauswahlAnzeigeAktualisieren + + #Je nach gewaehltem $SuchBereich muessen verschiedene teile des GUI aktualisiert werden + switch ($SuchBereich) { + StartPfad { + AnzeigeAktualisieren "txt" $Pfad + $ESTextfeldStartPfad.Text = $Pfad + } + ZielPfad { + $ESTextfeldZielPfad.Text = $Pfad + } + Default {} + } +} + +#Funktion, die die aktuell gewaehlte Einstellung des RadioButtons in der Einstellungsdatei speichert +Function EinstellungenRadioButtonSpeichern () { + #Feststellen, welcher RadioButton aktiviert ist und die entsprechenden Teile der GUI aktualisieren + 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) + } + #Inhalte und Pfad der Einstelungsdatei speichern + $DateiInhalt = InhalteEinstellungsDateiHolen + $PfadEinstellungsDatei = PfadEinstellungsDateiHolen + + #Anzeige fuer Verzeichnisauswahl aktualisieren, Inhalte der Einstellungsdatei loeschen + VERVorauswahlAnzeigeAktualisieren + Clear-Content $PfadEinstellungsDatei + + #Durch die Einstellungsinhalte iterieren, dabei nach Zeile fuer VerzeichnisAuswahl suchen, alle Inhalte und aktualisierten Wert fuer VerzeichnisWahl in die Datei schreiben + 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 + } +} + +#Funktion, die die Tabelle der ZielDateien ausliest und deren Werte abspeichert +Function EinstellungenZielDateienSpeichern () +{ + #Auslesen der Tabelle mit den ZielDateien und daraus das Array $ZielDateien erstellen + for ($i = 0; $i -lt ($ESListeEinstellungen.RowCount-1); $i++) { + #Falls in keinem Feld ein Wert steht, wird die Zeile uebersprungen (=> eintrag geloescht) + 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) + )) { + #Eintrag 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 + }) + } + } + #Ueberpruefen der $ZielDateien + $ZielDateien = ZielDateienCheck $ZielDateien + + #Holen der 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 + } + + #Inhalte der Einstellungsdatei loeschen und neu befuellen + Clear-Content $PfadEinstellungsDatei + foreach ($Zeile in $NeueEinstellungsdatei) { + Add-Content $PfadEinstellungsDatei $Zeile + } + + # UngespeichterteAenderungen reseten! (?) +} + + +#--------------------------------------- Ende Funktionen fuer GUI ------------------------------- + +#Funktion, die aus in den Einstellungen festgelegtem Namen, ggf. dem urspruenglichen Dateinamen und dem Speicherort fuer die Datei den neuen Dateinamen erstellt +Function ExcelDateiNameErstellen ($EingestellterName, $PfadUrsprungsdatei, $PfadZielDatei) +{ + #Feststellen des Namens der urspruenglichen Datei aus dem Gesamtpfad + $NameUrsprungsdatei = Split-Path $PfadUrsprungsdatei -Leaf + #Entfernen der Endung (".txt" --> 4 Zeichen) + $NameUrsprungsdateiLaenge = $NameUrsprungsdatei.Length + $NameUrsprungsdateiKurz = $NameUrsprungsdatei.Substring(0, $($NameUrsprungsdateiLaenge - 4)) + + #Zusammensetzen des neuen Namens aus dem uebergegenem Zielpfad, dem Zeichen "\", dem eingestellten Namen, wobei der Bereich "[Ursprungsdatei]" durch den Dateinamen + #der Datei ersetzt wird, die konvertiert wurde, und der Endung ".xlsx" + $GesamtPfadZielDatei = $PfadZielDatei + "\" + $EingestellterName.Replace("[Ursprungsdatei]",$NameUrsprungsdateiKurz) + ".xlsx" + + return $GesamtPfadZielDatei +} + +#Funktion, die aus einem gegebenem Pfad, Prefixen fuer Ein- und Ausgang und dem Pfad der Zieldatei dort eine Datei erstellt nach dem Format "Simpel" +#Bei Simpel gibt es keine spezielle Verarbeitung, die geaenderten Betriebsmittel und Kommentare werden einfach in die Excel-Datei eingetragen +Function ExcelDateiBeschreibenSimpel ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) +{ + #Deklarieren der Variablen/Arrays + $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" + #Interieren durch die Eintraege + #$i steht fuer die Zeilennummer + $i = 0 + foreach ($Eintrag in $Ursprungdatei) + { + #Teilen der Eintraege in $BMKZahl und $Kommentar + $Eintragszeile = $Eintrag.Split("'") + $BMKZahl = $Eintragszeile[1] + $BMKZahl = $BMKZahl.TrimStart("'") + $Kommentar = $Eintragszeile[3] + $Kommentar = $Kommentar.TrimEnd("'") + + #Unterscheiden, ob es sich um einen Ein-, Ausgang oder Fehler handelt + if ($($($BMKZahl -replace "[\d]") -in $ZuEingang)) + { + #Anpassen der $BMKZahl: Entfernen der Buchstaben, einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts und hinzufuegen des Prefix fuer Eingaenge + $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $BMKZahl = $PrefixEingang + $BMKZahl + #Eintraegen in das Array fuer Eingaenge + $Eingaenge += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = $Kommentar + Zeile = $i + }) + } + elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang)) + { + #Anpassen der $BMKZahl: Entfernen der Buchstaben, einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts und hinzufuegen des Prefix fuer Ausgaenge + $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $BMKZahl = $PrefixAusgang + $BMKZahl + #Eintragen in das Array fuer Ausgaenge + $Ausgaenge += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = $Kommentar + Zeile = $i + }) + } + else + { + #Anpassen der $BMKZahl: Einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts + $BMKZahlLaenge = $($BMKZahl.length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + #Eintragen in das Array fuer Fehler + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = $Kommentar + Zeile = $i + }) + } + #Erhoehen des Zeilencounters + $i++ + } + + AufgabenAktualisieren "Daten fuer Simpel in Excel-Datei schreiben" + #Excel oeffnen und Datei 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 ist der Zeilencounter. Die oberste Zeile in Excel ist Zeile 1 + $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++ + } + + #Speichern der Datei und schließen von Excel + $Mappe.Save() + $Datei.Quit() + + #Ermitteln von Duplikaten + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + + #Dieses beschreiben ist noetig, da sonst in der Rueckgabe Fehler entstehen koennen, wenn entweder $GleicheEingaenge oder $GleicheAusgaenge leer sind (aber nicht beide) + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +#Funktion, die aus einem gegebenem Pfad, Prefixen fuer Ein- und Ausgang und dem Pfad der Zieldatei dort eine Datei erstellt nach dem Format "TIA" +#Bei TIA ist ein spezielle Header notwendig. Außerdem wird ein zweites Tabellenblatt erstellt, bei dem in etwas angepasster Form und mit speziellem Zaehler die Ein- und Ausgaenge +#aufgelistet sind. +#Das Format fuer TIA wurde nach Vorgaben von Christian Forkl (SPS-Programmierer) erstellt +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" + #Interieren durch die Eintraege + #$i steht fuer die Zeilennummer + $i = 0 + foreach ($Eintrag in $Ursprungdatei) + { + #Teilen der Eintraege in $BMKZahl, $BMKZahlOriginal und $Kommentar + $Eintragszeile = $Eintrag.Split("'") + $BMKZahl = $Eintragszeile[1] + $BMKZahl = $BMKZahl.TrimStart("'") + $BMKZahlOriginal = $BMKZahl + $Kommentar = $Eintragszeile[3] + $Kommentar = $Kommentar.TrimEnd("'") + #Unterscheiden, ob es sich um einen Ein-, Ausgang oder Fehler handelt + if ($($($BMKZahl -replace "[\d]") -in $ZuEingang)) + { + #Anpassen der $BMKZahl: Entfernen der Buchstaben, einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts und hinzufuegen des Prefix fuer Eingaenge und Konstanten + $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 + #Eintraegen in das Array fuer Eingaenge + $Eingaenge += @([PSCustomObject]@{ + Name = $BMKZahl + NameOriginal = $BMKZahlOriginal + NameConstant = $BMKZahlConstant + Kommentar = $Kommentar + Zahl = $BMKNurZahl + Zeile = $i + }) + } + elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang)) + { + #Anpassen der $BMKZahl: Entfernen der Buchstaben, einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts und hinzufuegen des Prefix fuer Ausgaenge + $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 + #Eintragen in das Array fuer Ausgaenge + $Ausgaenge += @([PSCustomObject]@{ + Name = $BMKZahl + NameOriginal = $BMKZahlOriginal + NameConstant = $BMKZahlConstant + Kommentar = $Kommentar + Zahl = $BMKNurZahl + Zeile = $i + }) + } + else + { + #Anpassen der $BMKZahl: Einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts + $BMKNurZahl = $i + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + $BMKZahlConstant = "cErr" + $BMKZahlOriginal + #Eintragen in das Array fuer Fehler + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + NameOriginal = $BMKZahlOriginal + NameConstant = $BMKZahlConstant + Zahl = $BMKNurZahl + Zeile = $i + }) + } + #Erhoehen des Zeilencounters + $i++ + } + + AufgabenAktualisieren "Daten fuer TIA in Excel-Datei schreiben" + #Excel oeffnen und Datei erstellen, Arbeitmappen 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 ist der Zeilencounter. Die oberste Zeile in Excel ist Zeile 1. In Zeile 1 ist der Header, ab Zeile 2 die Inhalte + #$j ist fuer einen Counter der Eingaenge im Blatt "Constants" + $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 + #Zuruecksetzen von $j, da dies jeweils bei Ein- und Ausgaenge bei 0 beginnen muss + $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 + #Zuruecksetzen von $j, da dies jeweils bei Ein- und Ausgaenge bei 0 beginnen muss + $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++ + } + + #Speichern der Datei und schließen von Excel + $Mappe.Save() + $Datei.Quit() + + #Ermitteln von Duplikaten + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + + #Dieses beschreiben ist noetig, da sonst in der Rueckgabe Fehler entstehen koennen, wenn entweder $GleicheEingaenge oder $GleicheAusgaenge leer sind (aber nicht beide) + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +#Funktion, die aus einem gegebenem Pfad, Prefixen fuer Ein- und Ausgang und dem Pfad der Zieldatei dort eine Datei erstellt nach dem Format "WSCAD" +#Bei WSCAD ist ein spezieller Header notwendig. Außerdem werden die Ein- und Ausgaenge ergaenzt. Falls im Bereich mit der Endung 0-7 min. ein Ein- oder Ausgang existiert, +#werden alle weiteren Ein- und Ausgaenge in diesem Bereich ergänzt +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" + #Interieren durch die Eintraege + #$i steht fuer die Zeilennummer + $i = 0 + foreach ($Eintrag in $Ursprungsdatei) { + #Teilen der Eintraege in $BMKZahl und $Kommentar + $Eintragszeile = $Eintrag.Split("'") + $BMKZahl = $Eintragszeile[1] + $BMKZahl = $BMKZahl.TrimStart("'") + $Kommentar = $Eintragszeile[3] + $Kommentar = $Kommentar.TrimEnd("'") + #Unterscheiden, ob es sich um einen Ein-, Ausgang oder Fehler handelt + if ($($($BMKZahl -replace "[\d]") -in $ZuEingang)) + { + #Anpassen der $BMKZahl: Entfernen der Buchstaben, einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts und hinzufuegen des Prefix fuer Eingaenge + $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 + #Eintraegen in das Array fuer Eingaenge + $Eingaenge += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = $Kommentar + Zeile = $i + }) + } + elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang)) + { + #Anpassen der $BMKZahl: Entfernen der Buchstaben, einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts und hinzufuegen des Prefix fuer Ausgaenge + $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 + #Eintragen in das Array fuer Ausgaenge + $Ausgaenge += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = $Kommentar + Zeile = $i + }) + } + else + { + #Anpassen der $BMKZahl: Einfuegen eines Punkts (".") zwischen letzter und vorletzer Stelle von Rechts + $BMKZahlLaenge = $($BMKZahl.Length - 1) + $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) + #Eintragen in das Array fuer Fehler + $Fehler += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = $Kommentar + Zeile = $i + }) + } + #Erhoehen des Zeilencounters + $i++ + } + + #Ergaenzen der Ein- und Ausgaenge. Falls an der SPS (physikalisch) min. einer der 8 Anschluesse (0-7) genutzt wird, sind zwangsweise die anderen auch vorhanden. + #Deswegen werden diese hier ohne Kommentar hinzugefuegt. + AufgabenAktualisieren "Anschluesse fuer Eingaenge ergaenzen" + $Eingaenge = AnschluesseErgaenzen $Eingaenge + AufgabenAktualisieren "Anschluesse fuer Ausgaenge ergaenzen" + $Ausgaenge = AnschluesseErgaenzen $Ausgaenge + + AufgabenAktualisieren "Daten fuer WSCAD in Excel-Datei schreiben" + #Excel oeffnen und Datei 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 ist der Zeilencounter. Die oberste Zeile in Excel ist Zeile 1. Dort ist der Header. Ab Zeile 2 kommen die Inhalte. + $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++ + } + + #Speichern der Datei und schließen von Excel + $Mappe.Save() + $Datei.Quit() + + #Ermitteln von Duplikaten + $GleicheEingaenge = GleicheFinden $Eingaenge + $GleicheAusgaenge = GleicheFinden $Ausgaenge + + #Dieses beschreiben ist noetig, da sonst in der Rueckgabe Fehler entstehen koennen, wenn entweder $GleicheEingaenge oder $GleicheAusgaenge leer sind (aber nicht beide) + if ( $($Fehler.Length -eq 0)) + { + $Fehler += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $GleicheEingaenge, $GleicheAusgaenge, $Fehler +} + +#Funktion, die ein Array erhaelt und ueberprueft, ob ein oder mehrere Eintraege gleich sind. Die gleiche Eintraege werden zurueckgegeben. +Function GleicheFinden ($ZuUeberpruefen) +{ + $ZuUeberpruefen = $ZuUeberpruefen | Sort-Object "Name" + $Gleiche = @() + #Schleife zum iterieren durch die Eintraege + for ($i = 0; $i -lt $($ZuUeberpruefen.Count - 1); $i++) + { + #Boolean $IstGleich gibt an, ob der aktuelle und der folgende Eintrag gleich sind. + $IstGleich = $($ZuUeberpruefen[$i].Name -eq $ZuUeberpruefen[$($i+1)].Name) + if ($IstGleich) + { + #Eintrag hinzufuegen, falls es den Eintrag nicht schon gibt + if (-not $($Gleiche[-1].Zeile -eq $ZuUeberpruefen[$i].Zeile)) + { + $Gleiche += $ZuUeberpruefen[$i] + } + $Gleiche += $ZuUeberpruefen[$($i+1)] + } + } + + #Falls es keine Duplikate gibt, gibt es fuer keine Namen in allen Zeilen Duplikate + #Die Werte werden hinzugefuegt, um spaetere Probleme beim Eintragen der Wert in das GUI verhindert werden + if ( $($Gleiche.Length -eq 0)) + { + $Gleiche += @([PSCustomObject]@{ + Name = "Keine" + Zeile = "Alle" + }) + } + + return $Gleiche +} + +#Funktion, die eine Liste von Anschluessen erhaelt und diese ergaenzt. Falls min. einer der Anschluesse von 0-7 vorhanden ist, werden alle anderen, noch nicht vorhandenen, hinzugefuegt +Function AnschluesseErgaenzen ($Anschluesse) +{ + $Anschluesse = $Anschluesse | Sort-Object "Name" + + #Schleife zum iterieren durch die Anschluesse + foreach ($Anschluss in $Anschluesse) { + #Ermitteln der Baugruppe des aktuellen Anschlusses. Die Baugruppe ist die zweite Stelle von Rechts. + $AnschlussBauteil = $Anschluss.Name.Substring(0,$Anschluss.Name.Length - 2) + #Festlegen der Anschluesse, die vorhanden sein sollen + $SollAnschluesse = @(0,1,2,3,4,5,6,7) + #Schleife zum ueberpruefen, ob in der Baugruppe des aktuellen Anschlusses weitere Anschluesse vorhanden sind + foreach ($SubAnschluss in $Anschluesse) { + #Ermitteln der Baugruppe des aktuellen Sub-Anschlusses + $SubAnschlussBauteil = $SubAnschluss.Name.Substring(0,$SubAnschluss.Name.Length - 2) + #Wenn das Bauteil von Anschluss und Sub-Anschluss gleich ist, muss der Anschluss in der Liste der $SollAnschluesse gestrichen werden + if ($SubAnschlussBauteil -eq $AnschlussBauteil) { + #Den zu streichenden Anschluss ermitteln + $SubAnschlussLetzteStelle = $($SubAnschluss.Name).Substring($SubAnschluss.Name.Length - 1,1) + #Den zu streichenden Anschluss aus der Liste entfernen + $SollAnschluesse = $SollAnschluesse | Where-Object {$_ -ne $SubAnschlussLetzteStelle} + } + } + #Ergaenzen der fehlenden Anschluesse + foreach ($FehlenderAnschluss in $SollAnschluesse) { + #Weil durch die zusaetzlichen Eintraege auch die Zahl der Gesamteintraege steigt, wird die Zahl der $GesamtEintraege korrigiert + [System.Double] $GesamtEintraege = $FATextfeldGesamtEintraege.Text + $GesamtEintraege++ + $FATextfeldGesamtEintraege.Text = $GesamtEintraege + + #Der Name des zu ergaenzenden Anschlusses ist, bis auf die letzte Stelle, gleich dem des aktuellen Anschlusses + $Name = $Anschluss.Name + #Tausche die letzte Stelle durch den Wert von $FehlenderAnschluss aus + $BMKZahl = $($($Name.Substring(0,$Name.Length - 1)) + $FehlenderAnschluss) + #Den ergaenzten Anschluss in die Liste aller Anschluesse ergaenzen + $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 + }) + } + } + $Anschluesse = $Anschluesse | Sort-Object "Name" + return $Anschluesse +} + +Main \ No newline at end of file diff --git a/Test-Skripte/GUI-Vorlage.ps1 b/Test-Skripte/GUI-Vorlage.ps1 new file mode 100644 index 0000000..0eb2b9f --- /dev/null +++ b/Test-Skripte/GUI-Vorlage.ps1 @@ -0,0 +1,43 @@ +$mailAddresses = ("sdasd@ddfsf.net","ououoizu@fdssd.com","ssdfdsfds@dsfds.org") + +function FnShowDialog { + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") + #~~< Form1 >~~~~~~~~~~~~~~~~~~~~~~~~~~ + $Form1 = New-Object System.Windows.Forms.Form + $Form1.ClientSize = "347, 86" + $Form1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 9.75, [System.Drawing.FontStyle]::Regular, [System.Drawing.GraphicsUnit]::Point, ([System.Byte](0))) + $Form1.FormBorderStyle = "FixedToolWindow" + $Form1.MaximizeBox = $false + $Form1.MinimizeBox = $false + $Form1.BackColor = "White" + #~~< Label1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + $Label1 = New-Object System.Windows.Forms.Label + $Label1.Location = "13, 13" + $Label1.Size = "217, 23" + $Label1.Text = "Bitte Mailadresse wählen:" + #~~< Button1 >~~~~~~~~~~~~~~~~~~~~~~~~~ + $Button1 = New-Object System.Windows.Forms.Button + $Button1.Location = "259, 41" + $Button1.Size = "76, 26" + $Button1.Text = "OK" + $Button1.add_MouseClick({ + $script:selectedMailAdr = $ComboBox1.SelectedItem + $Form1.dispose() + }) + #~~< ComboBox1 >~~~~~~~~~~~~~~~~~~~~~~~~~~ + $ComboBox1 = New-Object System.Windows.Forms.ComboBox + $ComboBox1.Location = "12, 40" + $ComboBox1.SelectedIndex = -1 + $ComboBox1.DropDownStyle = "DropDownList" + $ComboBox1.Size = "231, 24" + $ComboBox1.Items.AddRange($mailAddresses) + + $Form1.Controls.Add($Label1) + $Form1.Controls.Add($Button1) + $Form1.Controls.Add($ComboBox1) + [System.Windows.Forms.Application]::Run($Form1) +} + + +FnShowDialog +Write-Host $selectedMailAdr \ No newline at end of file diff --git a/Test-Skripte/Skript1.ps1 b/Test-Skripte/Skript1.ps1 new file mode 100644 index 0000000..871efd6 --- /dev/null +++ b/Test-Skripte/Skript1.ps1 @@ -0,0 +1,10 @@ +$Excel = New-Object -ComObject Excel.Application +$EDatei = $Excel.WorkBooks.Open("R:\m.kraft\Excel Werte ändern\Excel-Datei.xlsx") +$EBlatt = $EDatei.WorkSheets.item(1) +$Excel.Visible = $true +$EBlatt.Cells.Item(1,1) = 5 +$EBlatt.Cells.Item(2,1) = 15 +$EBlatt.Cells.Item(1,2) = 25 +# [Zahl 1 => Zeile][Zahl 2 => Spalte] +$EDatei.Save() +$Excel.Quit() \ No newline at end of file diff --git a/Test-Skripte/Skript10.ps1 b/Test-Skripte/Skript10.ps1 new file mode 100644 index 0000000..a8f1f47 --- /dev/null +++ b/Test-Skripte/Skript10.ps1 @@ -0,0 +1,17 @@ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name + +Write-Host "Laufwerke: " $Laufwerke +$i = 0 + +foreach($LaufwerksBuchstabe in $Laufwerke) +{ + $Laufwerke[$i] = $LaufwerksBuchstabe + ":\" + Write-Host $LaufwerksBuchstabe + + $i++ +} + +Write-Host "Laufwerke: " $Laufwerke +$Laufwerke[0] = $(Split-Path $Laufwerke[0]) +Write-Host $Laufwerke[0] +#Write-Host $CMod \ No newline at end of file diff --git a/Test-Skripte/Skript11.ps1 b/Test-Skripte/Skript11.ps1 new file mode 100644 index 0000000..8039082 --- /dev/null +++ b/Test-Skripte/Skript11.ps1 @@ -0,0 +1,29 @@ +$Pfad = "R:\m.kraft\Excel Werte ändern" + +$UnterOrdner = $(Get-ChildItem $Pfad -Directory) +$Zurueck = "Zurück" +$Ordner2 = @() + +foreach ($Ordner in $UnterOrdner) +{ + $Ordner2 += [System.String]$Ordner +} + +$Optionen = $Ordner2 + $Zurueck +Write-Host "Optionen: " $Optionen + +$Input = $Optionen | Out-GridView -Title "Name" -OutputMode Single +Write-Host "Auswahl: " $Input + +<# +$Pfad = "R:\m.kraft\Excel Werte ändern" + +$UnterOrdner = $(Get-ChildItem $Pfad -Directory) +[System.IO.DirectoryInfo]$Zurueck = "Zurück" + +$Optionen = $UnterOrdner + $Zurueck +Write-Host "Optionen: " $Optionen + +$Input = $Optionen | Out-GridView -Title "Name" -OutputMode Single +Write-Host "Auswahl: " $Input +#> \ No newline at end of file diff --git a/Test-Skripte/Skript12.ps1 b/Test-Skripte/Skript12.ps1 new file mode 100644 index 0000000..9ccd87a --- /dev/null +++ b/Test-Skripte/Skript12.ps1 @@ -0,0 +1,5 @@ +$Datei = Get-Content "R:\m.kraft\Excel Werte ändern\EA_Krüger_19.03.2020 - K.txt" + +$LaengeDatei = $($Datei.Length) + +Write-Host $LaengeDatei \ No newline at end of file diff --git a/Test-Skripte/Skript13 copy.ps1 b/Test-Skripte/Skript13 copy.ps1 new file mode 100644 index 0000000..489a59e --- /dev/null +++ b/Test-Skripte/Skript13 copy.ps1 @@ -0,0 +1,17 @@ + +function Menue +{ + [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null + [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null + + $Fenster = New-Object System.Windows.Forms.FolderBrowserDialog + #$Fenster.Title = "Datei öffnen" + #$Fenster.Filter = ".txt Dateien (*.txt)|*.txt" #Anzeigename|Dateityp + #$Fenster.ShowHelp = $true # Dadurch sieht der Explorer aus wie von Win 98 und die "Hilfe" funktioniert nicht + $Fenster.ShowDialog() + $Pfad = $Fenster.SelectedPath + return $Pfad +} + +$Pfad = Menue +Write-Host "Rückgabe: " $Pfad \ No newline at end of file diff --git a/Test-Skripte/Skript13.ps1 b/Test-Skripte/Skript13.ps1 new file mode 100644 index 0000000..01145b4 --- /dev/null +++ b/Test-Skripte/Skript13.ps1 @@ -0,0 +1,17 @@ + +function Menue +{ + [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null + [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null + + $Fenster = New-Object System.Windows.Forms.OpenFileDialog + $Fenster.Title = "Datei öffnen" + $Fenster.Filter = ".txt Dateien (*.txt)|*.txt" #Anzeigename|Dateityp + #$Fenster.ShowHelp = $true # Dadurch sieht der Explorer aus wie von Win 98 und die "Hilfe" funktioniert nicht + $Fenster.ShowDialog() + $Pfad = $Fenster.FileName + return $Pfad +} + +$Pfad = Menue +Write-Host "Rückgabe: " $Pfad \ No newline at end of file diff --git a/Test-Skripte/Skript14.ps1 b/Test-Skripte/Skript14.ps1 new file mode 100644 index 0000000..bfef7e7 --- /dev/null +++ b/Test-Skripte/Skript14.ps1 @@ -0,0 +1,107 @@ +Write-Host $(Get-Date -Format "HH:mm:ss") +<# +$Excel = New-Object -ComObject Excel.Application +$EDatei = $Excel.WorkBooks.Open("R:\m.kraft\Excel Werte ändern\Excel-Datei.xlsx") +$EBlatt = $EDatei.WorkSheets.item(1) +$Excel.Visible = $false +#> + +$Pfad = "R:\m.kraft\Excel Werte ändern\EA_Krüger_19.03.2020.txt" +$i = 1 + +$DIs = @() +$DQs = @() +$Fehler = @() + + +$Datei = Get-Content $Pfad + +$ZuDI = @(„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“) +$ZuDQ = @(„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“) + +foreach ($Eintrag in $Datei) +{ + $Eintragszeile = $Eintrag.split("'") + <#Write-Host "Gesamter eintrag " $Eintragszeile + Write-Host "Eintrag 1 " $Eintragszeile[0] + Write-Host "Eintrag 2 " $Eintragszeile[1] + Write-Host "Eintrag 3 " $Eintragszeile[2] + Write-Host "Eintrag 4 " $Eintragszeile[3]#> + $EAZahl = $Eintragszeile[1] + $EAKommentar = $Eintragszeile[3] + + $EAZahl = $EAZahl.TrimStart("'") + #$EAZahl = $EAZahl.TrimEnd("'") + #$EAKommentar = $EAKommentar.TrimStart("'") + $EAKommentar = $EAKommentar.TrimEnd("'") + + if ($($($EAZahl.Substring(0,2)) -in $ZuDI)) + { + $EAZahl = $EAZahl -replace("[a-zA-Z]", "") + $LaengeEAZahl = $($EAZahl.Length - 1) + $EAZahl = $EAZahl.Substring(0,$LaengeEAZahl) + "." + $EAZahl.Substring($LaengeEAZahl) + $EAZahl = "DI" + $EAZahl + $DIs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + } + elseif ($($($EAZahl.Substring(0,2)) -in $ZuDQ)) + { + $EAZahl = $EAZahl -replace("[a-zA-Z]", "") + $LaengeEAZahl = $($EAZahl.Length - 1) + $EAZahl = $EAZahl.Substring(0,$LaengeEAZahl) + "." + $EAZahl.Substring($LaengeEAZahl) + $EAZahl = "DQ" + $EAZahl + $DQs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + } + else + { + Write-Host "Achtung, Fehler bei $EAZahl $EAKommentar" + $Fehler += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + #fehler + } + + #Write-Host $EAZahl + #Write-Host $EAKommentar + + #$EBlatt.Cells.Item($i,1) = $EAZahl + #$EBlatt.Cells.Item($i,2) = $EAKommentar + + $i++ +} + +#$EDatei.Save() +#$Excel.Quit() + +$DIs = $DIs | Sort-Object "Name" +$Gleiche = @() + +for ($j = 0; $j -lt $($DIs.Count -1); $j++) +{ + $IstGleich = $($DIs[$j].Name -eq $DIs[$($j+1)].Name) + if ( $IstGleich ) + { + #Eintrag hinzufügen + if ( -not $($Gleiche[-1].Zeile -eq $DIs[$j].Zeile)) + { + $Gleiche += $DIs[$j] + } + $Gleiche += $DIs[$($j +1)] + Write-Host "Gleiche: " $Gleiche + } +} + +# $Gleiche = $Gleiche.Zeile | select -Unique + +if ($($Gleiche.Length) -gt 0) +{ + Write-Host "Folgende Eingänge sind doppelt belegt" + Write-Host "Eingang Zeile (Excel)" + foreach ($Gleich in $Gleiche) + { + Write-Host $Gleich.Name " " $Gleich.Zeile + } +} +else +{ + Write-Host "Es gibt keine doppelt belegten Eingänge!" +} + +Write-Host $(Get-Date -Format "HH:mm:ss") \ No newline at end of file diff --git a/Test-Skripte/Skript15.ps1 b/Test-Skripte/Skript15.ps1 new file mode 100644 index 0000000..53c2f73 --- /dev/null +++ b/Test-Skripte/Skript15.ps1 @@ -0,0 +1,8 @@ +$Pfad = "R:\m.kraft\Excel Werte ändern\Test-Skripte\EinstellungenSkriptKonvertierung2.txt" + +$DateiInhalt = Get-Content $Pfad +$Zeile1 = $DateiInhalt[0] + +Clear-Content -Path $Pfad +Add-Content -Path $Pfad $Zeile1 +Add-Content -Path $Pfad "x" \ No newline at end of file diff --git a/Test-Skripte/Skript16.ps1 b/Test-Skripte/Skript16.ps1 new file mode 100644 index 0000000..9567888 --- /dev/null +++ b/Test-Skripte/Skript16.ps1 @@ -0,0 +1,14 @@ +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 +} + +$Name = ExcelDateiNameErstellen "EA_Ausgabe" "R:\m.kraft\Excel Werte ändern\EA_Krüger_19.03.2020.xlsx" "R:\m.kraft\Excel Werte ändern\_Test" + +Write-Host $Name \ No newline at end of file diff --git a/Test-Skripte/Skript17.ps1 b/Test-Skripte/Skript17.ps1 new file mode 100644 index 0000000..305418c --- /dev/null +++ b/Test-Skripte/Skript17.ps1 @@ -0,0 +1,50 @@ +function KompatibilitaetsCheck ($SpeicherOrt){ + $Inhalte = Get-Content $SpeicherOrt + if ($Inhalte.Length -eq 0) { + Write-Host "Inhalte: $Inhalte" + return $false + } + else { + foreach ($Zeile in $Inhalte) { + if (-not ($Zeile -match "'\w+','.+'") -and $Zeile.Length -gt 0) { + return $false + } + } + } + return $true +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +$SaubereTxtS = @() + +if ($TxtDateien.Length -gt 0) +{ + foreach ($TxtDatei in $TxtDateien) { + if (KompatibilitaetsCheck $TxtDatei) { + $SaubereTxtS += $TxtDatei + } + else { + Write-Host "Aussortierte Dateien: $TxtDatei" + } + } + return $(Split-Path $SaubereTxtS -Leaf) +} +else +{ + return +} +} + + +Write-Host "------------------------------------------------------------" +$SZ = Get-Date -Format "HH:mm:ss" +Write-Host "Startzeit $SZ" + +$Dateien = TxtDateienFinden "R:\m.kraft\Excel Werte ändern" +Write-Host "Dateien: $Dateien" + +$EZ = Get-Date -Format "HH:mm:ss" +Write-Host "Endzeit " $EZ \ No newline at end of file diff --git a/Test-Skripte/Skript18.ps1 b/Test-Skripte/Skript18.ps1 new file mode 100644 index 0000000..1f359df --- /dev/null +++ b/Test-Skripte/Skript18.ps1 @@ -0,0 +1,62 @@ + $SPSAnschluesse = @([PSCustomObject]@{ + Name = "E100.5" + Kommentar = "Kommentar E100.5" + Zeile = "5" + }) + $SPSAnschluesse += @([PSCustomObject]@{ + Name = "E200.0" + Kommentar = "Kommentar E200.0" + Zeile = "7" + }) + $SPSAnschluesse += @([PSCustomObject]@{ + Name = "E100.0" + Kommentar = "Kommentar 100.0" + Zeile = "4" + }) + + Clear-Variable SPSFehlendeAnschluesse + + #Schleife fuer SPS + $SPSAnschluesse = $SPSAnschluesse | Sort-Object "Name" + Write-Host "Uebergebene SPS-Anschluesse: " $SPSAnschluesse + foreach ($SPSAnschluss in $SPSAnschluesse) { + # $SPSSubAnschlussLetzteStelle = @() + Write-Host "Aktueller SPS-Anschluss: " $SPSAnschluss.Name + #Write-Host "Laenge SPSAnschluss: " $SPSAnschluss.Name.Length + $SPSAnschlussBauteil = $SPSAnschluss.Name.Substring(0,$SPSAnschluss.Name.Length - 2) + Clear-Variable SPSFehlendeAnschluesse + $SollAnschluesse = @(0,1,2,3,4,5,6,7) + foreach ($SPSSubAnschluss in $SPSAnschluesse) { + Write-Host "Aktueller Sub-Anschluss: " $SPSSubAnschluss.Name + $SPSSubAnschlussBauteil = $SPSSubAnschluss.Name.Substring(0,$SPSSubAnschluss.Name.Length - 2) + if ($SPSSubAnschlussBauteil -eq $SPSAnschlussBauteil) { + Write-Host "Fall eingetreten: Vorletzte Stelle von SPS und SubSPS sind gleich" + $SPSSubAnschlussLetzteStelle = $($SPSSubAnschluss.Name).Substring($SPSSubAnschluss.Name.Length - 1,1) + Write-Host "Inhalt von SPSSubAnschlussLetzteStelle: " $SPSSubAnschlussLetzteStelle + Write-Host "Alte SollAnschluesse: " $SollAnschluesse + $SollAnschluesse = $SollAnschluesse | Where-Object {$_ -ne $SPSSubAnschlussLetzteStelle} + Write-Host "Neue SollAnschluesse: " $SollAnschluesse + } + } + + Write-Host "Uebergebene fehlende Anschluesse: " $SollAnschluesse + foreach ($FehlendenAnschluss in $SollAnschluesse) { + Write-Host "Aktuell fehlender Anschluss: " $FehlendenAnschluss + $SPSName = $SPSAnschluss.Name + $BMKZahl = $($($SPSName.Substring(0,$SPSName.Length - 1)) + $FehlendenAnschluss) + $SPSAnschluesse += @([PSCustomObject]@{ + Name = $BMKZahl + Kommentar = "" + #Zeile = "" wird nich gebraucht, da hier keine Duplikate auftreten koennen. Ausserdem gibt es ohnehin keine zugehoerige Zeile in der UrsprungsDatei + }) + Write-Host "Neue SPSAnschluesse: " $SPSAnschluesse + } + } + + $SPSAnschluesse = $SPSAnschluesse | Sort-Object "Name" + Write-Host "Neue SPSAnschluesse sortiert: " $SPSAnschluesse + Write-Host "" + Write-Host "" + Write-Host "------------------------------------------------------------------------------------------------------------------------------------------------------------" + Write-Host "" + Write-Host "" diff --git a/Test-Skripte/Skript19.ps1 b/Test-Skripte/Skript19.ps1 new file mode 100644 index 0000000..baeb4aa --- /dev/null +++ b/Test-Skripte/Skript19.ps1 @@ -0,0 +1,3 @@ +$ZielDatei = "R:\m.kraft\ExcelWerteÄndern\Pre-Veröffentlicht\PAG_Alle_Heber_Export_Brics.xlsx" +$ZielDateiBMK = $ZielDatei.Substring(0,$Zieldatei.Length -5) + "_BMK" + $ZielDatei.Substring($Zieldatei.Length -5) +Write-Host $ZielDateiBMK \ No newline at end of file diff --git a/Test-Skripte/Skript2-EA.ps1 b/Test-Skripte/Skript2-EA.ps1 new file mode 100644 index 0000000..01ee52e --- /dev/null +++ b/Test-Skripte/Skript2-EA.ps1 @@ -0,0 +1,106 @@ +Write-Host $(Get-Date -Format "HH:mm:ss") + +$Excel = New-Object -ComObject Excel.Application +$EDatei = $Excel.WorkBooks.Open("R:\m.kraft\Excel Werte ändern\Realtest\IO_EXP_TBS_14.01.2021.xlsx") +$EBlatt = $EDatei.WorkSheets.item(1) +$Excel.Visible = $false + +$Pfad = "R:\m.kraft\Excel Werte ändern\Realtest\IO_EXP_TBS_14.01.2021.txt" +$i = 1 + +$DIs = @() +$DQs = @() +$Fehler = @() + + +$Datei = Get-Content $Pfad + +$ZuDI = @(„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“) +$ZuDQ = @(„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“) + +foreach ($Eintrag in $Datei) +{ + $Eintragszeile = $Eintrag.split("'") + <#Write-Host "Gesamter eintrag " $Eintragszeile + Write-Host "Eintrag 1 " $Eintragszeile[0] + Write-Host "Eintrag 2 " $Eintragszeile[1] + Write-Host "Eintrag 3 " $Eintragszeile[2] + Write-Host "Eintrag 4 " $Eintragszeile[3]#> + $EAZahl = $Eintragszeile[1] + $EAKommentar = $Eintragszeile[3] + + $EAZahl = $EAZahl.TrimStart("'") + #$EAZahl = $EAZahl.TrimEnd("'") + #$EAKommentar = $EAKommentar.TrimStart("'") + $EAKommentar = $EAKommentar.TrimEnd("'") + + if ($($($EAZahl.Substring(0,2)) -in $ZuDI)) + { + $EAZahl = $EAZahl -replace("[a-zA-Z]", "") + $LaengeEAZahl = $($EAZahl.Length - 1) + $EAZahl = $EAZahl.Substring(0,$LaengeEAZahl) + "." + $EAZahl.Substring($LaengeEAZahl) + $EAZahl = "E" + $EAZahl + $DIs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + } + elseif ($($($EAZahl.Substring(0,2)) -in $ZuDQ)) + { + $EAZahl = $EAZahl -replace("[a-zA-Z]", "") + $LaengeEAZahl = $($EAZahl.Length - 1) + $EAZahl = $EAZahl.Substring(0,$LaengeEAZahl) + "." + $EAZahl.Substring($LaengeEAZahl) + $EAZahl = "A" + $EAZahl + $DQs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + } + else + { + Write-Host "Achtung, Fehler bei $EAZahl $EAKommentar" + $DQs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + #fehler + } + + #Write-Host $EAZahl + #Write-Host $EAKommentar + + $EBlatt.Cells.Item($i,1) = $EAZahl + $EBlatt.Cells.Item($i,2) = $EAKommentar + + $i++ +} + +$EDatei.Save() +$Excel.Quit() + +$DIs = $DIs | sort "Name" +$Gleiche = @() + +for ($j = 0; $j -lt $($DIs.Count -1); $j++) +{ + $IstGleich = $($DIs[$j].Name -eq $DIs[$($j+1)].Name) + if ( $IstGleich ) + { + #Eintrag hinzufügen + if ( -not $($Gleiche[-1].Zeile -eq $DIs[$j].Zeile)) + { + $Gleiche += $DIs[$j] + } + $Gleiche += $DIs[$($j +1)] + Write-Host "Gleiche: " $Gleiche + } +} + +# $Gleiche = $Gleiche.Zeile | select -Unique + +if ($($Gleiche.Length) -gt 0) +{ + Write-Host "Folgende Eingänge sind doppelt belegt" + Write-Host "Eingang Zeile (Excel)" + foreach ($Gleich in $Gleiche) + { + Write-Host $Gleich.Name " " $Gleich.Zeile + } +} +else +{ + Write-Host "Es gibt keine doppelt belegten Eingänge!" +} + +Write-Host $(Get-Date -Format "HH:mm:ss") \ No newline at end of file diff --git a/Test-Skripte/Skript2.ps1 b/Test-Skripte/Skript2.ps1 new file mode 100644 index 0000000..3197caf --- /dev/null +++ b/Test-Skripte/Skript2.ps1 @@ -0,0 +1,106 @@ +Write-Host $(Get-Date -Format "HH:mm:ss") + +$Excel = New-Object -ComObject Excel.Application +$EDatei = $Excel.WorkBooks.Open("R:\m.kraft\Excel Werte ändern\Excel-Datei.xlsx") +$EBlatt = $EDatei.WorkSheets.item(1) +$Excel.Visible = $false + +$Pfad = "R:\m.kraft\Excel Werte ändern\EA_Krüger_19.03.2020 - Kurz.txt" +$i = 1 + +$DIs = @() +$DQs = @() +$Fehler = @() + + +$Datei = Get-Content $Pfad + +$ZuDI = @(„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“) +$ZuDQ = @(„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“) + +foreach ($Eintrag in $Datei) +{ + $Eintragszeile = $Eintrag.split("'") + <#Write-Host "Gesamter eintrag " $Eintragszeile + Write-Host "Eintrag 1 " $Eintragszeile[0] + Write-Host "Eintrag 2 " $Eintragszeile[1] + Write-Host "Eintrag 3 " $Eintragszeile[2] + Write-Host "Eintrag 4 " $Eintragszeile[3]#> + $EAZahl = $Eintragszeile[1] + $EAKommentar = $Eintragszeile[3] + + $EAZahl = $EAZahl.TrimStart("'") + #$EAZahl = $EAZahl.TrimEnd("'") + #$EAKommentar = $EAKommentar.TrimStart("'") + $EAKommentar = $EAKommentar.TrimEnd("'") + + if ($($($EAZahl.Substring(0,2)) -in $ZuDI)) + { + $EAZahl = $EAZahl -replace("[a-zA-Z]", "") + $LaengeEAZahl = $($EAZahl.Length - 1) + $EAZahl = $EAZahl.Substring(0,$LaengeEAZahl) + "." + $EAZahl.Substring($LaengeEAZahl) + $EAZahl = "DI" + $EAZahl + $DIs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + } + elseif ($($($EAZahl.Substring(0,2)) -in $ZuDQ)) + { + $EAZahl = $EAZahl -replace("[a-zA-Z]", "") + $LaengeEAZahl = $($EAZahl.Length - 1) + $EAZahl = $EAZahl.Substring(0,$LaengeEAZahl) + "." + $EAZahl.Substring($LaengeEAZahl) + $EAZahl = "DQ" + $EAZahl + $DQs += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + } + else + { + Write-Host "Achtung, Fehler bei $EAZahl $EAKommentar" + $Fehler += @([pscustomobject]@{Name=$EAZahl;Zeile=$i}) + #fehler + } + + #Write-Host $EAZahl + #Write-Host $EAKommentar + + $EBlatt.Cells.Item($i,1) = $EAZahl + $EBlatt.Cells.Item($i,2) = $EAKommentar + + $i++ +} + +$EDatei.Save() +$Excel.Quit() + +$DIs = $DIs | Sort-Object "Name" +$Gleiche = @() + +for ($j = 0; $j -lt $($DIs.Count -1); $j++) +{ + $IstGleich = $($DIs[$j].Name -eq $DIs[$($j+1)].Name) + if ( $IstGleich ) + { + #Eintrag hinzufügen + if ( -not $($Gleiche[-1].Zeile -eq $DIs[$j].Zeile)) + { + $Gleiche += $DIs[$j] + } + $Gleiche += $DIs[$($j +1)] + Write-Host "Gleiche: " $Gleiche + } +} + +# $Gleiche = $Gleiche.Zeile | select -Unique + +if ($($Gleiche.Length) -gt 0) +{ + Write-Host "Folgende Eingänge sind doppelt belegt" + Write-Host "Eingang Zeile (Excel)" + foreach ($Gleich in $Gleiche) + { + Write-Host $Gleich.Name " " $Gleich.Zeile + } +} +else +{ + Write-Host "Es gibt keine doppelt belegten Eingänge!" +} + +Write-Host $(Get-Date -Format "HH:mm:ss") \ No newline at end of file diff --git a/Test-Skripte/Skript3.ps1 b/Test-Skripte/Skript3.ps1 new file mode 100644 index 0000000..a61f712 --- /dev/null +++ b/Test-Skripte/Skript3.ps1 @@ -0,0 +1,39 @@ +$ZuDI = @("P", "DI", "SF") + +$EAZahl = "PF0001" + +$EANurZahl = $EAZahl -replace "[\d]" + +Write-Host $EANurZahl + +if ($EANurZahl -in $ZuDI) { + Write-Host "Ist enthalten" +} +else { + Write-Host "Ist nicht enthalten" +} + +#Write-Host $($($EAZahl.Substring(0,2)) -in $ZuDI) + +<# foreach ($Eingang in $ZuDI) { + if ($EAZahl.Contains($Eingang)) { + Write-Host "Ist enthalten bei Eingang " $Eingang + } + # Todo: Schleife verlassen, nachdem ersten positives Ergebnis vorliegt + # Was passiert, +} #> + +<# if ($($EAZahl -match $ZuDI )) { + Write-Host "Ist enthalten" +} +else { + Write-Host "Ist nicht enthalten" +} + #> + <# + if ($EAZahl -in $ZuDI) + { + $EAZahl = $EAZahl.Remove(0,2) + $EAZahl = "DI" + $EAZahl + #replace + }#> \ No newline at end of file diff --git a/Test-Skripte/Skript4.ps1 b/Test-Skripte/Skript4.ps1 new file mode 100644 index 0000000..f982538 --- /dev/null +++ b/Test-Skripte/Skript4.ps1 @@ -0,0 +1,7 @@ +[CmdletBinding()] +param ( +[Parameter(Mandatory=$true)][String]$var1, +[String]$var2 +) +Write-Host $var1 + diff --git a/Test-Skripte/Skript5.ps1 b/Test-Skripte/Skript5.ps1 new file mode 100644 index 0000000..6d71174 --- /dev/null +++ b/Test-Skripte/Skript5.ps1 @@ -0,0 +1,13 @@ +$EAZahl = "004" + +$LaengeEAZahl = $EAZahl.Length +Write-Host $LaengeEAZahl + +$Teil1 = $EAZahl.Substring(0,$($LaengeEAZahl - 1)) +Write-Host $Teil1 + +$Teil2 = $EAZahl.Substring($($LaengeEAZahl - 1)) +Write-Host $Teil2 + +$NeueEAZahl = $($Teil1 + "." + $Teil2) +Write-Host $NeueEAZahl \ No newline at end of file diff --git a/Test-Skripte/Skript6.ps1 b/Test-Skripte/Skript6.ps1 new file mode 100644 index 0000000..50cb055 --- /dev/null +++ b/Test-Skripte/Skript6.ps1 @@ -0,0 +1,32 @@ +<# +$Verzeichnis = Read-Host -Prompt "Zielverzeichnis: " + +Write-Host $Verzeichnis + +$IstVorhanden = $(Test-Path $Verzeichnis) + +Write-Host $IstVorhanden +#> + +# Gültigen Pfad eingeben und anschließend in diesem Verzeichnis .txt-Datei öffnen + +$UngueltigerPfad = $true + + +while ($UngueltigerPfad) +{ + $Pfad = Read-Host -Prompt "Zielverzeichnis: " + $UngueltigerPfad = -not $(Test-Path $Pfad -PathType Container) +} +# Write-Host "Gültigen Pfad angegeben" + +$Dateien = split-path $(Get-ChildItem $Pfad\*.txt) -Leaf + +Write-Host $Dateien + +$Input = $Dateien | Out-GridView -PassThru -Title "Datei wählen" + +Write-Host $Input + +$DateiPfad = Join-Path -path $Pfad -childpath $Input -Resolve +Write-Host $DateiPfad \ No newline at end of file diff --git a/Test-Skripte/Skript7.ps1 b/Test-Skripte/Skript7.ps1 new file mode 100644 index 0000000..0f4d7b8 --- /dev/null +++ b/Test-Skripte/Skript7.ps1 @@ -0,0 +1,25 @@ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name + +Write-Host "Laufwerke: " $Laufwerke + +$Pfad = "R:\m.kraft\Excel Werte ändern\" +Write-Host "Pfad: " $Pfad +$AktuelleUnterordner = Get-ChildItem $Pfad -Directory +$AktuelleTxtDateien = $(Get-ChildItem $Pfad\*.txt) + +if ($AktuelleTxtDateien.length -gt 0) +{ + $AktuelleTxtDateien = $(Split-Path $AktuelleTxtDateien -Leaf) +} + +Write-Host "Unterordner: " $AktuelleUnterordner +Write-Host "Dateien: " $AktuelleTxtDateien + +<# +Schleife 1: Solange aktiv, bis Verzeichniswahl auf true ist + Schleife 2: (In Schleife 1) SOlange aktiv, bis Ordnerwahl auf true ist + +Oder: +[bool] $DateiauswahlAktiv = $true, bis eine Datei gewählt ist. Auch mit 2 Schleifen. +#> +# Start \ No newline at end of file diff --git a/Test-Skripte/Skript8.ps1 b/Test-Skripte/Skript8.ps1 new file mode 100644 index 0000000..edd6d61 --- /dev/null +++ b/Test-Skripte/Skript8.ps1 @@ -0,0 +1,16 @@ +# Excel-Datei erstellen + + + +$DateiPfad = "R:\m.kraft\Excel Werte ändern\_Test\Neuer Ordner\Test-Datei.xlsx" + +$ExcelDatei = New-Object -ComObject excel.application +$Mappe = $ExcelDatei.Workbooks.Item(1) # Rechte Mappe +$Blatt1 = $Mappe.WorkSheets.Add() +$Blatt1.Name = "PLC Tags" +$Blatt2 = $Mappe.WorkSheets.Add() # Linke Mappe +$Blatt2.Name = "Mappe2" +$Mappe.SaveAs($DateiPfad) + +$Mappe.Close() +$ExcelDatei.Quit() \ No newline at end of file diff --git a/Test-Skripte/Skript9.ps1 b/Test-Skripte/Skript9.ps1 new file mode 100644 index 0000000..b5c8382 --- /dev/null +++ b/Test-Skripte/Skript9.ps1 @@ -0,0 +1,143 @@ +# Wirft aktuell Fehler, wenn man zurück in das Laufwerkverzeichnis geht! + +Function Main +{ +$LaufwerkAuswahlAktiv = $true +$DateiAuswahlAktiv = $true + +while ($LaufwerkAuswahlAktiv) +{ + $Laufwerke = LaufwerkeFinden + Write-Host "Gefundene Laufwerke: " $Laufwerke + + $Pfad = Laufwerkwaehlen $Laufwerke + Write-Host "Gewähltes Laufwerk: " $Pfad + + $LaufwerkAuswahlAktiv = $false + $DateiAuswahlAktiv= $true + + while ($DateiAuswahlAktiv) + { + $UnterOrdner = UnterOrdnerFinden $Pfad + Write-Host "Mögliche Unterordner: " $UnterOrdner + + $TxtDateien = TxtDateienFinden $Pfad + Write-Host "Mögliche txt Dateien: " $TxtDateien + + #-> Fall einbauen, wenn es weder Unterordner noch TxtDateien gibt? + $AuswahlOptionen = Optionen $UnterOrdner $TxtDateien + Write-Host "Auswahloptionen: " $AuswahlOptionen + + $Auswahl = OrdnerWaehlen $Pfad $AuswahlOptionen + Write-Host "Gewählte Option: " $Auswahl + + if ($Auswahl -ne "Zurueck") + { + $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve + } + else + { + Write-Host "Eine Ordnerebene zurück" + $Pfad = Split-Path $Pfad + Write-Host "Neuer Pfad: " $Pfad + + if ($($Pfad.Length -le 3)) + { + Write-Host "Der Pfad ist kürzer als 3 Zeichen -> Laufwerk wählen" + $DateiAusahlAktiv = $false + } + } + + Write-Host "Aktueller Pfad : " $Pfad + + if ($($Auswahl -match ".txt")) #Besser: Letzte 4 Zeichen von auswahl nehmen und dann -eq + { + Write-Host "Es handelt sich um eine .txt-Datei" + $DateiauswahlAktiv = $false + } + Write-Host "--------------------------------------------------------------------------------------" + # Zwei ifs + #1 .txt-Datei gewählt -> $DateiAuswahlAktiv = $false + #2 Pfad ist aufgrund von "Zurück" leer (kein Laufwerk mehr) -> $LaufwerkauswahlAktiv = $true + } + + Write-Host "Gewählte Datei: " $Pfad +} + +} + +Function LaufwerkeFinden() +{ +$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name +$i = 0 + +foreach($Laufwerk in $Laufwerke) +{ + $Laufwerke[$i] = $Laufwerk + ":\" + $i++ +} + +return $Laufwerke +} + +Function Laufwerkwaehlen($Laufwerke) +{ +$Eingabe = $Laufwerke | Out-GridView -PassThru -Title "Laufwerke" + +return $Eingabe +} + +Function UnterOrdnerFinden($Pfad) +{ +#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung +return $(Get-Childitem $Pfad -Directory) +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +if ($TxtDateien.Length -gt 0) +{ + return $(Split-Path $TxtDateien -Leaf) +} +else +{ + return +} +} + +Function Optionen($UnterOrdner, $TxtDateien) +{ +#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück +$OrdnerFormat = @() +$TxtDateienFormat = @() +foreach ($Ordner in $UnterOrdner) +{ + $OrdnerFormat += [System.String]$Ordner +} +foreach ($TxtDatei in $TxtDateien) +{ + $TxtDateienFormat += [System.String]$TxtDatei +} + +$Optionen = $OrdnerFormat + $TxtDateienFormat + "Zurueck" + +return $Optionen +} + +Function OrdnerWaehlen($Pfad, $AuswahlOptionen) +{ +if ($Pfad -eq "") +{ + $Pfad = "Laufwerke" +} + +$Eingabe = $AuswahlOptionen | Out-GridView -PassThru -Title $Pfad + +Write-Host "Gewählte Option in Funktion: " $Input + +return $Eingabe +} + +Main \ No newline at end of file diff --git a/Test-Skripte/Txt-Dateien-Test.ps1 b/Test-Skripte/Txt-Dateien-Test.ps1 new file mode 100644 index 0000000..7c8fe4f --- /dev/null +++ b/Test-Skripte/Txt-Dateien-Test.ps1 @@ -0,0 +1,49 @@ +function KompatibilitaetsCheck ($SpeicherOrt){ + $Inhalte = Get-Content $SpeicherOrt + if ($Inhalte.Length -eq 0) { + Write-Host "Laenge = 0" + return $false + } + else { + foreach ($Zeile in $Inhalte) { + if (-not ($Zeile -match "'\w+','.+'") -and $Zeile.Length -gt 0) { + Write-Host "Fehler in Zeile" $Zeile + return $false + } + } + } + return $true +} + +Function TxtDateienFinden($Pfad) +{ +$TxtDateien = $(Get-Childitem $Pfad\*.txt) + +$KompatibleTxtDateien = @() + +if ($TxtDateien.Length -gt 0) +{ + foreach ($TxtDatei in $TxtDateien) { + Write-Host "Aktuelle txt-Datei: " $TxtDatei + if (KompatibilitaetsCheck $TxtDatei) { + $KompatibleTxtDateien += $TxtDatei + Write-Host " Datei Akzeptiert" + } + else { + Write-Host " Datei nicht Akzeptiert" + } + } + if ($KompatibleTxtDateien.Length -gt 0) { + return $(Split-Path $KompatibleTxtDateien -Leaf) + } + else { + Return + } +} +else +{ + return +} +} + +TxtDateienFinden "Z:\Automatisierung\WSCAD\IMPORT-EXPORT_WSCAD\SKRIPT-KONVERTIERUNG\Dieses Verzeichnis bitte nicht als Ablage nutzen" \ No newline at end of file diff --git a/doc/Anleitung.one b/doc/Anleitung.one new file mode 100644 index 0000000..ab9bb7b Binary files /dev/null and b/doc/Anleitung.one differ diff --git a/doc/Bilder Anleitung/01_Einrichten.JPG b/doc/Bilder Anleitung/01_Einrichten.JPG new file mode 100644 index 0000000..45a417d Binary files /dev/null and b/doc/Bilder Anleitung/01_Einrichten.JPG differ diff --git a/doc/Bilder Anleitung/01_Export.jpg b/doc/Bilder Anleitung/01_Export.jpg new file mode 100644 index 0000000..8b23c6a Binary files /dev/null and b/doc/Bilder Anleitung/01_Export.jpg differ diff --git a/doc/Bilder Anleitung/02_Einrichten.JPG b/doc/Bilder Anleitung/02_Einrichten.JPG new file mode 100644 index 0000000..e0fde67 Binary files /dev/null and b/doc/Bilder Anleitung/02_Einrichten.JPG differ diff --git a/doc/Bilder Anleitung/02_Export.jpg b/doc/Bilder Anleitung/02_Export.jpg new file mode 100644 index 0000000..989e149 Binary files /dev/null and b/doc/Bilder Anleitung/02_Export.jpg differ diff --git a/doc/Bilder Anleitung/02_Export_besser.jpg b/doc/Bilder Anleitung/02_Export_besser.jpg new file mode 100644 index 0000000..58f0793 Binary files /dev/null and b/doc/Bilder Anleitung/02_Export_besser.jpg differ diff --git a/doc/Bilder Anleitung/03_Einrichten.JPG b/doc/Bilder Anleitung/03_Einrichten.JPG new file mode 100644 index 0000000..e6321c5 Binary files /dev/null and b/doc/Bilder Anleitung/03_Einrichten.JPG differ diff --git a/doc/Bilder Anleitung/03_Export.jpg b/doc/Bilder Anleitung/03_Export.jpg new file mode 100644 index 0000000..509e669 Binary files /dev/null and b/doc/Bilder Anleitung/03_Export.jpg differ diff --git a/doc/Bilder Anleitung/04_Einrichten.JPG b/doc/Bilder Anleitung/04_Einrichten.JPG new file mode 100644 index 0000000..2246364 Binary files /dev/null and b/doc/Bilder Anleitung/04_Einrichten.JPG differ diff --git a/doc/Bilder Anleitung/05_Einrichten.JPG b/doc/Bilder Anleitung/05_Einrichten.JPG new file mode 100644 index 0000000..c547d8f Binary files /dev/null and b/doc/Bilder Anleitung/05_Einrichten.JPG differ diff --git a/doc/Bilder Anleitung/06_Einrichten.JPG b/doc/Bilder Anleitung/06_Einrichten.JPG new file mode 100644 index 0000000..fe09832 Binary files /dev/null and b/doc/Bilder Anleitung/06_Einrichten.JPG differ diff --git a/doc/Bilder Anleitung/Thumbs.db b/doc/Bilder Anleitung/Thumbs.db new file mode 100644 index 0000000..0289241 Binary files /dev/null and b/doc/Bilder Anleitung/Thumbs.db differ diff --git a/doc/Erster Start und Einrichtung.pdf b/doc/Erster Start und Einrichtung.pdf new file mode 100644 index 0000000..9f9d350 Binary files /dev/null and b/doc/Erster Start und Einrichtung.pdf differ diff --git a/doc/Export BricsCAD.pdf b/doc/Export BricsCAD.pdf new file mode 100644 index 0000000..57dda81 Binary files /dev/null and b/doc/Export BricsCAD.pdf differ diff --git a/doc/IO_besser_V2.txt b/doc/IO_besser_V2.txt new file mode 100644 index 0000000..9f04765 --- /dev/null +++ b/doc/IO_besser_V2.txt @@ -0,0 +1,8 @@ +IO C010000 +BEZEICHNUNG C080000 +VERW C020000 +KENNZEICHNUNG C040000 +TEXT-D C040000 +TEXT-E C040000 +TEXT-ES C040000 +TEXT-F C040000 \ No newline at end of file diff --git a/doc/LinksammlungPowerShell.md b/doc/LinksammlungPowerShell.md new file mode 100644 index 0000000..0a5fe3b --- /dev/null +++ b/doc/LinksammlungPowerShell.md @@ -0,0 +1,85 @@ +# Allgemein +Webseite Beschreibung +https://germanpowershell.com/leere-ordner-loeschen/ Leere Ordner löschen; iterieren durch Verzeichnisse; Logdatei (Basis) +https://www.netz-weise-it.training/weisheiten/mehrfach-umbenennen-mit-powershell-rename-item-und-regulaeren-ausdruecken.html Umbennenen +https://blog.netwrix.de/2019/10/21/dateiverwaltung-mit-powershell/ Kopieren, verschieben, umbennen, erstellen von Dateien +https://blog.netwrix.de/2019/10/17/tutorial-zur-skripterstellung-mit-windows-powershell-fur-einsteiger/ Grundlagen allgemein +https://blog.stefanrehwald.de/2013/03/03/powershell-03-2-strings-bearbeiten-und-untersuchen-mit-funktionen-wie-trim-substring-contains-tolower-toupper-startswith-endswith/ Bearbeiten von Strings mit Trim und Substring +https://blog.stefanrehwald.de/2013/02/19/powershell-03-strings-zerlegen-zuschneiden-teile-ausschneiden-verbinden/ Bearbeiten von Strings mit Split, Remove und Replace +https://blog.stefanrehwald.de/2013/03/05/powershell-04-textdatei-auslesen-bearbeiten-anlegen-befullen/ Textdateien erstellen und bearbeiten +https://www.computerperformance.co.uk/powershell/if-and/ if, and, or +https://www.windowspro.de/script/vergleichsoperatoren-powershell-eq-lt-gt-contains-match >, <, =, >=, =< +https://it-learner.de/mit-der-windows-powershell-die-anzahl-der-dateien-in-einem-verzeichnis-zaehlen/ Anzahl von Dateien/ Ordnern in Verzeichnis +https://www.windowspro.de/script/if-else-switch-bedingte-anweisungen-powershell if, else, switch +https://www.scriptrunner.com/de/blog/einfuehrung-in-powershell-schleifen/ Schleifen +https://germanpowershell.com/pfad-cmdlets-und-funktionen/ Pfade anpassen und überprüfen +https://www.windowspro.de/script/select-object-eigenschaften-von-objekten-powershell-filtern Eigenschaften von Objekten +https://blog.stefanrehwald.de/2013/09/11/powershell-11-funktionen-functions/ Funktionen +https://stackoverflow.com/questions/10286164/function-return-value-in-powershell return bei Funktionen +https://devblogs.microsoft.com/powershell/boolean-values-and-operators/ Booleans +https://docs.microsoft.com/de-de/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.1 Arrays +https://stackoverflow.com/questions/9397137/powershell-multidimensional-arrays Mehrdimensionale Arrays +https://www.windowspro.de/script/daten-sortieren-powershell Sortieren +https://www.windowspro.de/script/arrays-powershell-anlegen-aendern-auslesen-sortieren-loeschen Arrays +https://devblogs.microsoft.com/scripting/weekend-scripter-sorting-powershell-hash-tables/ Hash-Tabellen sortieren +https://blog.netwrix.de/2019/12/19/variablen-und-arrays-in-powershell/#PowerShell%20Arrays Variablen(-typen, gute Übersicht)/ Arrays +https://www.msxfaq.de/code/powershell/psarray.htm Arrays und Probleme im Zusammenhang mit Funktionen +https://docs.microsoft.com/de-de/powershell/scripting/learn/deep-dives/everything-about-pscustomobject?view=powershell-7.1 PSCustomObject +https://www.windowspro.de/script/test-path-powershell-pruefen-ob-eine-datei-existiert Überprüfen, ob es einen Pfad oder eine Datei gibt +https://social.technet.microsoft.com/Forums/de-DE/322a2b8d-92d8-4e6d-a9cc-518e71b3c0c6/zahlen-aus-einem-string-filtern?forum=powershell_de Zahlen oder Buchstaben aus String filtern +https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.1 Einstellungsmöglichkeiten Execution-Policy +https://devblogs.microsoft.com/scripting/run-powershell-scripts-stored-on-a-central-file-share/ Powershell-Skript auf Server ausführen + + +# Excel-Speziell + +Webseite Beschreibung +https://www.script-example.com/PowerShell-write-excel Excel öffnen und in Zellen schreiben +https://www.script-example.com/powershell-skript Übergabe von Variablen beim Start +https://www.sepago.de/blog/powershell-die-param-anweisung-erweiterte-parameterdefinition-advanced-parameters-part-15-2/ Übergabe von Variablen beim Start Maybe good to watch: https://youtu.be/9uMorgBB_RU +https://forum.chip.de/discussion/1686803/powershell-string-auf-buchstaben-pruefen-und-loeschen Buchstaben in String finden und löschen +https://www.windowspro.de/script/benutzereingaben-powershell-read-host-mandatorytrue-out-gridview Benutzereingabe +https://www.tech-faq.net/speicherplatz-anzeigen-mit-powershell/ Laufwerke anzeigen +https://social.technet.microsoft.com/Forums/ie/de-DE/f44998ec-7adc-46b3-9667-ca0550c07ad8/auswahl-eines-wertes-durch-den-user-aus-einem-array?forum=powershell_de Beispiel GUI +http://eddiejackson.net/wp/?p=19041 Beispiel GUI2 +https://docs.microsoft.com/de-de/powershell/scripting/samples/selecting-items-from-a-list-box?view=powershell-7.1 GUI Auswahlliste +https://www.windowspro.de/script/variablen-powershell-namen-werte-datentypen Variablen/ Datentypen festlegen mit Übersicht über datentypen +https://techwizard.cloud/2014/03/11/powershell-custom-gui-input-box-for-passing-values-to-variables/ Beispiel GUI mit Eingaben, Schließen und return-Werten +https://stackoverflow.com/questions/22022681/powershell-gui-return-file-path GUI für Explorer, unübersichtlicher Aufbau +https://www.martinlehmann.de/wp/download/powershell-gui-programmierung-fur-dummies-step-by-step/ GUI in Einzelteilen +https://docs.microsoft.com/de-de/powershell/scripting/samples/creating-a-custom-input-box?view=powershell-7.1 Microsoft Doc zu GUI-Bauteilen +https://www.windowspro.de/script/grafische-oberflaeche-gui-fuer-powershell-scripts-erstellen GUI-Elemente +https://www.script-example.com/Powershell-GUI Bausteine GUI +https://stackoverflow.com/questions/44503254/how-do-i-change-the-font-size-of-a-list-box-in-powershell Schriftart und -größe in GUI verändern +https://stackoverflow.com/questions/11468423/powershell-creating-custom-datagridview DataGriedView (in GUI) +https://social.technet.microsoft.com/Forums/windowsserver/de-DE/8af91b31-7712-499c-a90b-a5cc8f95a8ff/umlaute-in-powershell-script-verwenden?forum=powershell_de Ursache Umlaute-Problem +https://devblogs.microsoft.com/scripting/powershell-looping-the-continue-statement/ Continue in Schleifen +https://stackoverflow.com/questions/52951758/is-there-a-way-to-run-a-popup-window-while-a-script-runs Alles in ein GUI schreiben +https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.folderbrowserdialog?view=net-5.0 Dateien öffnen +https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.folderbrowserdialog?view=net-5.0 Ordner öffnen +https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.tabcontrol.onenter?view=net-5.0 Tab Eigenschaften +https://www.martinlehmann.de/wp/scripting/powershell/dynamische-variablennamen-in-powershell/ Dynamische Variablennamen +https://www.sepago.de/blog/powershell-arbeiten-mit-pfaden-und-locations/ Aktuelles Verzeichnis abfragen +https://docs.microsoft.com/de-de/powershell/scripting/samples/managing-current-location?view=powershell-7.1 Aktuelles Verzeichnis abfragen oder festlegen +https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_variables?view=powershell-7.1 Variablen - alles +https://techhusain.wordpress.com/2017/02/14/building-dynamic-forms-with-powershell/ Beispiel für zur Laufzeit erstellte GUI-Elemente mit falscher Übergabe +https://stackoverflow.com/questions/35115725/dynamically-add-and-remove-content-in-gui-form Richtige übergabe von Variablenwerten bei zur Laufzeit erstellten GUI-Elementen +https://serverfixes.com/powershell-radiobuttons GroupBox für RadioButtons +https://social.technet.microsoft.com/Forums/en-US/bc47bfa7-a275-41db-b2bf-da9b1051f29f/powershell-gui-adding-and-removing-controls?forum=winserverpowershell Einträge aus GUI entfernen +https://info.sapien.com/index.php/guis/gui-scripting Übersichtsseite zu diversen PS Themen +https://channel9.msdn.com/Series/Getting-Started-with-Microsoft-PowerShell?l=r54IrOWy_2304984382 PS Lernvideos (ca. 40 min lang jeweils) +https://mcpmag.com/articles/2015/12/14/test-variables-in-powershell.aspx 3 Möglichkeiten um zu testen, ob eine Variable existiert +https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/renaming-variables Variablen umbennen +https://www.mcseboard.de/topic/154339-user-mit-powershell-auslesen/ Aktuellen Benutzer ausgeben + +# German Powershell +https://germanpowershell.com/datum-und-zeit-verstehen/ Datum und Uhrzeit +https://germanpowershell.com/unix-timestamp/ UNIX Timestamp +https://germanpowershell.com/in-eine-datei-schreiben-leistungstest/ In Datei schreiben +https://germanpowershell.com/exception-schreiben-mit-throw/ Exception/ Throw +https://germanpowershell.com/fehlersuche-exeptionhandling/ Exception Handling +https://germanpowershell.com/powershell-net-dateien-ordner/ Massenbearbeitung von Dateien (Verschieben, kopieren, löschen) +https://germanpowershell.com/logdatei-erstellen/ Logdatei erstellen + + +