Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CSV-Datei in PrimalForms einbinden

Frage Entwicklung Batch & Shell

Mitglied: Gundelputz

Gundelputz (Level 1) - Jetzt verbinden

10.06.2013 um 12:18 Uhr, 2798 Aufrufe, 17 Kommentare, 6 Danke

Hallo da draussen,
nach dem mein Chef meine ersten Versuche mit Powershell begutachtet hat sind ihm gleich ein paar neue Aufgaben für mich eingefallen.
Wir werden uns also mit sehr hoher Warscheinlichkeit die nähsten Wochen öffters lesen.
Aber erst ein mal würde ich gern wissen wie ich mir eine CSV-Datei grafisch anzeigen lassen kann. In PrimalForms giebt es die Forms DataGrid und DataGridView. Sind das die richtigen Componenten für die Darstellung oder liege ich hier falsch. Wenn ja wird ich gern wissen wie ich die Daten an die Forms binden kann. Wenn nein was muss ich tun.
Mitglied: Endoro
10.06.2013 um 13:09 Uhr
Hallo Gundelputz,

meinst du nicht dein Chėffė sollte einen Programmierer bezahlen?

Gruss!
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 13:12 Uhr
Nö sonts fällt ihm noch was anderes ein wie er mir den Tag "verschönern" kann.
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 14:23 Uhr
hab jetzt einen kleinen Teilerfolg erziehlt.

$array_csv = new-object System.Collections.ArrayList #array bereit stellen

$data_csv =@(Import-CSV "c:\ps_proj\proj_1\a4w.csv"| write-output) #csv einlesen und vorbereiten
$array_csv.AddRange($data_csv) #array mit daten aus csv füllen

$dataGridView1.DataSource = $array_csv #übergabe der Daten an datagridview

Es werden mir jetzt die Daten angezeigt aber nicht so wie ich es möchte.
Es giebt nur eine Spalte in der dann der gesamte Datensatz enthalten ist. Wahrscheinlich ist das DataGridView falsch konfiguriert.
kann mir da jemand Helfen.
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 14:52 Uhr
habs auch mal so probiert

$array_csv = new-object System.Collections.ArrayList
$csv = import-csv -Path "C:\ps_proj\proj_1\a4w.csv"
$array_csv.AddRange($csv)
$dataGridView1.DataSource = $array_csv

ohne Erfolg bzw. mit dem gleichen Ergebnis.

so schwer kann es doch nicht sein. sonst gäbe es diese Forms doch nicht. ist hier vieleicht die csv als Datenquelle ungeeignet?
Bitte warten ..
Mitglied: colinardo
10.06.2013, aktualisiert um 17:28 Uhr
Hi Gundelputz,
das DataGrid-View Steuerelement ist Overkill für deinen Zweck, so einfach wie du dir das füllen des Steuerelements vorstellst geht das nicht. Dazu brauchst du noch eine DataTable und eine BindingSource (siehe hier)

Für deinen Zweck reicht ein ListView Objekt.
In Zeile 23 noch deine CSV-Datei eintragen.

Beispiel-Code zum anzeigen einer CSV:
01.
#Helper Functions 
02.
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}} 
03.
 
