Benutzer mit den meisten Antworten
Bereits vorhandene Zeiten löschen

Frage
-
Guten Tag,
Ich möchte bei dem Folgenden C# Code, wenn ich eine neue Zeit und Pfad speichere, dass wenn die Zeit bereits vorhanden ist, der Pfad zu der bereits vorhandenen selben Uhrzeit gespeichert und die neue Zeit gelöscht wird. Leider funktioniert es nicht ganz ordnungsgemäß. Das unten angeführte ist mein bisheriger Versuch.
Kann mit bitte wer helfen.
Danke
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace XML_TextFile { public partial class Form1 : Form { public Form1() { InitializeComponent(); bool Gleich = SindGleich(textBoxZeit.Text, textBoxPfad.Text); if (Gleich) { MessageBox.Show("Gleich"); } else { MessageBox.Show("Ungleich"); } } string path = @"C:\Users"; public static bool SindGleich(object value1, object value2) { return value1 == value2; } void ClearAll() { dataGridView1.Columns.Clear(); } private void btnSpeichern_Click(object sender, EventArgs e) { StreamWriter sw = File.AppendText(path); sw.WriteLine(textBoxZeit.Text + ";" + textBoxPfad.Text); sw.Close(); textBoxZeit.Text = ""; textBoxPfad.Text = ""; } private void btnAusgabe_Click(object sender, EventArgs e) { int counter = 0; string line; StreamReader file = new StreamReader(path); ClearAll(); dataGridView1.Columns.Add("Zeit", "Uhrzeit"); while ((line = file.ReadLine()) != null) { counter++; string[] words = line.Split(';'); //MessageBox.Show(words[0].ToString()); dataGridView1.Rows.Add(words[0].ToString()); } file.Close(); MessageBox.Show("Es gibt " + counter.ToString() + " Zeiten."); } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { string line; listBox1.Items.Clear(); using (StreamReader file = new StreamReader(path)) { while ((line = file.ReadLine()) != null) { string[] words = line.Split(';'); var x = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; if (words[0] == dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()) { listBox1.Items.Add(words[1].ToString()); textBoxZeitAusgabe.Text = words[0].ToString(); textBoxPfadAusgabe.Text = words[1].ToString(); } } } } } }
Antworten
-
Sieht für mich nach einem Kandidaten für ein Dictionary aus, wobei die Zeit der Key ist.
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 8. November 2018 08:44
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 15. November 2018 07:10
-
Hallo Peter,
da es mehrere Einträge mit gleicher Zeit geben kann, ist die Zeit als Key unbrauchbar, es sei, dass Tobias wirklich so etwas Krummes mit mehreren Pfaden in einem Eintrag machen will.
das ist falsch.
Der OP beschreibt ein Value zu einer Zeit, das bildet ein Dictionary genau ab. Es ist gerade eine Eigenschaft des Dictionary, dass ein Key ein Value hat - wie der OP es beschreibt. Vielleicht übersiehst Du, dass Value ein komplexerer Datentyp als ein string sein kann, ggfls. mit überschreiben von Add(..).
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 8. November 2018 08:44
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 15. November 2018 07:10
-
Hi Florian,
du hast schon Recht. Ohne die genaue Kenntnis der Forderungen an die Lösung ist es schwer, einen optimalen Weg zu beschreiben. Die erste Frage wäre, ob es mehrere Einträge mit gleicher Zeit geben kann. Wenn ja, dann wäre ein Dictionary mit Zeit als Schlüssel nicht anwendbar. Wenn nein, dann kann ein Dictionary eine gute Lösung sein. Für mich ist die Aneinanderreihung von Details in einer Zeichenkette mit Semikolon als Trennzeichen keine gute Lösung. Ein komplexer Typ mit Liste wäre da u.U. viel besser. Ggf. kann es sogar am besten sein, wenn man einen eigenen Typ vom Dictionary ableitet, in welchem dann - wie von Dir vorgeschlagen - eine spezielle Add-Methode für Prüfung auf Vorhandensein des Schlüssels eingebaut ist.--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 8. November 2018 08:44
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 15. November 2018 07:10
Alle Antworten
-
Hi
Ich möchte bei dem Folgenden C# Code, wenn ich eine neue Zeit und Pfad speichere, dass wenn die Zeit bereits vorhanden ist, der Pfad zu der bereits vorhandenen selben Uhrzeit gespeichert und die neue Zeit gelöscht wird.
ehrlich gesagt hab ich kein Wort verstanden. Was hat die Zeit mit einem Pfad zu tun? Und welche Zeit soll nun welchen Pfad mit welcher vorhanden Uhrzeit speichern und welche Zeit wo löschen?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Mittwoch, 31. Oktober 2018 10:58
-
Hallo Stefan,
Bei dem Programm kann man eine Zeit und einen Pfad einspeichern z.B.: 11:00 und C:\test.
Wenn ich dann nächstes mal z.B.: 11:00 und C:\baum speichere, möchte ich dass es so gespeichert wird:
11:00; C:\test; C:\baum
und nicht
11:00; C:\test
11:00; C:\baum
Danke im Vorraus
-
Hi,
eine kleine Gegenfrage: warum eine csv- Datei?
Ich finde die ganze Struktur eher ungünstig. Warum nicht so etwas wie in deinem anderen Thread, mit Klassen, Serialisierung usw.. ?
Du erstellst dir zum Beispiel eine Klasse:
public class Entry { public DateTime Dt { get; set; } public List<string> Path { get; set; } }
...für eine Uhrzeit und eine Liste für die Pfade. Daraus wird dann eine Liste:
public List<Entry> Entries { get; set; }
...mit sämtlichen Uhrzeiten und die dazugehörigen Pfaden.
Diese Liste kannst du dann mit (zum Beispiel) Linq relativ leicht bearbeiten,lesen,filtern...
Um die Datei musst du dir keine Sorgen machen.
Und deine Daten werden in einer typsicheren Liste gehalten und nicht in einem typ-unsicheren Datagridview...
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
-
Sieht für mich nach einem Kandidaten für ein Dictionary aus, wobei die Zeit der Key ist.
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 8. November 2018 08:44
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 15. November 2018 07:10
-
Hi Florian,
da es mehrere Einträge mit gleicher Zeit geben kann, ist die Zeit als Key unbrauchbar, es sei, dass Tobias wirklich so etwas Krummes mit mehreren Pfaden in einem Eintrag machen will.
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Donnerstag, 1. November 2018 07:34
-
Hallo Peter,
da es mehrere Einträge mit gleicher Zeit geben kann, ist die Zeit als Key unbrauchbar, es sei, dass Tobias wirklich so etwas Krummes mit mehreren Pfaden in einem Eintrag machen will.
das ist falsch.
Der OP beschreibt ein Value zu einer Zeit, das bildet ein Dictionary genau ab. Es ist gerade eine Eigenschaft des Dictionary, dass ein Key ein Value hat - wie der OP es beschreibt. Vielleicht übersiehst Du, dass Value ein komplexerer Datentyp als ein string sein kann, ggfls. mit überschreiben von Add(..).
- Gruß Florian
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 8. November 2018 08:44
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 15. November 2018 07:10
-
Hi Florian,
du hast schon Recht. Ohne die genaue Kenntnis der Forderungen an die Lösung ist es schwer, einen optimalen Weg zu beschreiben. Die erste Frage wäre, ob es mehrere Einträge mit gleicher Zeit geben kann. Wenn ja, dann wäre ein Dictionary mit Zeit als Schlüssel nicht anwendbar. Wenn nein, dann kann ein Dictionary eine gute Lösung sein. Für mich ist die Aneinanderreihung von Details in einer Zeichenkette mit Semikolon als Trennzeichen keine gute Lösung. Ein komplexer Typ mit Liste wäre da u.U. viel besser. Ggf. kann es sogar am besten sein, wenn man einen eigenen Typ vom Dictionary ableitet, in welchem dann - wie von Dir vorgeschlagen - eine spezielle Add-Methode für Prüfung auf Vorhandensein des Schlüssels eingebaut ist.--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 8. November 2018 08:44
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 15. November 2018 07:10