• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[C# .net Framework] In eine Textdatei schreiben / auslesen

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
Letztendlich ists doch egal ob die Beispiele für Konsolen oder Windows Forms Application geschrieben sind. Einzig die Ausgabe ändert sich. Solange es nur um den Zugriff auf Dateien, egal in welchem Format, geht bleibt alles identisch. Ich kann dir gerne einen Code schreiben der dir deine Daten in eine xml Datei schreibt und die dann in ne ComboBox läd, bringen wird dir das aber nichts. Versuch doch bitte mal einen Ansatz zu erstellen, ließ dich vorher ein (um Englisch kommst du eh nicht drum rum) und stell dann gezielt Fragen wo du Verständnis Probleme hast.
Andernfalls wird sich dein Programmieren in Zukunft wohl wahrscheinlich darauf beschränken hier nach 90% des Codes zu fragen welchen du dann zusammen kopierst. Nicht böse gemeint.

CSV würd ich hier nicht benutzen xml ist imo wesentlich flexibler. Wenn schon ein arbeiten dann gleich richtig.
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
CSV oder XML hängt von den Daten ab. So wie es hier aussieht gibt es keine komplezierten Daten, keine Verschachtelung .. und die Struktur der Daten lässt sich einfach in einer Tabelle speichern.

Außerdem musst du schauen womit Cyperfriend eher klar kommt. Er lernt erst wie man eine Datei ausließt. Eigene Klassen schreibt er wohl auch noch nicht usw. Also muss er erstmal die Grundlagen lernen, dann kann er mit XML-Dateien und -Objekten beginnen.

@Cyperfriend ich würde an deiner Stelle eine ArrayList verwenden in der man Personen Objekte ablegt. Ich gehe mal davon aus, dass dein speichern mom irgendwie so aussieht


[src=csharp]for(... ) {
sw.WriteLine(comboBox1.Items.Get(i)); // Namen schreiben
sw.WriteLine(comboBox2.Items.Get(i)); // Alter
sw.WriteLine(comboBox3.Items.Get(i)); // Geburtstag
sw.WriteLine(comboBox4.Items.Get(i)); // Abteilung
}[/src]

Was passiert den wenn die Daten so aussehen müssten. Also ein Feld nicht ausgefühlt wird

Max Mustermann1;22;Donnerstag, 28. August 2014;C28
;22;Donnerstag, 28. August 2014;C28
Maxi Musterfrau; ; ;C28

dann schreibst du ja

Max Mustermann1;22;Donnerstag, 28. August 2014;C28
Maxi Musterfrau ;22;Donnerstag, 28. August 2014;C28 <<-- Maxi Musterfrau rutscht eine Zeile hoch
// .. hier gibt es dann einen Fehler
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #23
So, ich habe dann mal ein XML-Dokument angelegt. Dank dieses tollen Tutorials war das wirklich einfach.

So sieht der Code aus:
[src=csharp]
private void cmdSpeichern_Click(object sender, EventArgs e)
{
var Person = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Beginn",
new XElement("ID", "1"),
new XElement("Person",
new XElement("Name", txtName.Text),
new XElement("Alter", combAlter.Text),
new XElement("Geburtsdatum", dateTimePicker1.Text),
new XElement("Bereich", txtBereich.Text)
)
)
);
Person.Save("C:\\_Transfer\\test.xml");
this.Close();
}[/src]

Die XML sieht so aus. Ich hoffe ihr seid damit zufrieden.
[src=xml]
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<Beginn>
<ID>1</ID>
-<Person>
<Name>Max Mustermann</Name>
<Alter>20</Alter>
<Geburtsdatum>Freitag, 29. August 2014</Geburtsdatum>
<Bereich>X22</Bereich>
</Person>
</Beginn>[/src]
(Irgendwie wird das im Forum nicht eingerückt, im Original ist es.)

Leider gibt es aber beim Laden der Datei einen Absturz, obwohl der Code als richtig angezeigt wird. Ich versuche hier jetzt den Namen aus der XML-Datei auszulesen und in die ComboBox zu übergeben.

[src=csharp]
string pfad = @"C:\_Transfer\test.xml";

if (File.Exists(pfad))
{
var Person = XElement.Load(pfad);

foreach (var p in Person.Elements())
comboBox1.Text = p.Element("Name").Value;
}
else
{
comboBox1.Text = "";
}[/src]

Dazu noch einige gezielte Fragen:

