2016-05-06 14 views
0

ich ein Programm schreibe, wo ich in der Lage sein wollen, ein Surfer (eine Klasse, die vier Saiten erfordert, FirstName, LastName, Dob, Country) hinzuzufügen. (Ich habe DateTime nicht verwendet, da es für dieses Projekt keine Notwendigkeit war, obwohl es wahrscheinlich besser ist, es zu verwenden.) Ich wollte dann die gerade erstellte Klasse in eine Textdatei schreiben, und dafür habe ich eine formatierte Zeichenfolge . Ich habe zwei Probleme.Ausgabe mit dem Schreiben in eine Textdatei

  1. Es schreibt nicht die Dob oder die Country in die Textdatei.

  2. Ich bin nicht sicher, wie Sie jeden Eintrag auf eine neue Zeile setzen. (I versucht haben, \ n am Ende meiner Fileformat String und separat am Ende meiner String toFile.

Der Code, den ich für den Versuch, dies zu tun ist

public class Surfer 
{ 
    protected string SurferFirstName { get; set; } 
    protected string SurferLastName { get; set; } 
    protected string SurferDob { get; set; } 
    protected string SurferCountry { get; set; } 
    public Surfer() { } 

    public Surfer(string surferFirstName, string surferLastName, string surferDob, string surferCountry) 
    { 
     SurferFirstName = surferFirstName; 
     SurferLastName = surferLastName; 
     surferDob = SurferDob; 
     surferCountry = SurferCountry; 
    } 
    public override string ToString() 
    { 
     return string.Format("Surfer name: {0} {1} Surferdob: {2} \n Country: {3}", SurferFirstName, SurferLastName, SurferDob, SurferCountry); 
    } 
    //for display in the textblock, virtual for inheritance 
    /* public virtual string vehicleDetails() 
    { 
     return string.Format("Make:{0,40} \nModel:{1,40} \nPrice:{2,40} \nYear: {3,40} \nColour: {4,40}, \nMileage: {5,40} \nDescription: {6,40} \nEngine: {7,40}", Make, Model, Price, Year, Colour, Mileage, Description, Engine); 
    }*/ 
    //for formatting to a text file 
    public string FileFormat() 
    { 
     return string.Format("{0},{1},{2},{3} \n", SurferFirstName, SurferLastName, SurferDob, SurferCountry); 

    } 
} 

Meine Code ist die WindowAdd.cs

private void btnSubmit_Click(object sender, RoutedEventArgs e) 
{ 
    //reading in from text boxes 
    string fName = txtbxFirstName.Text; 
    string lName = txtbxLastName.Text; 
    string dob = txtbxDob.Text; 
    string country = txtbxCountry.Text; 
    //basic validation 
    if (fName.Length <2 || lName.Length <2) 
    { 
     MessageBox.Show("first and last name must be entered"); 
    } 
    else if(dob.Length <10 || dob.Length>10) 
     MessageBox.Show("Enter dob in the correct format (dd/mm/yyyy)"); 
    else if(country.Length <3) 
     MessageBox.Show("Enter a valid country"); 
    else 
    { 
     try 
     { 
      //sets mainWindow 
      MainWindow mainWindow = new MainWindow(); 
      //creates new surfer class 
      Surfer newSurfer = new Surfer(fName, lName, dob, country); 
      //adds to observable collection 
      mainWindow.surfers.Add(newSurfer); 
      //uses FileFormat from the Surfer Class to format in order to add to text file 
      string toFile = newSurfer.FileFormat(); 
      //append to Surfers.Text 
      File.AppendAllText("Surfers.Text", toFile); 

      //closes window 
      this.Close(); 
     } 

Das Ergebnis, das ich in der Textdatei bin immer ist wie diese

John Barry ,, Glücklich, Gilmore ,,

dies für zwei versuchte Einträge

Die grundlegende Validierung arbeitet so wird es in der XAML in Ordnung zu lesen. Ich weiß, ich könnte File.WriteAllLines verwenden und Code schreiben, um jedes Element in meiner beobachtbaren Sammlung in die Textdatei durch eine Speicherschaltfläche zu senden, aber wenn es möglich ist, würde ich es lieber in einer ähnlichen Weise wie die Methode versuchen, wo ich einen Eintrag speichere in die Textdatei zu einem Zeitpunkt ohne bestehende Elemente zu löschen.

+1

Unter Windows möchten Sie '\ r \ n' für Newline verwenden oder einfach 'Environment.NewLine' verwenden. Auf meinem System wird der normale Notepad '\ n' nicht als neue Zeile anzeigen (andere Editoren werden dies jedoch tun). – Quantic

+0

Das hat die neue Zeilenfrage gelöst Prost! – Kevin

+1

Sie haben Ihre Variablen rückwärts im 'Surfer' Konstruktor,' surferDob = SurferDob' sollte 'SurferDob = surferDob' sein, ebenfalls mit' SurferCountry' – Quantic

Antwort

1

Ihr Konstruktor weist Variablen die falsche Richtung für Dob und Land zu. Sie ordnen die Eigenschaft dem Parameter anstelle des Parameters in der Eigenschaft zu.

public Surfer(string surferFirstName, string surferLastName, string surferDob, string surferCountry) 
     { 
      SurferFirstName = surferFirstName; 
      SurferLastName = surferLastName; 
      surferDob = SurferDob; 
      surferCountry = SurferCountry; 
     } 

Für neue Linien verwenden Environment.NewLine wie oben von Quantic vorgeschlagen.

+0

Deshalb bin ich ein großer Verfechter des Schlüsselwortes 'this' für Mitgliedsfelder und Eigenschaften. Es vermeidet solche Dinge. –

Verwandte Themen