Announcement

Collapse
No announcement yet.

Parser c#

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

  • Parser c#

    ich habe eine CSV Datei, die wie folgt aussieht
    5.1.2012;14:15:00;23455
    5.1.2012;14:15:15;28455
    6.1.2012;14:15:00;29455
    6.1.2012;14:15:15;30455
    erste spalte ist Datum ,zweite Uhrzeit und dritte Werte
    ich will das lauslese und speichern z.B
    {datum1
    Uhr1 Uhr2
    Wert1 Wert2}
    diese kann irgendwelche variable sein.
    ich weiss schon wie man in einer datei daten auslesen kann und splitten.
    das Pb bei mir ist das ich lese alle zeile und alle spalte und dadurch speiche ich daten, die ich nicht brauche wie z.B geliche Datum zweimal .
    wie kann ich das geschickt machen
    Danke

  • #2
    Nur die Daten speichern, die du auch speichern willst
    Christian

    Comment


    • #3
      Oder nur das auslesen was Du brauchst....

      [highlight=c#]
      public class MyData
      {
      public String Time { get; set; }
      public String Value { get; set; }
      }

      var lines = File.ReadAllLines("myfile.csv");

      var result = lines
      .Select(line => line.Split(';')) // jede Zeile splitten
      .Select(splitValues => new MyData() { Time = splitValues[1], Value = splitValues[2] }) // Werte aus der Zeile auslesen
      .ToList();

      // Dazu gibts auch eine prozedurale Variante
      var result = new List<MyData>();
      foreach(var line in lines)
      {
      var splitLine = line.Split(';');
      result.Add(new MyData() { Time = splitLine[1], Value = splitLine[2] });
      }
      [/highlight]

      Comment


      • #4
        ich weiss schon wie man in einer datei daten auslesen kann und splitten.
        Ich hane nicht verstanden, was sein Problem ist....
        Christian

        Comment


        • #5
          Ich auch net wirklich

          Comment


          • #6
            das ist sehr einfach. Du nimmst eine Zeile und betrachtet diese als String.
            Falls dieser bereits in der Kontrollliste enthalten ist, verzichtest Du auf die weitere Verarbeitung.

            Code:
            List<string> strList = new List<string>();
            
            
            string myStrValue = zeile_aus_CSV; // z.B. "5.1.2012;14:15:00;23455"
            
            if(!strList.Contains(myStrValue))  
            {
            
            
                        string[] arr = myStrValue.Split(new char[] { '.', ';',':' }, StringSplitOptions.RemoveEmptyEntries);
            
                        DateTime dt = new DateTime(Convert.ToInt32(arr[2]), 
                                                                       Convert.ToInt32(arr[1]),     
                                                                       Convert.ToInt32(arr[0]), 
                                                                       Convert.ToInt32(arr[3]), 
                                                                       Convert.ToInt32(arr[4]), 
                                                                       Convert.ToInt32(arr[5])
                                                                       );
                        long l = Convert.ToInt64(arr[6]);
            
            
            
                 strList.Add(myStrValue);
            }
            Zuletzt editiert von rolfrui; 09.02.2012, 11:12.

            Comment


            • #7
              Danke für die erste Hilfe
              Aber ich möchte das speichern, sodass ich mit Hilfe des Datums Zugriff auf beide Timewert und beide Value
              z.B eine variable, die Name des Datums enthält und die vier andere Wert(2xTime und 2xvalue)
              denn ich möchte ein Graph zeichnen mit Vaiable time in XAxe Und Value in Yaxe .Dh ich muss in der lage sein das datum und die entsprechenden parameter identifizieren. wie du gemacht hast kann man das Datum nicht identifiezieren oder habe ich falsch verstanden.
              Danke nochmal

              Comment


              • #8
                Natürlich kannst Du das Du musst nur noch den String in ein DateTime umwandeln

                [highlight=c#]
                public class MyData
                {
                public DateTime Date { get; set; }
                public String Value { get; set; }
                }

                public static class MyDataReader
                {
                public static IEnumerable<MyData> ReadCsv()
                {
                var lines = File.ReadAllLines("myfile.csv");

                // Die funktionale Variante
                var result = lines
                .Select(line => line.Split(';')) // jede Zeile splitten
                .Select(splitValues => new MyData() { Time = splitValues[1], Value = splitValues[2] }) // Werte aus der Zeile auslesen
                .ToList();

                // Dazu gibts auch eine prozedurale Variante
                var result = new List<MyData>();
                foreach(var line in lines)
                {
                var splitLine = line.Split(';');
                result.Add(new MyData() { Date= ConvertToDateTime(splitLine[1]), Value = splitLine[2] });
                }

                return result;
                }

                public DateTime ConvertToDateTime(string input)
                {
                // Hier den String zerlegen und ein DateTime zurückgeben
                // ...
                }
                }
                [/highlight]

                Comment


                • #9
                  In dein ConvertToDateTime sollten die ersten beiden gesplitteten strings gehen. Datum und Uhrzeit

                  Comment


                  • #10
                    Kommt doch drauf an welchen Teil er wirklich haben will Aber sowas sollte man wirklich selbst anpassen können.

                    Comment


                    • #11
                      ich glaube, dass Sie mich fals verstanden haben
                      so sieht mein code aus

                      public static List<String[]> parseCSV(string path) //Pathname ist bekannt
                      {
                      List<string[]> parsedData = new List<string[]>();
                      try
                      {
                      using (StreamReader readFile = new StreamReader(path))
                      {
                      string line;

                      // Datei nach Zeile lesen undin einem string speichern
                      while ((line = readFile.ReadLine()) != null)
                      {
                      // string[] row;
                      var row = line.Split(';');
                      if (row[0] == "6.1.2012")

                      parsedData.Add(row);//hier liegt mein pb

                      }
                      readFile.Close();
                      }
                      catch (Exception e)
                      {
                      System.Diagnostics.Trace.WriteLine(e.ToString());
                      Console.WriteLine("Wählen einen Tag zwischen X und Y "); ;
                      }

                      return parsedData;
                      }
                      ich bekomme das zurück
                      6.1.2012;14:15:00;29455
                      6.1.2012;14:15:15;30455 aber möchte ich nur
                      14:15:00;29455
                      14:15:15;30455 am besten die Uhrzeit in einem Array und die Value in einem Array. Ich glaube, dass meine Frage ist jetzt besser verständlich.
                      Danke nochmal

                      Comment


                      • #12
                        ich glaube, dass Sie mich fals verstanden haben
                        Bei der Schreibweise ist das kein Wunder.

                        Warum splittest du erst und schreibst aber das komplette Array irgendwo rein?
                        parsedData.Add(row) bekommt das ganze Array und nicht nur deine gewünschten Teile
                        Christian

                        Comment


                        • #13
                          was soll ich machen dann machen?

                          Comment


                          • #14
                            Nur die Teile reinschreiben die du willst
                            parsedData.Add(row[1]+" "+row[2])

                            Siehe Beitrag #2
                            Zuletzt editiert von Christian Marquardt; 09.02.2012, 10:36.
                            Christian

                            Comment


                            • #15
                              Du sollst Deinen Programmcode zum Posten im Forum zwischen zwei tags packen. Das sieht dann so aus:
                              Code:
                              label1.Text = "Hallo Welt!";
                              Dafür gibts über dem Eingabefenster den Button "#".

                              Damit sollten dann auch die üblichen Einrückungen erhalten bleiben.

                              Comment

                              Working...
                              X