Laden...

Wahlweise XML oder "Textdatei" einlesen

Erstellt von Banthrass vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.445 Views
B
Banthrass Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren
Wahlweise XML oder "Textdatei" einlesen

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 🙂

49.485 Beiträge seit 2005
vor 16 Jahren

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

B
Banthrass Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren

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 🙂

B
Banthrass Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren

jemand eine Idee?

B
196 Beiträge seit 2007
vor 16 Jahren

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

343 Beiträge seit 2007
vor 16 Jahren

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

[- www.saftware.net -](http://www.saftware.net/)
B
Banthrass Themenstarter:in
4 Beiträge seit 2008
vor 16 Jahren

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 🙂

B
196 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Banthrass,

oder wenn es feste Spaltenpositionen gibt mit String.Substring.

herbivore

343 Beiträge seit 2007
vor 16 Jahren

Um unnötige Leerzeichen zu entfernen ist sicherlich String.Trim() hilfreich

Lg
Preli

[- www.saftware.net -](http://www.saftware.net/)