• 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

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
Ich habe mir ein kleines Programm gebastelt. Aufgabe wäre es nun Daten aus den Text und Combofeldern in eine Textdatei zu schreiben und aus dieser wieder aus zu lesen.

Ich finde im Internet nur Tutorials wie das mit Konsolenanwendungen geht, aber damit kann ich nichts anfangen, da ich es in einer Windows-Anwendung brauche.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Ich auch nicht:

File Class
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
schau dir das zweite Beispiel, von deinem Link an.
hier die gekürzte Version:

[src=csharp]private async void AppendButton_Click(object sender, RoutedEventArgs e)
{
string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

using (StreamWriter outfile = new StreamWriter(mydocpath + @"\UserInputFile.txt", true))
{
await outfile.WriteAsync(UserInputTextBox.Text);
}
}[/src]

Die Methode AppendButton_Click(..) wird aufgerufen, wenn man einen Button anklickt. Dann wird der Text der in einer Textbox (UserInputTextBox) steht in eine Datei geschrieben (UserInputFile.txt) .
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #8
@KaPiTN: Der Beitrag war super und hat mir sehr geholfen. In Microsofts Beispiel ist aber ein kleiner Schönheitsfehler. Wenn keine Datei besteht wird der erste Eintrag zweimal gemacht, weil nach dem if das else fehlt ;)

Ich habe jetzt eine Datei mit folgendem Inhalt:
Max Mustermann
22
Donnerstag, 28. August 2014
C28
Maxi Musterfrau
28
Donnerstag, 28. August 2014
G5

Ich will die Datei jetzt auslesen, aber ich brauche die Einträge teilweise an verschiedenen Stellen. So habe ich eine comboBox und dort sollen nur die Namen aufgelistet sein. Die anderen Daten sind irrelevant.
Weiter unten will ich dann als Label die anderen Daten zu der betreffenden Person ausgeben. Wie muss ich das machen?
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Möchtest Du nicht lieber XML statt plain text verwenden?
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #10
Ich sag mal so: Eine Lösung die für mich verständlich ist und da du mich ja nun schon bissel kennst weist du ja, dass ich zwar programmieren können will, mir das dazu nötige Denken aber extrem schwer fällt.
 

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
XML ist eigentlich auch nicht wesentlich komplizierter als plain text zu schreiben. Im Grunde halt strukturierter plain text.

Einlesen könntest du dich hier. Kannst aber auch nach anderen Quellen googeln wenn dich das Englisch stört.
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #12
Kannst du dafür bitte ein kurzes kommentiertes Beispiel posten?

Vom Prinzip her würde das am Ende aber so aussehen? Nur eine echte XML-Datei ist das nicht, aber es gäbe Paramter die man direkt ansprechen könnte und ich denke darauf kommt ja an?

[src=csharp]sw.WriteLine("Name: " + txtName.Text);
sw.WriteLine("Alter: " + combAlter.Text);
sw.WriteLine("Tag: " + dateTimePicker1.Text);
sw.WriteLine("Berech:" + txtBereich.Text);[/src]
Name: Max Mustermann
Alter: 22
Tag: Donnerstag, 28. August 2014
Bereich: C28
Name: Maxi Musterfrau
Alter: 28
Tag: Donnerstag, 28. August 2014
Bereich: G5
 

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
Naja die XML Datei könnte eventuell so aussehen: [src=xml]<root><datensatz alter="22" tag="Donnerstag" bereich="C28">Max Mustermann</datensatz><datensatz ....>.....</datensatz></root>[/src]

Code kann ich dir vielleicht morgen schreiben. Hab gerade kein VS um hier was zu testen. Eigentlich kann man aus dem Beispiel was ich gepostet habe aber fast alles übernehmen. Ich würde dir empfehlen dich erstmal einzulesen und es selbst zu versuchen. Dann kommst du Schritt für Schritt auch zu dem Denken was man fürs Entwickeln von eigenen Programmen braucht. Das Aneignen von Wissen ist da essentiell.
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
also wenn das immer so aussieht, dass vier Zeilen in deiner Datei zusammen gehören. Dann lass es doch so wie es ist.



[src=csharp]
public class Person
{

private string name;
private int alter;
private string irgendwas;
private String datum;

public Person(string n, int a, string i, string d)
{
name = n;
alter = a;
irgendwas = i;
datum = d;
}

public Person(string arr)
{
name = arr[0];
alter = arr[1]; //TODO umwandeln
irgendwas = arr[2];
datum = arr[3];
}
public string getName() {
return name;
}
}
[/src]

