Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

Antwort auf Thema: C# Dictionary<int, datetime>

Name
Thema
Boardcode
Beitrag
größer /  kleiner
Bitte Code eingeben

Themenverlauf: C# Dictionary<int, datetime>

Max. Anzeige der letzten 5 Beiträge - (Letzter Beitrag zuerst)
4 Jahre 11 Monate her #3524

Jonny132

Jonny132s Avatar

Hi,

sorry ich versteh nicht was du meinst.
Ehrlich gesagt weiss ich nichtmal wo das Problem jetzt liegt.
XML schreiben? XML lesen? Prüfen ob ein Wert eingetragen werden darf?

Versuch doch mal eins nach dem anderen zu machen.
1. Schritt - Dictionary als XML im gewünschten Format speichern
2. Schritt - XML in ein Dictionary einlesen
3. Schritt - Überprüfen ob ein neuer Wert überhaupt eingetragen werden darf
4 Jahre 11 Monate her #3523

xml-Aufbau

s Avatar

Hallo,

ich habe mal meine XML-Datei so aufgebaut, wie du es gesagt hast. Allerdings habe ich jetzt ein anderes Problem.
....
                    pwriter.WriteStartElement("eanpool");
 
                    pwriter.WriteStartElement("eans");
                    pwriter.WriteAttributeString("ean", "111");
                    pwriter.WriteAttributeString("datum", _st.label6.Text.ToString());
                    pwriter.WriteEndElement(); // Close EANs
 
                    pwriter.WriteStartElement("eans");
                    pwriter.WriteAttributeString("ean", "222");
                    pwriter.WriteAttributeString("datum", _st.label6.Text.ToString());
                    pwriter.WriteEndElement(); // Close EANs

_st.label.Text.ToString() ist das Label, wo mein Enddatum steht. Wie kann ich es jetzt so machen, dass nur 111 beschrieben wird und die restlichen nicht. Und wenn 111 beim nächsten mal belegt ist, dann erst auf die 222 usw usw...
Irgendwie komme ich nicht zu meinem Ziel :S

Wäre dankbar für alle Tipps...
4 Jahre 11 Monate her #3501

Jonny132

Jonny132s Avatar

Hi,

so werden XML's nicht aufgebaut siehe wiki.selfhtml.org/wiki/XML/Regeln/Baumstruktur

Eine 'richtige' XML würde eher so aussehen:
<eanpool>
  <ean wert="1111" Datum="23.07.2015"></ean>
  <ean wert="4356" Datum="25.07.2015"></ean>
  <ean wert="1324" Datum="27.07.2015"></ean>
  <ean wert="1165" Datum="29.07.2015"></ean>
</eanpool>

Wenn du eine solche Struktur hast, kannst du einfach durch die Knoten und dessen Attribute iterieren.
4 Jahre 11 Monate her #3500

Anonym

s Avatar

Hi Jonny22,
erst ein mal danke, dass du mir das erklärt hast.

Ich habe mittlerweile eine 2. XML angelegt und da habe ich nun alle INTs, die ich habe eingetragen. So ich lese die erste INT aus und kann es auch in meine 1. XML reinschreiben.

Aber ich bin so verzweifelt, dass ich einfach nicht mehr weiss, wie ich das mache...also die INTs werden EANs sein.
...
List<string> used_ean_list = new List<string>();
...
 private string ean()
        {
            string ean = "";
            string ean_in_use = "";
            int v = 1;
            try
            {
                XmlDocument xml = new XmlDocument();
 
                xml.XmlResolver = null;
 
                xml.Load(@"C:\ean_pool.xml");
 
                foreach (String xn in used_ean_list)
                {
                    ean_in_use = xn;
 
                    XmlNodeList ean_node_list = xml.SelectNodes("/eanpool");
                    foreach (XmlNode ean_Node in ean_node_list)
                    {
                        ean = ean_Node["ean" + v].InnerText;
                        if (string.Equals(ean, ean_in_use))
                        {
                            return ean;
                        }
                        else
                        {
                            v++;
                        }
                    }
 
                }
            }
            catch (ArgumentNullException e)
            {
                MessageBox.Show("PROBLEM: " + e);
            }
            catch (Exception e)
            {
                MessageBox.Show("PROBLEM Exception: " + e);
            }
 
            Console.WriteLine("RETURN VALUE:" + ean);
            return ean;
        }
 
xmlriter...
 writer.WriteElementString("cr", ean());
<eanpool>
    <ean1>1111</ean1>
    <ean2>2222</ean2>
    <ean3>3333</ean3>
    <ean4>4444</ean4>
    <ean5>5555</ean5>
    <ean6>6666</ean6>
    <ean7>7777</ean7>
</eanpool>

ean1 wird in meine XML geschrieben aber beim nächsten speichern wird das 2. nicht mehr eingetragen. Also es bleibt bei ean1.
Und ich möchte das dann, wie du es gesagt hast, mit Enddatum pairen.
Aber ich habe das Gefühl, dass ich einfach zu "blöd" dafür bin :-)
Ich wäre dir so dankbar, wenn du mir in diesem Fall weiterhelfen könntest.
4 Jahre 11 Monate her #3499

Jonny132

Jonny132s Avatar

Hallo,

ein Dictionary besteht immer aus einem KeyValuePair. Das heißt du kannst nie zwei mal den gleichen Wert als Key eingeben. Du musst also eine andere Struktur nehmen um das Abbilden zu können (evtl. eine eigene Klasse).

Die Abfrage ob ein Wert eingegeben werden darf ist relativ einfach:
private bool CanInsert(int value)
{
  if(listOrDictionary.Where(i=>i.Value==value &&
                            i.Date>=DateTime.Now).Count > 0)
  {
    return false;
  }
  return true;
}
Ladezeit der Seite: 0.216 Sekunden