1) Was bedeutet das Schlüsselwort "var" und was genau macht die Zeile
[src=csharp]var p in Person.Elements()[/src]
2) Ich habe im XML-File bereits eine ID vorgesehen. Wie kann ich die XML-Datei nun erweitern und dabei automatisch eine ID einfügen, so wie ich das in MySQL gewohnt bin. Da passiert das automatisch. Auf der Seite wird ja grundsätzich gezeigt wie man das XML-File erweitert. Das will ich morgen ausprobieren.
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
wenn du var davor schreibst, dann bestimmt der Compiler für dich den Typen des Objektes p

muss die Zeile
comboBox1.Text = p.Element("Name").Value;

nicht so aussehen ?
comboBox1.Items.Add(p.Element("Name").Value);

ohne eine Fehlermeldung kann man schlecht sagen, wieso dein Programm abstürtzt.

zu 2. du muss deine Schreib-Methode neu schreiben


Einfaches Beispiel um eine Person zu speichern
[src=csharp] XDocument doc = new XDocument( new XDeclaration("1.0", "utf-8", "yes") );
XElement person = new XElement("Person",
new XElement("ID", "1").
new XElement("Name", txtName.Text),
new XElement("Alter", combAlter.Text),
new XElement("Geburtsdatum", dateTimePicker1.Text),
new XElement("Bereich", txtBereich.Text)
);
doc.Root.Add(person);
doc.Save("C:\\_Transfer\\test.xml");
this.Close();[/src]

nun hier um mehrere zu speichern:

[src=csharp]

XDocument doc = new XDocument( new XDeclaration("1.0", "utf-8", "yes") );
XElement person:
for(int i = 0; ... ; i++) {
person = new XElement("Person",
new XElement("ID", i). // <-- i
new XElement("Name", txtName.Text), //die zeilen musst du natürlich auch noch anpassen
new XElement("Alter", combAlter.Text),
new XElement("Geburtsdatum", dateTimePicker1.Text),
new XElement("Bereich", txtBereich.Text)
);
doc.Root.Add(person);
}
doc.Save("C:\\_Transfer\\test.xml");
this.Close();[/src]


PS deine XML Datei ist nicht ganz richitg; ID und Begin habe ich oben geändert. So müsste es aussehen:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Person>
<ID>1</ID>
<Name>Max Mustermann</Name>
<Alter>20</Alter>
<Geburtsdatum>Freitag, 29. August 2014</Geburtsdatum>
<Bereich>X22</Bereich>
</Person>
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #26
Ich habe mal ein komplett neues Projekt gestartet, wo es nur um die Verarbeitung mit XML-Dokumenten gehen soll.

Ich habe als erstes das einfache Beispiel von War-10-ck nachgebaut, aber in der Zeile
[src=csharp]doc.Root.Add(person);[/src] gibt es einen Fehler, wenn man speichern will. (Siehe Anhang)
Ich habe das Projekt mal kommentiert. Stimmt das so oder gibt es Einwände?
[src=csharp]
public formStart()
{
InitializeComponent();

// Dateipfad festlegen
string pfad = @"C:\_Transfer\beispiel.xml";

// Prüfen, ob die angeforderte Datei existiert
if (File.Exists(pfad))
{
comboName.Text = "Datei gefunden";
}
else
{
comboName.Text = "Keine Datei";
}
}

private void XMLSchreiben_Click(object sender, EventArgs e)
{
// Dateipfad festlegen
string pfad = @"C:\_Transfer\beispiel.xml";

// XML-Dokument einleiten
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes")
);

// XML-Struktur erzeugen und mit Inhalt füllen
XElement person = new XElement("Person",
new XElement("ID", "1"),
new XElement("Name", txtName.Text),
new XElement("Alter", comboAlter.Text)
);

// Keine Ahnung
doc.Root.Add(person);

// XML-Dokument speichern
doc.Save(pfad);

// Form schließen
this.Close();
}
[/src]

Anhang anzeigen 25500

Nachtrag: Selbst wenn man die Zeile auskommentiert gibt es einen Fehler, weil angeblich kein XML-Konformes Dokument entstehen würde.
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Du versuchst person als Untergeordnetes Element einem nicht existierenden Root-Element des Documents hinzuzufügen. Daher die Exception.
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #28
Ähm ... verstehe ich nicht. Das Dokument soll doch (sofern nicht vorhanden) erstellt werden.
Kannst du mir das bitte genauer erklären. Ich glaube ich verstehe die aussage / Logik nicht.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Das Dokument erstellst Du.

Wenn Du diesem direkt per Add Dein person hinzufügen würdest, dann gäbe es keine Exception an dieser Stelle.

Du fügst person aber dem Rootelement von Dokument hinzu, welches Du noch gar nicht definiert hast
 
Oben