04.
#Generated Form Function 
05.
function GenerateForm { 
06.
 
07.
#region Import the Assemblies 
08.
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 
09.
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null 
10.
#endregion 
11.
 
12.
#region Generated Form Objects 
13.
$form1 = New-Object System.Windows.Forms.Form 
14.
$txtDelim = New-Object System.Windows.Forms.TextBox 
15.
$label2 = New-Object System.Windows.Forms.Label 
16.
$btnChoose = New-Object System.Windows.Forms.Button 
17.
$label1 = New-Object System.Windows.Forms.Label 
18.
$txtCSV = New-Object System.Windows.Forms.TextBox 
19.
$lv1 = New-Object System.Windows.Forms.ListView 
20.
$btnLoadData = New-Object System.Windows.Forms.Button 
21.
$openFileDialog1 = New-Object System.Windows.Forms.OpenFileDialog 
22.
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState 
23.
#endregion Generated Form Objects 
24.
 
25.
#---------------------------------------------- 
26.
#Generated Event Script Blocks 
27.
#---------------------------------------------- 
28.
 
29.
$handler_btnLoadData_Click=  
30.
31.
    if (Test-Path $txtCSV.text){ 
32.
        $lv1.Clear() 
33.
        $csv = Get-Content $txtCSV.text 
34.
        $csvSplitChar = $txtDelim.text 
35.
        #create columns 
36.
        $firstLine = $csv[0].split($csvSplitChar) 
37.
        for ($i = 0; $i -lt $firstLine.length; $i++){ 
38.
             $lv1.Columns.Add($firstLine[$i].Trim('"')) 
39.
40.
        #import data 
41.
        for ($i = 1; $i -lt $csv.length; $i++){ 
42.
            $lineArray = $csv[$i].split($csvSplitChar) 
43.
            $listViewItem = New-Object System.Windows.Forms.ListViewItem($lineArray[0].Trim('"')) 
44.
            for ($y = 1; $y -lt $lineArray.Length; $y++){ 
45.
                $listViewItem.Subitems.Add($lineArray[$y].Trim('"')) 
46.
47.
            $lv1.Items.Add($listViewItem) 
48.
49.
        $lv1.AutoResizeColumns(2) 
50.
    }else{ 
51.
        [Windows.Forms.MessageBox]::Show("Datei existiert nicht") 
52.
53.
 
54.
55.
 
56.
$btnChoose_OnClick=  
57.
58.
    $openFileDialog1.Filter = "CSV-Dateien(*.csv)|*.csv" 
59.
    $openFileDialog1.MultiSelect = $False 
60.
    if ($openFileDialog1.ShowDialog() -eq 1){ 
61.
        $txtCSV.text = $openFileDialog1.FileName 
62.
63.
    #Erkenne Trennzeichen der CSV-Datei 
64.
    $csvString = (Get-Content $txtCSV.text)[0] 
65.
    $delim = $csvString | Get-Matches "^[^;,]*(.)" 1 
66.
    $txtDelim.text = $delim 
67.
     
68.
69.
 
70.
$txtCSV_TextChanged =  
71.
72.
    if ($txtCSV.text -le ""){ 
73.
        $btnLoadData.Enabled = $False 
74.
    }else{ 
75.
        $btnLoadData.Enabled = $True 
76.
77.
78.
 
79.
$OnLoadForm_StateCorrection= 
80.
{#Correct the initial state of the form to prevent the .Net maximized form issue 
81.
	$form1.WindowState = $InitialFormWindowState 
82.
83.
 
84.
#---------------------------------------------- 
85.
#region Generated Form Code 
86.
$System_Drawing_Size = New-Object System.Drawing.Size 
87.
$System_Drawing_Size.Height = 308 
88.
$System_Drawing_Size.Width = 441 
89.
$form1.ClientSize = $System_Drawing_Size 
90.
$form1.DataBindings.DefaultDataSourceUpdateMode = 0 
91.
$System_Drawing_Size = New-Object System.Drawing.Size 
92.
$System_Drawing_Size.Height = 320 
93.
$System_Drawing_Size.Width = 320 
94.
$form1.MinimumSize = $System_Drawing_Size 
95.
$form1.Name = "form1" 
96.
$form1.Text = "CSV-Daten anzeigen" 
97.
 
98.
$txtDelim.DataBindings.DefaultDataSourceUpdateMode = 0 
99.
$txtDelim.Anchor = 6 
100.
$System_Drawing_Point = New-Object System.Drawing.Point 
101.
$System_Drawing_Point.X = 80 
102.
$System_Drawing_Point.Y = 278 
103.
$txtDelim.Location = $System_Drawing_Point 
104.
$txtDelim.MaxLength = 1 
105.
$txtDelim.Name = "txtDelim" 
106.
$System_Drawing_Size = New-Object System.Drawing.Size 
107.
$System_Drawing_Size.Height = 20 
108.
$System_Drawing_Size.Width = 27 
109.
$txtDelim.Size = $System_Drawing_Size 
110.
$txtDelim.TabIndex = 7 
111.
$txtDelim.Text = "," 
112.
 
113.
$form1.Controls.Add($txtDelim) 
114.
 
115.
$label2.DataBindings.DefaultDataSourceUpdateMode = 0 
116.
$label2.Anchor = 6 
117.
$System_Drawing_Point = New-Object System.Drawing.Point 
118.
$System_Drawing_Point.X = 12 
119.
$System_Drawing_Point.Y = 281 
120.
$label2.Location = $System_Drawing_Point 
121.
$label2.Name = "label2" 
122.
$System_Drawing_Size = New-Object System.Drawing.Size 
123.
$System_Drawing_Size.Height = 23 
124.
$System_Drawing_Size.Width = 78 
125.
$label2.Size = $System_Drawing_Size 
126.
$label2.TabIndex = 6 
127.
$label2.Text = "Trennz." 
128.
 
129.
$form1.Controls.Add($label2) 
130.
 
131.
$btnChoose.Anchor = 10 
132.
 
133.
$btnChoose.DataBindings.DefaultDataSourceUpdateMode = 0 
134.
 
135.
$System_Drawing_Point = New-Object System.Drawing.Point 
136.
$System_Drawing_Point.X = 298 
137.
$System_Drawing_Point.Y = 253 
138.
$btnChoose.Location = $System_Drawing_Point 
139.
$btnChoose.Name = "btnChoose" 
140.
$System_Drawing_Size = New-Object System.Drawing.Size 
141.
$System_Drawing_Size.Height = 23 
142.
$System_Drawing_Size.Width = 31 
143.
$btnChoose.Size = $System_Drawing_Size 
144.
$btnChoose.TabIndex = 5 
145.
$btnChoose.Text = "..." 
146.
$btnChoose.UseVisualStyleBackColor = $True 
147.
$btnChoose.add_Click($btnChoose_OnClick) 
148.
 
149.
$form1.Controls.Add($btnChoose) 
150.
 
151.
$label1.Anchor = 6 
152.
$label1.DataBindings.DefaultDataSourceUpdateMode = 0 
153.
 
154.
$System_Drawing_Point = New-Object System.Drawing.Point 
155.
$System_Drawing_Point.X = 12 
156.
$System_Drawing_Point.Y = 258 
157.
$label1.Location = $System_Drawing_Point 
158.
$label1.Name = "label1" 
159.
$System_Drawing_Size = New-Object System.Drawing.Size 
160.
$System_Drawing_Size.Height = 23 
161.
$System_Drawing_Size.Width = 62 
162.
$label1.Size = $System_Drawing_Size 
163.
$label1.TabIndex = 4 
164.
$label1.Text = "CSV-Datei:" 
165.
 
166.
$form1.Controls.Add($label1) 
167.
 
168.
$txtCSV.Anchor = 14 
169.
$txtCSV.DataBindings.DefaultDataSourceUpdateMode = 0 
170.
$txtCSV.Enabled = $False 
171.
$System_Drawing_Point = New-Object System.Drawing.Point 
172.
$System_Drawing_Point.X = 80 
173.
$System_Drawing_Point.Y = 255 
174.
$txtCSV.Location = $System_Drawing_Point 
175.
$txtCSV.Name = "txtCSV" 
176.
$System_Drawing_Size = New-Object System.Drawing.Size 
177.
$System_Drawing_Size.Height = 20 
178.
$System_Drawing_Size.Width = 210 
179.
$txtCSV.Size = $System_Drawing_Size 
180.
$txtCSV.TabIndex = 3 
181.
$txtCSV.add_TextChanged($txtCSV_TextChanged) 
182.
 
183.
$form1.Controls.Add($txtCSV) 
184.
 
185.
$lv1.Anchor = 15 
186.
 
187.
$lv1.DataBindings.DefaultDataSourceUpdateMode = 0 
188.
$System_Drawing_Point = New-Object System.Drawing.Point 
189.
$System_Drawing_Point.X = 12 
190.
$System_Drawing_Point.Y = 12 
191.
$lv1.Location = $System_Drawing_Point 
192.
$lv1.Name = "lv1" 
193.
$System_Drawing_Size = New-Object System.Drawing.Size 
194.
$System_Drawing_Size.Height = 235 
195.
$System_Drawing_Size.Width = 417 
196.
$lv1.Size = $System_Drawing_Size 
197.
$lv1.TabIndex = 2 
198.
$lv1.UseCompatibleStateImageBehavior = $False 
199.
$lv1.View = 1 
200.
 
201.
$form1.Controls.Add($lv1) 
202.
 
203.
$btnLoadData.Anchor = 10 
204.
 
205.
$btnLoadData.DataBindings.DefaultDataSourceUpdateMode = 0 
206.
$btnLoadData.Enabled = $False 
207.
 
208.
$System_Drawing_Point = New-Object System.Drawing.Point 
209.
$System_Drawing_Point.X = 335 
210.
$System_Drawing_Point.Y = 253 
211.
$btnLoadData.Location = $System_Drawing_Point 
212.
$btnLoadData.Name = "btnLoadData" 
213.
$System_Drawing_Size = New-Object System.Drawing.Size 
214.
$System_Drawing_Size.Height = 23 
215.
$System_Drawing_Size.Width = 94 
216.
$btnLoadData.Size = $System_Drawing_Size 
217.
$btnLoadData.TabIndex = 1 
218.
$btnLoadData.Text = "Lade Daten" 
219.
$btnLoadData.UseVisualStyleBackColor = $True 
220.
$btnLoadData.add_Click($handler_btnLoadData_Click) 
221.
 
222.
$form1.Controls.Add($btnLoadData) 
223.
 
224.
$openFileDialog1.FileName = "fd1" 
225.
$openFileDialog1.ShowHelp = $True 
226.
 
227.
#endregion Generated Form Code 
228.
 
229.
#Save the initial state of the form 
230.
$InitialFormWindowState = $form1.WindowState 
231.
#Init the OnLoad event to correct the initial state of the form 
232.
$form1.add_Load($OnLoadForm_StateCorrection) 
233.
#Show the Form 
234.
$form1.ShowDialog()| Out-Null 
235.
 
236.
} #End Function 
237.
 
238.
#Call the Function 
239.
GenerateForm
Grüße Uwe
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 15:50 Uhr
vielen dank erst mal.
beim ersten versuch deinen Code zu übernehmen sah alles wie zuvor mit dem DataGrid aus. Habe dann aber festgestellt das für das Spliten ein "," eingesetzt war aber beim in meiner CSV ein ";" als Trennzeichen verwendet wird. Nach kurzer anpassung kann ich nun sagen: ja für meinen Zweck reicht dies absolut.
Vielen Dank noch mal.

PS: die msdn-hilfe hatte ich mir auch schon angeschaut. ist hier die vb-version zutreffend?
Bitte warten ..
Mitglied: colinardo
10.06.2013 um 15:57 Uhr
ist hier die vb-version zutreffend?
.NET-Objekte sind generisch d.h. wenn du wissen willst welche Funktionen und Eigenschaften ein Objekt hat siehe in der Klassenbibliothek des .NET-Frameworks nach. Die Codekonventionen der Powershell musst du dabei natürlich einhalten, einfaches Kopieren und Einfügen wird hier nicht klappen...
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 16:34 Uhr
Danke.
Nur kopieren ist auch nicht mein Ziel. Verstehen ist mir lieber.
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 18:05 Uhr
bin gleich auf noch ein Problemchen gestossen.
im listview kann ich ja den ersten eintrag einer Zeile makieren. kann ich diesen auch auslesen um zB. einen dazugehörigen Wert in der entsprechenden CSV Datei zu ändern oder zu löschen.
wenn ja:
1. wie kann ich den Rückgabewert händeln(vermute mal irgend etwas mit $lv1.columns)
2. wie kann ich den Eintrag der csv ändern (muss ich eine Schleife durlaufen lassen oder geht das auch einfacher)
3. wie kann ich eine komplette Zeile einer csv löschen ohne eine leere Zeile zu erhalten
Bitte warten ..
Mitglied: colinardo
10.06.2013, aktualisiert um 23:21 Uhr
Die Seite sollte deine Fragen beantworten: http://msdn.microsoft.com/de-de/library/system.windows.forms.listview.a ...
Den Index des aktuell markierten Elemente findest du mit .SelectedIndices oder mit .SelectedItems die jeweilig markierten Einträge.
Ich würde alle Bearbeitungen im ListView-Element vornehmen und
dann zum Schluss alle Elemente des ListView-Elements per Schleife durchlaufen und die vorhandene CSV ersetzen. Die Spaltennamen nicht vergessen...
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 19:04 Uhr
Tschuldigung.
Wahr doch ein wenig zu träge. Gelobe hiermit Besserung. Ist halt ein wenig verlockend nach einfacher hilfe zu suchen. Aber du hast recht besser erst lesen und dann vieleicht Fraegn. da lernt man mehr.
habe mir mal die Methoden Eigenschaften und Ereignisse angeschaut. SelectedIndex hab ich da aber nicht geunden aber SelectedIndices. Ich gehe davon aus das es sich hier nur um eine andere Schreibweise handelt. Teste das gelich mal.
Bitte warten ..
Mitglied: Gundelputz
10.06.2013 um 19:44 Uhr
Sorry. ich bins schon wieder. Ick steh jetz ers mal richtig uff'n Schlauch.
Also wen ich den index erfahren will rufe ich den so ab:
$lv_user.SelectedIndex
und weil ich auch sehen will welcher das ist übergebe ich diesen an ein Label:
$lbl_user_liste.text = $lv_user.SelectedIndex
und was ich sehe ist nichts.

Frust und Verzweiflung machen sich breit.
Bitte warten ..
Mitglied: colinardo
11.06.2013, aktualisiert um 08:36 Uhr
den Text der Spalten des markierten Elements erhältst du so:
01.
$spalte1 = $lv_user.SelectedItems[0].Text 
02.
$spalte2 =  $lv_user.SelectedItems[0].Subitems[1].Text 
03.
$spalte3 =  $lv_user.SelectedItems[0].Subitems[2].Text
usw.
da eine Markierung in einer ListView mehrere Einträge umfassen kann wenn die MultiSelect Eigenschaft des Steuerelements auf True steht, befinden sich diese im Array .SelectedItems[x], d.h. erste markierte Zeile .SelectedItems[0], zweite .SelectedItems[1], usw.
Mit den ListIndices verhällt es sich genauso. D.h. die Indexnummern der markierten Einträge werden als Array zurückgegeben. Bei nur einer einfachen Markierung erhältst du den Index mit .ListIndices[0].

Wenn du Einträge bearbeiten willst ist das DataGridView Element aber besser geeignet, ich dachte du wolltest die CSV nur anzeigen.

Ich glaube es wäre vielleicht besser, wenn du dich mal mit einer richtigen Programmiersprache wie VB.Net oder C# in einer Entwicklungsumgebung wie einer VisualStudio Express Edition auseinandersetzt, Powershell ist ja eigentlich nur eine Scriptsprache. Dort hast du auch visuelles Feedback der Steuerelemente mit Code-Completion etc. Das was du dort entwickelst lässt sich dann mit ein wenig Anpassung in die Powershell übertragen... das nur so als Tipp nebenbei
Bitte warten ..
Mitglied: Gundelputz
11.06.2013 um 08:06 Uhr
Hab den Fehler gefunden. So funktioniert's:

$test_select = $lv_user.SelectedIndices
$lbl_user_liste.text = "$test_select"

War wie die Geschichte mit den Bäumen und dem Wald.
Bitte warten ..
Mitglied: colinardo
11.06.2013, aktualisiert um 14:33 Uhr
Um das ganze zu einem Abschluss zu bringen:
Das ganze mit einem DataGridView Element und vollständiger Bearbeitungsfunktionalität und automatischer Trennzeichenerkennung:

1d29adabbf434e73fc73a27bdc2f5403 - Klicke auf das Bild, um es zu vergrößern

Viel Erfolg weiterhin...
Uwe
01.
#Helper Functions 
02.
#Hilfsfunktion zum Regex-Gruppen-Matching 
03.
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}} 
04.
 
05.
#Generated Form Function 
06.
function GenerateForm { 
07.
 
08.
#region Import the Assemblies 
09.
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 
10.
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null 
11.
#endregion 
12.
 
13.
#region Generated Form Objects 
14.
$form1 = New-Object System.Windows.Forms.Form 
15.
$btnSave = New-Object System.Windows.Forms.Button 
16.
$dg1 = New-Object System.Windows.Forms.DataGridView 
17.
$txtDelim = New-Object System.Windows.Forms.TextBox 
18.
$label2 = New-Object System.Windows.Forms.Label 
19.
$btnChoose = New-Object System.Windows.Forms.Button 
20.
$label1 = New-Object System.Windows.Forms.Label 
21.
$txtCSV = New-Object System.Windows.Forms.TextBox 
22.
$btnLoadData = New-Object System.Windows.Forms.Button 
23.
$openFileDialog1 = New-Object System.Windows.Forms.OpenFileDialog 
24.
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState 
25.
#endregion Generated Form Objects 
26.
 
27.
#---------------------------------------------- 
28.
#Generated Event Script Blocks 
29.
#---------------------------------------------- 
30.
$handler_btnLoadData_Click=  
31.
32.
    #prüfen ob gewählte Datei existiert 
33.
    if (Test-Path $txtCSV.text){ 
34.
        $csvSplitChar = $txtDelim.text 
35.
        $dg1.Rows.Clear() 
36.
         
37.
        #Lese CSV-Datei in ein StreamReader-Objekt ein / $true = erkenne Zeichenkodierung 
38.
        $csv = New-Object System.IO.StreamReader($txtCSV.text,$True) 
39.
         
40.
        #Lese die Überschriften der CSV-Datei in ein Array ein 
41.
        $firstLine = ($csv.Readline()).split($csvSplitChar) 
42.
         
43.
        #Füge die Überschriften im DataGridView-Element hinzu 
44.
        for ($i = 0; $i -lt $firstLine.length; $i++){ 
45.
            #entferne Dabei eventuell vorhandene Anführungszeichen 
46.
            $dg1.Columns.Add($firstLine[$i].Trim('"'),$firstLine[$i].Trim('"')) 
47.
48.
        #Durchlaufe die Datenzeilen der CSV-Datei bis zum Ende 
49.
        while($csv.Peek() -ne -1){ 
50.
            $dataline = $csv.ReadLine() 
51.
            #Splite die Zeile wieder in ein Array 
52.
            $dataline = $dataline.split($csvSplitChar) | %{$_.Trim('"')} 
53.
            # und übergebe das Array an die Funktion zum erstellen einer Zeile des DataGridView-Elementes 
54.
            $dg1.Rows.Add($dataline) 
55.
56.
        #schließe das StreamReader-Objekt 
57.
        $csv.Close() 
58.
 
59.
    }else{ 
60.
        [Windows.Forms.MessageBox]::Show("Datei existiert nicht") 
61.
62.
63.
 
64.
$btnChoose_OnClick=  
65.
66.
    #setze Filter für den FileDialog 
67.
    $openFileDialog1.Filter = "CSV-Dateien(*.csv)|*.csv" 
68.
    #es darf im Dialog nur eine Datei gewählt werden 
69.
    $openFileDialog1.MultiSelect = $False 
70.
    # wenn der Dialog mit "OK" geschlossen wurde den Pfad der Datei in die Textbox übergeben 
71.
    if ($openFileDialog1.ShowDialog() -eq 1){ 
72.
        $txtCSV.text = $openFileDialog1.FileName 
73.
74.
    #Erkenne Trennzeichen der CSV-Datei 
75.
    #hole nur die erste Zeile der Datei 
76.
    $csvString = (Get-Content $txtCSV.text)[0] 
77.
    #finde per RegEx das Trennzeichen 
78.
    $delim = $csvString | Get-Matches "^[^;,]*(.)" 1 
79.
    $txtDelim.text = $delim 
80.
81.
 
82.
# Schaltet die Buttons je nach Inhalt des Textfeldes an oder aus / wenn kein Pfad vorhanden soll man die Buttons auch nicht betätigen können 
83.
$handler_txtCSV_TextChanged =  
84.
85.
    if ($txtCSV.text -le ""){ 
86.
        $btnLoadData.Enabled = $False 
87.
        $btnSave.Enabled = $False 
88.
    }else{ 
89.
        $btnLoadData.Enabled = $True 
90.
91.
92.
$handler_dg1_CellValueChanged =  
93.
94.
    #aktiviert den "Speichern"-Button erst wenn etwas in der Tabelle geändert wurde 
95.
    $btnSave.Enabled = $True 
96.
97.
 
98.
$btnSave_OnClick=  
99.
100.
    #StreamWrite-Objekt für das schreiben der Ausgabedatei / "$false" bedeutet dabei Datei neu erstellen und nicht anhängen 
101.
    $objWriter = New-Object System.IO.StreamWriter($txtCSV.text, $False) 
102.
    #Erstelle die Spaltennamen für die erste Zeile der CSV 
103.
    $headerline = "" 
104.
    #Hole die Spaltennamen aus dem DataGridView-Element 
105.
    for ($i = 0; $i -lt $dg1.Columns.Count; $i++){ 
106.
         
107.
        if ($i -eq $dg1.Columns.Count -1){ 
108.
            #Spaltenname ohne Trennzeichen anhängen wenn wir bei der letzten Spalte angekommen sind 
109.
            $headerline += '"' + $dg1.Columns[$i].Name + '"' 
110.
        }else{ 
111.
            #ansonsten mit Trennzeichen 
112.
            $headerline += '"' + $dg1.Columns[$i].Name + '"' + $txtDelim.text 
113.
114.
115.
    #Schreibe die Überschriften in die Datei 
116.
    $objWriter.WriteLine($headerline) 
117.
     
118.
    #Schreibe die Datenzeilen des DataGridView in die Datei 
119.
    For ($j = 0;$j -lt $dg1.Rows.Count -1 ; $j++){ 
120.
        For ($i = 0;$i -lt $dg1.Columns.Count ; $i++){ 
121.
             $cellvalue = $dg1.Item($i, $j).Value 
122.
             if ($i -eq $dg1.Columns.Count - 1){ 
123.
                $rowLine += '"' + $cellvalue + '"' 
124.
             }else{ 
125.
                $rowLine += '"' + $cellvalue + '"' + $txtDelim.text 
126.
127.
128.
        #Die Zeile in die Datei schreiben 
129.
        $objWriter.WriteLine($rowLine) 
130.
        #Variable leeren für die nächste Zeile 
131.
        $rowLine = "" 
132.
133.
    #Streamwriter schließen 
134.
    $objWriter.Close() 
135.
    [Windows.Forms.MessageBox]::Show("Datei gespeichert!") 
136.
137.
 
138.
$OnLoadForm_StateCorrection= 
139.
{#Correct the initial state of the form to prevent the .Net maximized form issue 
140.
	$form1.WindowState = $InitialFormWindowState 
141.
142.
 
143.
#---------------------------------------------- 
144.
#region Generated Form Code 
145.
$System_Drawing_Size = New-Object System.Drawing.Size 
146.
$System_Drawing_Size.Height = 292 
147.
$System_Drawing_Size.Width = 467 
148.
$form1.ClientSize = $System_Drawing_Size 
149.
$form1.DataBindings.DefaultDataSourceUpdateMode = 0 
150.
$System_Drawing_Size = New-Object System.Drawing.Size 
151.
$System_Drawing_Size.Height = 320 
152.
$System_Drawing_Size.Width = 320 
153.
$form1.MinimumSize = $System_Drawing_Size 
154.
$form1.Name = "form1" 
155.
$form1.Text = "CSV Bearbeiten" 
156.
 
157.
 
158.
$btnSave.DataBindings.DefaultDataSourceUpdateMode = 0 
159.
$btnSave.Anchor = 10 
160.
$System_Drawing_Point = New-Object System.Drawing.Point 
161.
$System_Drawing_Point.X = 361 
162.
$System_Drawing_Point.Y = 266 
163.
$btnSave.Location = $System_Drawing_Point 
164.
$btnSave.Name = "btnSave" 
165.
$System_Drawing_Size = New-Object System.Drawing.Size 
166.
$System_Drawing_Size.Height = 23 
167.
$System_Drawing_Size.Width = 94 
168.
$btnSave.Size = $System_Drawing_Size 
169.
$btnSave.TabIndex = 9 
170.
$btnSave.Text = "Daten speichern" 
171.
$btnSave.UseVisualStyleBackColor = $True 
172.
$btnSave.add_Click($btnSave_OnClick) 
173.
$btnSave.Enabled = $False 
174.
 
175.
$form1.Controls.Add($btnSave) 
176.
 
177.
$dg1.Anchor = 15 
178.
$dg1.AllowUserToOrderColumns = $True 
179.
$dg1.MultiSelect = $True 
180.
$dg1.DataBindings.DefaultDataSourceUpdateMode = 0 
181.
$System_Drawing_Point = New-Object System.Drawing.Point 
182.
$System_Drawing_Point.X = 12 
183.
$System_Drawing_Point.Y = 12 
184.
$dg1.Location = $System_Drawing_Point 
185.
$dg1.Name = "dg1" 
186.
$System_Drawing_Size = New-Object System.Drawing.Size 
187.
$System_Drawing_Size.Height = 219 
188.
$System_Drawing_Size.Width = 443 
189.
$dg1.Size = $System_Drawing_Size 
190.
$dg1.TabIndex = 8 
191.
$dg1.add_CellValueChanged($handler_dg1_CellValueChanged) 
192.
 
193.
$form1.Controls.Add($dg1) 
194.
 
195.
$txtDelim.Anchor = 6 
196.
$txtDelim.DataBindings.DefaultDataSourceUpdateMode = 0 
197.
$System_Drawing_Point = New-Object System.Drawing.Point 
198.
$System_Drawing_Point.X = 80 
199.
$System_Drawing_Point.Y = 262 
200.
$txtDelim.Location = $System_Drawing_Point 
201.
$txtDelim.MaxLength = 1 
202.
$txtDelim.Name = "txtDelim" 
203.
$System_Drawing_Size = New-Object System.Drawing.Size 
204.
$System_Drawing_Size.Height = 20 
205.
$System_Drawing_Size.Width = 27 
206.
$txtDelim.Size = $System_Drawing_Size 
207.
$txtDelim.TabIndex = 7 
208.
$txtDelim.Text = "," 
209.
 
210.
$form1.Controls.Add($txtDelim) 
211.
 
212.
$label2.Anchor = 6 
213.
$label2.DataBindings.DefaultDataSourceUpdateMode = 0 
214.
 
215.
$System_Drawing_Point = New-Object System.Drawing.Point 
216.
$System_Drawing_Point.X = 12 
217.
$System_Drawing_Point.Y = 265 
218.
$label2.Location = $System_Drawing_Point 
219.
$label2.Name = "label2" 
220.
$System_Drawing_Size = New-Object System.Drawing.Size 
221.
$System_Drawing_Size.Height = 23 
222.
$System_Drawing_Size.Width = 78 
223.
$label2.Size = $System_Drawing_Size 
224.
$label2.TabIndex = 6 
225.
$label2.Text = "Trennz." 
226.
 
227.
$form1.Controls.Add($label2) 
228.
 
229.
$btnChoose.Anchor = 10 
230.
 
231.
$btnChoose.DataBindings.DefaultDataSourceUpdateMode = 0 
232.
 
233.
$System_Drawing_Point = New-Object System.Drawing.Point 
234.
$System_Drawing_Point.X = 324 
235.
$System_Drawing_Point.Y = 237 
236.
$btnChoose.Location = $System_Drawing_Point 
237.
$btnChoose.Name = "btnChoose" 
238.
$System_Drawing_Size = New-Object System.Drawing.Size 
239.
$System_Drawing_Size.Height = 23 
240.
$System_Drawing_Size.Width = 31 
241.
$btnChoose.Size = $System_Drawing_Size 
242.
$btnChoose.TabIndex = 5 
243.
$btnChoose.Text = "..." 
244.
$btnChoose.UseVisualStyleBackColor = $True 
245.
$btnChoose.add_Click($btnChoose_OnClick) 
246.
 
247.
$form1.Controls.Add($btnChoose) 
248.
 
249.
$label1.Anchor = 6 
250.
$label1.DataBindings.DefaultDataSourceUpdateMode = 0 
251.
 
252.
$System_Drawing_Point = New-Object System.Drawing.Point 
253.
$System_Drawing_Point.X = 12 
254.
$System_Drawing_Point.Y = 242 
255.
$label1.Location = $System_Drawing_Point 
256.
$label1.Name = "label1" 
257.
$System_Drawing_Size = New-Object System.Drawing.Size 
258.
$System_Drawing_Size.Height = 23 
259.
$System_Drawing_Size.Width = 62 
260.
$label1.Size = $System_Drawing_Size 
261.
$label1.TabIndex = 4 
262.
$label1.Text = "CSV-Datei:" 
263.
 
264.
$form1.Controls.Add($label1) 
265.
 
266.
$txtCSV.Anchor = 14 
267.
$txtCSV.DataBindings.DefaultDataSourceUpdateMode = 0 
268.
$txtCSV.Enabled = $False 
269.
$System_Drawing_Point = New-Object System.Drawing.Point 
270.
$System_Drawing_Point.X = 80 
271.
$System_Drawing_Point.Y = 239 
272.
$txtCSV.Location = $System_Drawing_Point 
273.
$txtCSV.Name = "txtCSV" 
274.
$System_Drawing_Size = New-Object System.Drawing.Size 
275.
$System_Drawing_Size.Height = 20 
276.
$System_Drawing_Size.Width = 236 
277.
$txtCSV.Size = $System_Drawing_Size 
278.
$txtCSV.TabIndex = 3 
279.
$txtCSV.add_TextChanged($handler_txtCSV_TextChanged) 
280.
 
281.
$form1.Controls.Add($txtCSV) 
282.
 
283.
$btnLoadData.Anchor = 10 
284.
 
285.
$btnLoadData.DataBindings.DefaultDataSourceUpdateMode = 0 
286.
$btnLoadData.Enabled = $False 
287.
 
288.
$System_Drawing_Point = New-Object System.Drawing.Point 
289.
$System_Drawing_Point.X = 361 
290.
$System_Drawing_Point.Y = 237 
291.
$btnLoadData.Location = $System_Drawing_Point 
292.
$btnLoadData.Name = "btnLoadData" 
293.
$System_Drawing_Size = New-Object System.Drawing.Size 
294.
$System_Drawing_Size.Height = 23 
295.
$System_Drawing_Size.Width = 94 
296.
$btnLoadData.Size = $System_Drawing_Size 
297.
$btnLoadData.TabIndex = 1 
298.
$btnLoadData.Text = "Lade Daten" 
299.
$btnLoadData.UseVisualStyleBackColor = $True 
300.
$btnLoadData.add_Click($handler_btnLoadData_Click) 
301.
 
302.
$form1.Controls.Add($btnLoadData) 
303.
 
304.
$openFileDialog1.FileName = "fd1" 
305.
$openFileDialog1.ShowHelp = $True 
306.
 
307.
#endregion Generated Form Code 
308.
 
309.
#Save the initial state of the form 
310.
$InitialFormWindowState = $form1.WindowState 
311.
#Init the OnLoad event to correct the initial state of the form 
312.
$form1.add_Load($OnLoadForm_StateCorrection) 
313.
#Show the Form 
314.
$form1.ShowDialog()| Out-Null 
315.
 
316.
} #End Function 
317.
 
318.
#Call the Function 
319.
GenerateForm 
320.
 
Bitte warten ..
Mitglied: Gundelputz
11.06.2013 um 10:26 Uhr
vielen Dank (wieder ein mal)

So langsam beginne ich den Umfang von PS zu verstehen. Ich habe schon immer ein wenig "programmiert" und habe bis jetzt noch nicht die richtige Sprache für mich gefunden. wie bei den meisten meines jahrgangs hab ich mit QBasic angefangen. Dann etwas PowerBasic, Darkbasic, Dephi und schliesslich VBA.
bis vor 2 Wo. habe ich haupsächlich mit Excel und VBA(für die Arbeit) und privat mit 3DGS(LiteC) gearbeitet. Leider habe ich bis jetzt noch nicht die eierlegende Wollmilchsau gefunden. Bei uns im Haus giebt es knapp 20 Admin's und jeder schwört auf was anderes.
Ich hoffe das PS ein guter wiedereinstig für mich ist. Bis jetzt bin ich jedenfalls begeister auch wenn ich schon ein paar Schwachstellen für mich erkannt habe so ist klar das PS dir deine tägliche Arbeit extrem erleichtern kann. Mein Primärziel habe ich bereits erreicht.

an dieser Stelle möchte ich grosses Lob an dieses Forum ausstellen. Hier habe ich bis jetzt nur Fachlich kompetente Hilfe erhalten ohne blöde Sprüche für jemanden der noch ganz am Anfang steht.
macht weiter so.
Bitte warten ..
Mitglied: Gundelputz
11.06.2013 um 11:05 Uhr
Bowwww echt starker Toback(für mich) was du da so schnell gezaubert hast. Das ist für mich wie ein Tuturial. sehr interessant.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...