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
Es schreibt nicht die
Dob
oder dieCountry
in die Textdatei.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.
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
Das hat die neue Zeilenfrage gelöst Prost! – Kevin
Sie haben Ihre Variablen rückwärts im 'Surfer' Konstruktor,' surferDob = SurferDob' sollte 'SurferDob = surferDob' sein, ebenfalls mit' SurferCountry' – Quantic