Autor Beitrag
ElGadaa
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 18.07.17 09:16 
Hallo zusammen,

ich bin keinen Programmier, aber versuche gern kleinere Programme zu basteln.
ich habe eine Textdatei, die aus mehrere Hundert Zeilen besteht und so aussieht.

011001;Artikel x;20$
011002;Artikel y;10$
usw...

ich lese die Datei zeilenweise und teile die zeilen nach erhaltene ";" zeichen
danach will ich mit dieser Informationen eine Xml-Datei erstellen, die so aussehen soll.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
<Artikels>
  <Artikel>
       <artNr>011001</artNr>
        <artName>Artikel x</artName>
        <artPreis>20$</artPreis>
    </Artikel>
  <Artikel>
       <artNr>011002</artNr>
        <artName>Artikel y</artName>
        <artPreis>10$</artPreis>
    </Artikel>
  ....
</Artikels>


leider bekomme ich nur die ersten 130 Artikels , danach es gibt IndexOutOfRangeException Fehler...

meine Code sieht so aus....


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
private void FileToXml()
    {
     string artNr;
     string artName;
     string artPreis;


     string line = "";
     string fileNameAndPath = @"C:/Daten/Artikels.txt";
            
     System.IO.StreamReader file = new System.IO.StreamReader(fileNameAndPath);
            
     XmlWriterSettings settings = new XmlWriterSettings();
     settings.Indent = true;

     XmlWriter writer = XmlWriter.Create(@"C:/Daten/Artikels.xml", settings);
        
        writer.WriteStartDocument();
        writer.WriteStartElement("Artikels");
               
            while ((line = file.ReadLine()) != null)
            {
               string[] sp = line.Split(';');

                    artNr = sp[0];
                    artName = sp[1];
                    artPreis = sp[2];

                    writer.WriteStartElement("Artikel");
                       writer.WriteElementString("artNr", artNr);
                       writer.WriteElementString("artName", artName);
                       writer.WriteElementString("artPreis", artPreis);
                    writer.WriteEndElement();
                
             }
              
          writer.WriteEndElement();
          writer.WriteEndDocument();
          writer.Close();
               
      file.Close();

   }


so für hinweise wäre ich wirklich dankbar :))

vielen Dank
El
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 436
Erhaltene Danke: 51



BeitragVerfasst: Di 18.07.17 09:28 
Wie sieht denn die Zeile aus, in der das Programm abbricht?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4245
Erhaltene Danke: 901

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Di 18.07.17 09:43 
Hallo und :welcome:

wahrscheinlich gibt es in der CSV-Datei eine Zeile mit weniger als 2 Trennzeichen (oder sogar eine Leerzeile).
Dann fange dies z.B. mit
ausblenden C++-Quelltext
1:
2:
3:
4:
5:
string[] sp = line.Split(';');
if (sp.Length > 2)
{
  // ...
}

ab.

Für diesen Beitrag haben gedankt: doublecross
ElGadaa Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 18.07.17 10:44 
user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Wie sieht denn die Zeile aus, in der das Programm abbricht?


Das Programm bricht in zeile 26 mit folgende Fehlermeldung ab.
"IndexOutOfRangeException wurde nicht behnadelt. Der Index war außerhalb des Arraybereichs."
Einloggen, um Attachments anzusehen!
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 436
Erhaltene Danke: 51



BeitragVerfasst: Di 18.07.17 10:45 
Ich meinte deine mehrhundertzeilige Textdatei. Wenn da plötzlich sp[1] nicht mehr existiert, dann hat die Zeile wohl kein Semikolon.
ElGadaa Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 18.07.17 10:51 
Hallo Th69,

hab nochmal kontrolliert, die Textdatei ist in Ordnung.
was ich jetzt bemerk habe, dass das Programm manchmal in der zeile 130, 131 oder in der Zeile 133 abbricht...
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 436
Erhaltene Danke: 51



BeitragVerfasst: Di 18.07.17 10:56 
user profile iconElGadaa hat folgendes geschrieben Zum zitierten Posting springen:
die Textdatei ist in Ordnung.


Wetten, dass nicht?
ElGadaa Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 18.07.17 10:56 
user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Ich meinte deine mehrhundertzeilige Textdatei. Wenn da plötzlich sp[1] nicht mehr existiert, dann hat die Zeile wohl kein Semikolon.


Die Zeilen sehen alle gleich, drei Spalten, die von einander mit einem Semikolon getrennt sind.

Aber ich werde sie nochmal ordentlich kontrollierren...
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Mi 19.07.17 13:18 
Klicke am besten einmal das kleine Fenster mit der Fehlermeldung weg und Fahre mit der Maus im Studio über das Wort "line", dann sollte dir angezeigt werden, welcher Wert gerade in dieser Variable steht. Ich schließe mich den Kollegen an, dass dieser Wahrscheinlich nicht in dein Schema passt.

Generell sollte ein Programm auch nie davon ausgehen, dass die Datei intakt ist und sollte dies ständig überprüfen, mindestens so wie von user profile iconTh69 vorgeschlagen, indem fehlerhafte Datensätze ignoriert werden.