Hallo zusammen,
ich weis gar nicht so genau ob mein Titel für diesen Post passt ^^. Des Weiteren will ich kurz darauf hinweisen das ich erst seit ca 2 Wochen c# programmiere und auch sonst nich wirklich Ahnung von der Materie hab. Bin eigentlich FISI und hatte bisher wenig mit sowas zutun 🙂.
Ich habe schon diverse Infos zu diesem Thema gefunden aber im Endeffekt konnten Sie mir nicht so wirklich helfen.
Nun ja ich habe hier folgendes Problem:
In einem Programm soll ein Benutzer verschiedene Dateien einlesen können. Die eingelesenen Daten sollen nun in einer Tabelle oder aber auch in verschiedenen Textfeldern angezeigt werden ( je nach Dateiformat). Es handelt sich hier um *.XML und *.h Dateien. Die *.h Dateien lassen sich auch in einem Editor öffnen.
Ich habe jetzt schon mal was programmiert, was eine solche XML einliest und in einem DataGridView in Tabellenform anzeigt. Das war dank der MSDN auch nicht so schwer. Nun würde ich auch gern diese *.h Datei einlesen können und die beinhalteten Daten sauber und editierbar ausgeben. In Textfeldern z.B.
Eine Typische *.h Datei sieht so aus:
H 0196 0000 17.11.2005
H
HI 131.08.2005Stadt Name/Name
HI 227420301 Strasse
HI 327420301 27420301 27420304 0 250 250STZ Z O 30.22 1
HI 427420301 -0.50 03461201MOD HA
HI 427420301 0.00 03462201MOD PA
HI 427420301 4.47 03472401MOD A--R 0300
HI 427420301 20.07 03521701MOD A--R 0300
HI 427420301 29.06 03544001MOD RQ--2 0.02 0000
HI 427420301 29.19 03550101MOD PE
HI 427420301 29.72 03551901MOD EH
HI 427420301 29.72 03552401MOD HL 30.22
HI
Diese Daten (z.B Name, Datum oder diese Kürzel wie A--R etc) will ich editierbar dargestellt haben.
Hier mal mein Code....der nicht richtig funktioniert. XML lässt sich einlesen *.h datei leider nicht:
private void öffnenToolStripMenuItem_Click(object sender, System.EventArgs e)
{
OpenFileDialog newFile = new OpenFileDialog();
Stream myStream = null;
newFile.InitialDirectory = "c:\\";
newFile.Filter = "Haltung (*.h)|*.h|XML (*.xml, *.xsd)|*.xml;*.xsd|Alle Dateien (*.*)|*.*";
newFile.FilterIndex = 2;
newFile.RestoreDirectory = true;
if (newFile.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = newFile.OpenFile()) != null)
{
using (myStream)
{
dataSet_Version.ReadXml(myStream);
dataGridView1.DataSource = dataSet_Version;
dataGridView1.DataMember = "Liegenschaft";
}
}
else
{
using (newFile)
{
textfiles hfile = new textfiles();
string fs = hfile.ReadFile(newFile);
dataGridView1.DataSource = fs;
}
}
}
catch(Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
}
Vielleicht kann mir ja mal jemand sagen wie ich die *.h Datei einlesen kann und die Daten sauber darstellen kann.
Danke für die Hilfe 🙂
//Banthrass
*EDIT*
ReadXML habe ich eingebaut um XML-Dateien einzulesen und in dem Gridview darstellen zu können. Das funktioniert auch ohne weiteres. Wenn ich nun aber im Dialog "Datei öffnen" eine *.h-Datei öffne, dann soll er nicht ReadXML nutzen sondern die Datei einfach einlesen. Die *.h Datei ist im Endeffekt nur eine normale Textdatei bei der die Kennung umbenannt wurde. Ergo: Ich will wahlweise eine solche Textdatei einlesen, zerpröseln und darstellen. Mit dem einlesen und darstellen wäre mir aber vorerst mal geholfen 🙂
Hallo Banthrass,
Ich will wahlweise eine solche Textdatei einlesen, zerpröseln und darstellen. Mit dem einlesen und darstellen wäre mir aber vorerst mal geholfen
ja, kannst du machen. Musst du dann aber alles ausprogrammieren. Siehe auch [Tutorial] Alles über Dateien 2.2 und String.Split. Vermutlich brauchst du noch mehr.
herbivore
Holá 🙂
Danke für den Link. Hab gerade mal drüber geschaut. Das hilft mir weiter 🙂
*Edit*
Ich habe mich mittlerweile mal ein wenig damit beschäftigt. Ich habe festgestellt, das es vielleicht sinnvoller wäre die meine *.h Datei spaltenweise einzulesen, da jede spalte eine bestimmte Bedeutung hat.
Ich verdeutliche das mal eben:
H 0196 0000 17.11.2005
H
HI 131.08.2005Waldesch Gruwa/C.Stach
HI 227420301 Amselsteg
HI 327420301 27420301 27420304 0 250 250STZ Z O 30.22 1
HI 427420301 -0.50 03461201MOD HA
HI 427420301 0.00 03462201MOD PA
HI 427420301 4.47 03472401MOD A--R 0300
HI 427420301 20.07 03521701MOD A--R 0300
HI 427420301 29.06 03544001MOD RQ--2 0.02 0000
HI 427420301 29.19 03550101MOD PE
HI 427420301 29.72 03551901MOD EH
HI 427420301 29.72 03552401MOD HL 30.22
Man nehme an, diese Datei hat 80 spalten. Im Standart dieser Datei ist festgelegt, dass z.B. Spalte 1-2 (HI) eine obligatorische Angabe ist. Spalte 3-4 ist der Recordeintrag (z.B. 1 oder 2). In Spalte 5-14 ist dann z.B. das Datum angegeben und so weiter. Ich hoffe ihr habt das Prinzip verstanden.
naja irgendwie hab ich keinen Ansatz wie ich spaltenweise die Datei durchgehen kann um sie aufzupröseln.
am ende soll in den diversen Textboxen z.B. folgendes stehen:
textbox 1:HI
textbox 2:427420301
textbox 3:29.72
usw.
naja ein Ansatz wäre sehr hilfreich 🙂
danke 🙂
Zeilenweise einlesen und den String so zurechtsplitten wie du ihn brauchst
Herbivore hatte dir ja schon den Hinweis auf String.Split gegeben.
So wie das aussieht musst du einfach nur Leerzeichen als Seperator nehmen.
your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself
Vergiss das spaltenweise auslesen. Textdateien werden grundsätzlich zeilenweise eingelesen und jede Zeile dann für sich analysiert.
Damit die spaltenweise einlesen könntest müsste wirklich jede Zeile exakt gleich viele Zeichen beinhalten (also auch Leerzeichen am Ende) und du müsstest dauernd in der Datei hin und herspringen, was sich negativ auf die Performance auswirkt.
Lg
Preli
hmmm....naja ich werde dann einfach beide varianten versuchen müssen. das zeilenweise einlesen funktioniert mittlerweile, allerdings hab ich immer noch keinen richtigen plan wie ich nun die Datei auseinander nehmen kann. Ich werds einfach heute abend nach der Arbeit nochmal versuchen.
Danke für eure Hilfe 🙂
allerdings hab ich immer noch keinen richtigen plan wie ich nun die Datei auseinander nehmen kann.
solange du weisst was wo steht brauchst du nur String.Split oder RegEx um die daten zu zerlegen.
your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself
Hallo Banthrass,
oder wenn es feste Spaltenpositionen gibt mit String.Substring.
herbivore
Um unnötige Leerzeichen zu entfernen ist sicherlich String.Trim() hilfreich
Lg
Preli