[src=csharp]

ArrayList list = new ArrayList();
using (StreamReader sr = File.OpenText(path))
{
string s = "";
int i = 0;
string[] arr = new string[4];
while ((s = sr.ReadLine()) != null)
{
// Console.WriteLine(s);
arr = s;
i++;
if (i >= 4)
{
list.Add(new Person(arr);
i = 0;
}
}
}
[/src]

Um in der Combobox die Namen auszugeben:
[src=csharp]
foreach ( Person p in list)
Console.Write(p.getName());
[/src]

ps habe kein C# installiert.
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #15
Öhm, nettes Beispiel und sieht auch irgendwie brauchbar aus, aber ich verstehe nur Bahnhof. Das jetzt irgendwie bei mir rein zu kopieren und so lange anzupassen bis es irgendwann zufällig funktioniert ist glaube ich auch nicht gerade der beste Weg etwas zu lernen.
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
meinst du mein Beispiel?

Code1 müsste einfach sein. Du schreibst eine einfache Klasse mit ein paar get-Methoden.

Code 2: hier ließt du 4 Zeilen in ein Array. Dann übergibst du das Array an den Konstruktor der Klasse Person. Dabei erzeugst du ein Objekt vom Typ Person, welches in einer Arrayliste gespeichert wird. Über die Liste kannst du auf die Objekte und Eigenschaften von Personen zugreifen. So wie im dritten Beispiel
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Wenn s nicht XML sei soll, dann gäbe es natürlich auch noch csv

[src=csharp]
Max Mustermann;22;Donnerstag, 28. August 2014;C28
Maxi Musterfrau;28;Donnerstag, 28. August 2014;G5
[/src]
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
wenn du es mit der CSV Methode machst

[src=csharp] private ArrayList list = new ArrayList(); // außerhalb einer Methode

....
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
string[] arr = s.Split(';');
list.Add(new Person(arr);
}
}[/src]
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #19
Die XML-Option gefällt mir prinzipiell schon ganz gut. In dem Beispiel werden jetzt zwar alle Felder immer ausgefüllt, aber es kann ja auch mal eines leer bleiben und schon gerät alles durcheinander. Von daher macht es ja schon Sinn die Dinge klar beim Namen zu nennen.

Doof finde ich halt, dass alle deutschsprachigen Tutoriums die ich gefunden habe mit der Eingabeaufforderung arbeiten und nicht mit Windows-Forms direkt. Das würde vieles einfacher machen, wenn man konkrete erklärte und kommentierte Beispiele erstmal nachbauen könnte.

--- [2014-08-28 23:24 CEST] Automatisch zusammengeführter Beitrag ---

Ich habe jetzt eine "Lösung" gefunden mit der ich die Datei auslesen kann.
[src=csharp]
string pfad = @"C:\_Transfer\daten.txt";

if (File.Exists(pfad))
{
using (StreamReader sr = File.OpenText(pfad))
{
string lesen;
while (sr.Peek() != -1)
{
lesen = sr.ReadLine();
comboBox1.Items.Add(lesen);
}
sr.Close();
}
}
else
{
comboBox1.Text = "";
}[/src]
Damit bekomme ich aber die gesamte Textdatei ausgelesen, ich will aber nur den Namen. Wie kann ich das eingrenzen und wie kann ich die übrigen Paramter in der Form "verteilen"?
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
aber es kann ja auch mal eines leer bleiben und schon gerät alles durcheinander.

stimmt, wenn du den Namen in eine Zeile schreibst und dann das Alter in die nächste usw. Wenn du aber die Daten einer Person in eine Zeile schreibst und diese z. B. durch ein ; trennst hast du das Problem eigentlich nicht mehr. Alternativ könntest du Tabulator als Trennzeichen '\t' verwenden.
Beipiel wie die Datei aussehen könnte:

Max Mustermann;22;Donnerstag, 28. August 2014;C28
;22;Donnerstag, 28. August 2014;C28
Max Mustermann; ; ;C28

so sind auch csv Dateien aufgebaut. Man kann so eine Datei auch einfach in Excel öffnen.

Wie das Einlesen funktioniert habe ich dir in #18 schon gezeigt.


Damit bekomme ich aber die gesamte Textdatei ausgelesen, ich will aber nur den Namen. Wie kann ich das eingrenzen und wie kann ich die übrigen Paramter in der Form "verteilen"?

So:

[src=csharp]
foreach (Person p in list)
comboBox1.Items.Add(p.getName()); [/src]
 
Oben