Announcement

Collapse
No announcement yet.

Newbie braucht hilfe mit Arrays

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Newbie braucht hilfe mit Arrays

    Hi Forum,
    ich bin ziemlich neu mit c# und habe folgendes Problem:

    Ich bastel gerade ein Tool, was Infos aus einem .csv file ausließt, die Daten in Arrays speichert und anschließend in Graph-Form bringt (ich benutze dazu ZedGraph). Mein bisheriger Lösungsansatz bleibt an der Stelle stecken, wo die Daten aus dem csv file in Arrays gespeichert werden. Mein Code:
    Code:
    public int[] h, m, s; // Die Arrays, in die gespeichert wird
           
     public void StoreData(int Hour, int Minute, int Second, int nr, int cnt, int Year, int Month, int Day) // cnt sind die Summer der gelesenen Felder, nr die Nummer des Feldes und auch der Array Index
            {
                //Arrays werden initialisiert
                int[] h = new int[cnt + 1];
                int[] m = new int[cnt + 1];
                int[] s = new int[cnt + 1];
    
               // Wenn alle Felder bis auf eins in Arrays gespeichert wurden
                if (nr == cnt)
                {
                    this.h[nr] = Hour;
                    this.m[nr] = Minute;
                    this.s[nr] = Second;
    
                    AddList(cnt, Year, Month, Day, h, m, s); // Meine ZedGraph Methode, wird mit Arrays h, m, s gecallt
                }
    //Normalfall            
    else if (nr < cnt)
                {
                    this.h[nr] = Hour;
                    this.m[nr] = Minute;
                    this.s[nr] = Second;
                }
    
            }
    soweit so gut, nun stelle ich aber beim debuggen fest, das die Arrays bis auf einen Index immer Leer sind, dem index nr ist also null zugewiesen, was nicht sein sollte. Könnt ihr mir weiterhelfen, ich stehe gerade etwas aufm Schlauch!

    Vielen Dank,
    s0ul

  • #2
    Bitte keine Arrays verwenden sondern generische Listen. Also List<T>

    Comment


    • #3
      mhh, danke schonmal, ich habe bisher noch nie mit Listen gearbeitet, könntest du mir ein kleines Beispiel geben? bzw. warum keine Arrays?

      Danke,
      s0ul
      Zuletzt editiert von s0ul; 21.09.2010, 12:24.

      Comment


      • #4
        In deiner StoreData Methode wird bei jedem Aufruf 3 neue Arrays erzeugt wo du dann an einer Stelle auch Daten hinein füllst. Wenn du nicht noch woanders Code zum füllen des Arrays hast wird also immer nur an einer Stelle des Arrays auch Daten vorhanden sein.

        Und hier schließt sich der Kreis. Du willst vermutlich die bereits vorhanden h,m,s Arrays nur um jeweils ein Arrayelement erweitern. Dazu müsstest du ein neues größeres Array anlegen und alle schon vorhanden Werte aus dem alten Array ins neue kopieren und dann denn einen weiteren Wert anhängen. Diese Logik entfällt bei List<T> bzw. wird dir in den List<T> Internas abgenommen.

        Wie List<T> funktioniert steht in de Hilfe.

        Comment


        • #5
          Für ein Datum gibts erstmal das DateTime Objekt Eine Liste von DateTime Objekten sieht so aus:

          [highlight=c#]
          var dates = new List<DateTime>();

          dates.Add(new DateTime(year,month,day));
          dates.Add(new DateTime(year + 1,month,day));
          dates.Add(new DateTime(year + 2,month,day));
          [/highlight]

          so in etwas z.B.

          Comment


          • #6
            probiere das gerade mal aus, ich kann quasi innerhalb meiner StoreDate Methode die Liste initieren und füllen, ohne das Daten abhanden kommen und ohne, das ich die liste clonen muss?

            schonmal vielen dank für die schnelle und kompetente Hilfe!
            s0ul

            Comment


            • #7
              Ja. Erzeugen der List aber nicht in der Methode so wie in deiner Array Version sondern davor.

              Comment


              • #8
                okay danke, habs soweit begriffen!
                ihr wart mir eine große hilfe!
                danke,
                s0ul

                //Edit: Sry für den Doppelpost!
                Zuletzt editiert von s0ul; 21.09.2010, 13:46.

                Comment


                • #9
                  Hi,
                  Hab weiterhin Probleme mit dem speichern:
                  Mein Code:
                  Code:
                          List<int> h = new List<int>();
                          List<int> m = new List<int>();
                          List<int> s = new List<int>();
                          
                          public void AddData(int Hour, int Minute, int Second, int nr, int cnt, int Year, int Month, int Day)
                          {
                              
                              if (nr == cnt)
                              {
                                  h.Add(Hour);
                                  m.Add(Minute);
                                  s.Add(Second);
                                  //AddList(cnt, Year, Month, Day, h, m, s);
                  
                              }
                              else if (nr < cnt)
                              {
                                  h.Add(Hour);
                                  m.Add(Minute);
                                  s.Add(Second);
                                  Debug.WriteLine("## h.Count = " + h.Count + " m.Count = " + m.Count + " s.Count = " + s.Count);
                              }
                  
                          }
                  die Listen-Kapzität wird davor 1-mal auf cnt gesetzt; Egal, wieviel ich Add(e) Count bleibt immer gleich und nur der erste Index [0] enthält Daten, danach ist es ->(ArgumentOutOfRangeException);
                  Sry für meine Begriffsstutzigkeit!
                  s0ul

                  // Edit: Fehler gefunden, ich habe in der Methode vor AddData() die Klasse neu initiert....
                  Zuletzt editiert von s0ul; 21.09.2010, 14:21. Reason: Eigene Dummheit...

                  Comment


                  • #10
                    Warum speicherst Du eigentlich Minuten, Stunden und Sekunden irgendwie in separaten Listen? Das wirkt irgendwie etwas seltsam

                    Comment


                    • #11
                      in der Methode, die ich calle, summiere ich die gelesenen Felder (Log-Events) nach einem userdefinierten Zeitintervall (also z.b. im 5-Minutentakt). Klar, kann man auch im DateTimeFormat machen, ich vergleiche aber erst Stunden, Minuten und Sekunden seperat und fasse sie dann in die ZedGraph XDate Klasse zusammen (sowas ähnliches wie DateTime).

                      Comment


                      • #12
                        Hab grad gelesen dass XDate eine eingebaute Konvertierung nach DateTime hat Also ich würd nicht mit solchen Arrays oder Listen rummachen, wenns so schön einfach geht

                        http://zedgraph.org/wiki/index.php?t...Date_struct%3F

                        Comment


                        • #13
                          hey cool danke fanderlf!
                          ist wirklich einfacher, aber jetzt kann ich wenigstens mit Listen umgehen .
                          danke für die Mühe,
                          bis bald,
                          s0ul

                          Comment


                          • #14
                            gern gern

                            Comment

                            Working...
                            X