Benutzer mit den meisten Antworten
Welche Steuerelemente sollte ich nutzen um Daten aus einer Textdatei zu bearbeiten?

Frage
-
Hallo,
So sieht der Inhalt der Textdatei aus:
--Gruppe 1
blStift=24 --blaue Stifte:999
...
grStift=13 --grüne Stifte:999
pck=3 --Paket:5
--Gruppe 2
grPilz=-1 --großer Pilz:bol
...So solls werden:
- die Kategorie --Gruppe 1 soll als Überschrift dienen und eventuell aus- und einklappbar sein
- angezeigt werden soll blaue Stifte in Spalte1 und 24 in Spalte2, ähnlich wie das Eigenschaftsfenster vom Studio
- geändert werden darf nur die 2. Spalte aber in einem bestimmten Format z.B. DropDown mit True und False
- die Anzeige ist nach unten dynamisch, d.h. Scrollbalken bis zur letzten Zeile aus der Textdatei, da Datensätze hinzukommen könntenDas Gleichheitszeichen, die zwei Bindestriche und der Doppelpunkt sind als Separator gedacht um mit String.Split die Daten in ein Array zu schreiben. Wobei 999 die freie Zahlenangabe, bol natürlich boolean und 5 ein Dropfeld von 1 bis 5 bedeuten, es wird aber noch mehr geben.
Also, welche Elemente sollte oder könnte ich nutzen?
Bisher habe ich in der Form nur ein TabControl Container, da ich pro Tab eine andere Textdatei laden bzw. speichern möchte. Wie man sieht bin ich ziemlich unbedarft und brauche hier ein paar Tips.
Vielen Dank für Hilfe
Antworten
-
Ich würde ein DataGrid nehmen. Für die Pufferung der Daten würde ich eine Klasse schreiben, die dann dem DataGrid für die Bindung eine Liste bereitstellt. Über die Gruppenbezeichnung würde ich gruppieren. Das Ganze in WPF ist relativ einfach. Etwas aufwendiger wird lediglich der reguläre Ausdruck zum Splitten der Zeilen.--
Viele Gruesse
Peter- Als Antwort markiert Quonox Dienstag, 24. Juli 2012 07:18
-
Eine erste Antwort zu geben ist immer noch kompliziert, insbesondere, da der Lernaufwand für .NET nicht zu unterschätzen ist. Das Bild kann ich leider nicht sehen.Mit meinen schon mehrjährigen .NET-Kenntnissen würde ich eine WPF-Anwendung schreiben, die den Programmzustand in den Einstellungen ablegt und eine XML-Datei für die Parametrierung (Zuordnung blStift – blaue Stifte – Typ 999) nutzt. Mit dem Start des Programmes oder auch der Aktivierung eines Reiters wird dann die entsprechende LUA-Datei gelesen und deren Inhalt in eine Liste interner Objekte (eigener Typ = Klasse) überführt. Diese Liste wird an ein Grid gebunden und in Abhängigkeit von den Angaben in der Parametrierung werden pro Zeile die betreffenden Steuerelemente in die betreffenden Grid-Zellen geschrieben. Zum Schluss gibt es einen Save-Button, mit dem dann die interne Liste wieder in einen Text-Stream umgewandelt und als Datei abgelegt wird.Ich vermute aber, dass dieser Realisierungsweg zu kompliziert für Deinen Kenntnisstand ist. Deshalb solltest Du erst einmal wie in VBA gewohnt linear programmieren, ein Grid füllen, dem Bediener die Möglichkeit geben, im Grid die Werte zu verändern, und zum Schluss alles wieder ausgeben. Dieser Weg bedeutet zwar einen großen Programmieraufwand, man kann aber den Einarbeitungsaufwand in des Framework überschaubar halten.--
Viele Gruesse
Peter- Als Antwort markiert Quonox Dienstag, 24. Juli 2012 13:58
-
Hi
Wie man es im Bild sieht
wie Peter schon schrieb: Da ist kein Bild zu sehen.
ab dem + Zeichen, soll es aussehen und funktionieren. Also linke Spalte Bezeichnungen und in der rechten kann man Werte einstellen. Dabei können die Werte Boolean, Strings und Zahlen sein und manchmal als Dropliste zur Auswahl stehen.
Falls die Variablen feststehen bzw. Du eine entsprechende Vorgehensweise festlegen kannst, würde ich das mit einer kleinen Hilfsklasse lösen, die Du serialisieren/deserialisieren kannst. Ein Beispiel für Serialisierung/Deserialisierung mit VB.NET findest Du hier.
In deinem Fall wäre das bspw. eine Klasse mit 4 Eigenschaften: Name, Beschreibung, Typ und Wert. Name wäre dann bspw. "klBaum", Beschreibung "kleiner Baum", Typ dann der erwartete Datentyp, bspw. String (hier würde ich entweder die Standardnamen der .NET Datentypen nehmen oder, falls das nicht gewünscht ist, einen Enum erstellen, mit dem Du dann arbeiten kannst), Wert beinhaltet dann halt den Wert :)
Diese Klasse kannst Du in eine List( Of <DeineKlasse> ) packen und hast damit dann die Auflistung der möglichen Variablen inkl. den Werten. Diese Liste kannst Du dann aus einer XML Datei erzeugen (Deserialisierung) und als Datenquelle für ein DataGrid verwenden. Nach Fertigstellung nimmst Du die Liste und serialisierst sie wieder in eine XML Datei. Die Erzeugung der .lua Datei(en) würde ich als separaten Schritt sehen, das kannst Du dann problemlos mit der List( Of ... ) machen, indem Du die einzelnen Sachen ausliest und daraus dann mit den entsprechenden Vorgaben die Skriptdatei erzeugst.
zu wissen, welche Datei zu bevorzugen ist, xml, vielleicht mdb oder was mir gänzlich unbekanntes. Es muss nur auf einen 10 Jahre alten XP Rechner laufen, der XP nur UpToDate hat aber keine zusätzliche Software, .NET Framework Client ist vorhanden.
Dann wäre obiges sicher passend.
Nun fragt sich der eine oder andere, warum gibt der Typ nicht jemanden 20€ und fertig.
Nö, das frag ich mich nicht. Hat aber den einfachen Grund, dass Du niemanden finden wirst, der das für 20 Euro macht. Häng mal noch ein paar Nullen dran^^
Naja, mir tun selbst 20€ weh und ich will wenigstens ein bisschen meinen Horizont erweitern, zum Anderen kann es ja sein, dass ich doch mal was ändern muss, und da mag ich nicht schon wieder jemanden engagieren.
Ist doch prima. Nur so kann man weiterkommen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Quonox Dienstag, 24. Juli 2012 13:58
Alle Antworten
-
Ich würde ein DataGrid nehmen. Für die Pufferung der Daten würde ich eine Klasse schreiben, die dann dem DataGrid für die Bindung eine Liste bereitstellt. Über die Gruppenbezeichnung würde ich gruppieren. Das Ganze in WPF ist relativ einfach. Etwas aufwendiger wird lediglich der reguläre Ausdruck zum Splitten der Zeilen.--
Viele Gruesse
Peter- Als Antwort markiert Quonox Dienstag, 24. Juli 2012 07:18
-
Vielen Dank für die Antwort.
Naja, ich könnte auch eine x-beliebige Datei erstellen, die als "Übersetzer" dient.
Also, in der Textdatei bleiben nur die Variablen und Werte z.B. grStift=13 das wird von einem anderen Programm gebraucht. In der anderen Datei steht dann die Information, was die Variable für eine Bezeichnung hat, was der Wert zu dieser Variable für ein Format hat und wie alles gruppiert werden soll. Da brauche ich auch nicht mehr den -- doppelten Bindestrich, weil der ja in der Textdatei eigentlich als Kommentar dient und vom anderen Programm ignoriert wird.
Wäre das einfacher?
Grüße Quo
-
Danke für die Antwort, sorry das ich so ungenau war.
Ich weiß aber nicht ob ich das gut beschreiben kann, ich bin kein Programmierer und kenne mich nur oberflächlich mit Scriptsprachen aus.
Wie man es im Bild sieht, ab dem + Zeichen, soll es aussehen und funktionieren. Also linke Spalte Bezeichnungen und in der rechten kann man Werte einstellen. Dabei können die Werte Boolean, Strings und Zahlen sein und manchmal als Dropliste zur Auswahl stehen. Tabellenköpfe werden nicht benötigt, aber wie auch im Bild(+) soll es Kategorien geben
Das gesamte Gebilde soll ein eigenständiges Programm werden, 8 verschiedene Tabulatoren sollen 8 LUA Dateien anzeigen und nach verlassen des Tabs speichern. LUA ist eine Scriptsprache und die Dateiendung muss .lua sein aber es ist wie eine .txt Datei behandelbar und deshalb spreche ich immer von Textdatei. Das Programm ist als Konfigurationsprogramm gedacht um Einstellungen schnell, richtig und einfach vorzunehmen. Das Programm und die LUA Dateien befinden sich immer zusammen in einem Ordner, der aber ohne Installation verschoben werden kann und soll ohne die Funktionalität zu stören.
Also ich starte das Programm, klicke auf einen Tab und die Daten aus der Textdatei werden angezeigt, ändere ich was und gehe auf X zum schließen oder klicke auf einen neuen Tab, wird dabei der alte Tab automatisch gespeichert in die Textdatei gespeichert. Die Liste soll alle Datensätze aus der Textdatei dynamisch anzeigen, wird die Textdatei verändert z.B. mit einem neuen Eintrag, dann soll dieser natürlich beim nächsten Start angezeigt werden.
Eine Zeile der Textdatei sieht so aus. blStift=24Nun kommt ein Problem. Die linke Spalte in dem Programm würde blStift enthalten, weil das ja die LUA Variable ist. Man soll aber verstehen, was gemeint ist, deshalb soll dort blaue Stifte stehen. Damit das Programm weiß, welche Formatierung dem Wert der Variable zugewiesen werden soll, muss hier auch noch eine Information her. Die Info kann ich aber nicht fest in das Programm schreiben, da sich die Einträge der Textdatei ändern können. Wenn ich z.B. klBaum=0 als neuen Eintrag in der Textdatei habe, dann weiß das Programm nicht, dass klBaum für kleiner Baum steht und dass die 0 keine Zahl sondern False bedeutet.
Ich gebe dem Programm die Formateigenschaften vor. Also, ich definiere, dass 999 für ein Feld in der rechten Spalte steht, bei dem man nur Zahlen eingeben kann. Bei bol würde das Feld eine Auswahlliste sein, die Ja und Nein beinhaltet, und eine Zahl unter 100 heißt, dass ein DropDownfeld von 1 bis zur angegebenen Zahl angezeigt werden soll.Nun dachte ich mir ich könnte die Info in die Textdatei unterbringen. blStift=24 --blaue Stifte:999 Da -- in LUA der Code für Kommentare ist könnte ich, in VB, die Info per split aus dem String holen.
Wenn das aber mit den unterschiedlichen Trennzeichen zu umständlich ist, kann ich doch eine "Konfigurationsdatei" dafür anlegen. In der steht dann, dass blStift eigentlich blaue Stifte sind und das Feld ein Zahlenfeld sein soll. Die aufklappbaren Kategorien könnte man hier auch unterbringen, vielleicht auch, dass die Größe des Programms beim beenden festgehalten wird. Hier wäre interessant zu wissen, welche Datei zu bevorzugen ist, xml, vielleicht mdb oder was mir gänzlich unbekanntes. Es muss nur auf einen 10 Jahre alten XP Rechner laufen, der XP nur UpToDate hat aber keine zusätzliche Software, .NET Framework Client ist vorhanden.Zu mir:
Ich habe VB dafür ausgesucht, weil ich schon etwas Erfahrung mit VBA für Excel habe. Eigentlich habe ich nicht vor VB komplett zu lernen, da ich es nicht wirklich brauche. Ich möchte das eine Projekt durchziehen, dabei will ich mich nur auf Objekte konzentrieren, die ich tatsächlich brauche. Klar hier und da muss ich wohl etwas übergreifendes anschauen aber am Ende will ich es nicht übertreiben.
Nun fragt sich der eine oder andere, warum gibt der Typ nicht jemanden 20€ und fertig. Naja, mir tun selbst 20€ weh und ich will wenigstens ein bisschen meinen Horizont erweitern, zum Anderen kann es ja sein, dass ich doch mal was ändern muss, und da mag ich nicht schon wieder jemanden engagieren.
Danke für Hilfe
Ich bin auch offen für jegliche Vorschläge und Nachfragen, kann ja sein jemanden fällt etwas einfacheres ein.
Grüße Quo
- Bearbeitet Quonox Dienstag, 24. Juli 2012 13:43 Bildkorrektur
-
Eine erste Antwort zu geben ist immer noch kompliziert, insbesondere, da der Lernaufwand für .NET nicht zu unterschätzen ist. Das Bild kann ich leider nicht sehen.Mit meinen schon mehrjährigen .NET-Kenntnissen würde ich eine WPF-Anwendung schreiben, die den Programmzustand in den Einstellungen ablegt und eine XML-Datei für die Parametrierung (Zuordnung blStift – blaue Stifte – Typ 999) nutzt. Mit dem Start des Programmes oder auch der Aktivierung eines Reiters wird dann die entsprechende LUA-Datei gelesen und deren Inhalt in eine Liste interner Objekte (eigener Typ = Klasse) überführt. Diese Liste wird an ein Grid gebunden und in Abhängigkeit von den Angaben in der Parametrierung werden pro Zeile die betreffenden Steuerelemente in die betreffenden Grid-Zellen geschrieben. Zum Schluss gibt es einen Save-Button, mit dem dann die interne Liste wieder in einen Text-Stream umgewandelt und als Datei abgelegt wird.Ich vermute aber, dass dieser Realisierungsweg zu kompliziert für Deinen Kenntnisstand ist. Deshalb solltest Du erst einmal wie in VBA gewohnt linear programmieren, ein Grid füllen, dem Bediener die Möglichkeit geben, im Grid die Werte zu verändern, und zum Schluss alles wieder ausgeben. Dieser Weg bedeutet zwar einen großen Programmieraufwand, man kann aber den Einarbeitungsaufwand in des Framework überschaubar halten.--
Viele Gruesse
Peter- Als Antwort markiert Quonox Dienstag, 24. Juli 2012 13:58
-
Hi
Wie man es im Bild sieht
wie Peter schon schrieb: Da ist kein Bild zu sehen.
ab dem + Zeichen, soll es aussehen und funktionieren. Also linke Spalte Bezeichnungen und in der rechten kann man Werte einstellen. Dabei können die Werte Boolean, Strings und Zahlen sein und manchmal als Dropliste zur Auswahl stehen.
Falls die Variablen feststehen bzw. Du eine entsprechende Vorgehensweise festlegen kannst, würde ich das mit einer kleinen Hilfsklasse lösen, die Du serialisieren/deserialisieren kannst. Ein Beispiel für Serialisierung/Deserialisierung mit VB.NET findest Du hier.
In deinem Fall wäre das bspw. eine Klasse mit 4 Eigenschaften: Name, Beschreibung, Typ und Wert. Name wäre dann bspw. "klBaum", Beschreibung "kleiner Baum", Typ dann der erwartete Datentyp, bspw. String (hier würde ich entweder die Standardnamen der .NET Datentypen nehmen oder, falls das nicht gewünscht ist, einen Enum erstellen, mit dem Du dann arbeiten kannst), Wert beinhaltet dann halt den Wert :)
Diese Klasse kannst Du in eine List( Of <DeineKlasse> ) packen und hast damit dann die Auflistung der möglichen Variablen inkl. den Werten. Diese Liste kannst Du dann aus einer XML Datei erzeugen (Deserialisierung) und als Datenquelle für ein DataGrid verwenden. Nach Fertigstellung nimmst Du die Liste und serialisierst sie wieder in eine XML Datei. Die Erzeugung der .lua Datei(en) würde ich als separaten Schritt sehen, das kannst Du dann problemlos mit der List( Of ... ) machen, indem Du die einzelnen Sachen ausliest und daraus dann mit den entsprechenden Vorgaben die Skriptdatei erzeugst.
zu wissen, welche Datei zu bevorzugen ist, xml, vielleicht mdb oder was mir gänzlich unbekanntes. Es muss nur auf einen 10 Jahre alten XP Rechner laufen, der XP nur UpToDate hat aber keine zusätzliche Software, .NET Framework Client ist vorhanden.
Dann wäre obiges sicher passend.
Nun fragt sich der eine oder andere, warum gibt der Typ nicht jemanden 20€ und fertig.
Nö, das frag ich mich nicht. Hat aber den einfachen Grund, dass Du niemanden finden wirst, der das für 20 Euro macht. Häng mal noch ein paar Nullen dran^^
Naja, mir tun selbst 20€ weh und ich will wenigstens ein bisschen meinen Horizont erweitern, zum Anderen kann es ja sein, dass ich doch mal was ändern muss, und da mag ich nicht schon wieder jemanden engagieren.
Ist doch prima. Nur so kann man weiterkommen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Quonox Dienstag, 24. Juli 2012 13:58
-
Vielen Dank für die Antworten,
das Bild hatte ich gestern noch nachträglich eingefügt. Ich hatte wohl zu lange an dem Beitrag geschrieben, da war es dann scheinbar nicht mehr gespeichert bzw. die Session-Url nicht mehr gültig, aber wohl noch in meinem temp.
Ich werde den interessanten Weg gehen und mich mit der WPF Anwendung befassen und xml als InfoQuelle nutzen.
Vielen Dank nochmal!
Damit wäre das Thema erledigt,
wer dennoch was dazu sagen möchte kann das gerne tun.Ich bin auch über Quellen bzw. Informationen dankbar, die speziell mein Projekt und dessen Objekte betreffen aber nicht so leicht zu googeln sind.
Grüße Quo