Announcement

Collapse
No announcement yet.

Messwerte aus Datei auslesen

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

  • Messwerte aus Datei auslesen

    Hallo zusammen,

    ich habe das Problem, dass ich aus einer Datei in der Text und Zahlen gemischt stehen alle Messwerte herausfiltern sollte die folgende Form haben:

    Entweder steht nichts davor oder - und dann: Ziffer.ZifferZifferZiffer

    Da es aber noch andere zahlen in dieser Datei gibt die aber mehr nachkommastellen oder vorkommastellen besitzen komme ich nicht ganz drauf wie ich das anstellen soll

    Diese Messdaten sollen hinterher in einem Textdokument in einer bestimmten Form aufgegeben werden aber dass ist im moment nicht so wichtig wie die aussieht hauptsache ich bekomme die richtigen messwerte heraus.

    Im groben sehen diese Dateien meistens so aus:
    (die fett gedruckten werte brauche ich)


    0.000000 20.000000 40.000000 60.000000 80.000000
    200.000000 220.000000 240.000000 260.000000 280.000000
    400.000000 420.000000 440.000000 460.000000 480.000000
    600.000000 620.000000 640.000000 660.000000 680.000000
    800.000000 820.000000 840.000000 860.000000 880.000000
    1000.000000 1020.000000 1040.000000 1060.000000 1080.000000
    1200.000000 1220.000000 1240.000000 1260.000000 1280.000000
    Flags: 0 0 2 1
    USER-TEXT::
    Name:
    Kommentar:

    Run-count:2
    DEVIATIONS::
    1 1 0.000
    1 3 -1.600
    1 5 -2.400
    1 7 -3.500
    1 9 -3.700
    1 11 -3.300
    1 13 -4.300
    1 15 -5.300
    1 17 -5.200
    1 19 -5.200
    1 21 -4.400
    1 23 -3.400
    1 25 -3.700
    1 27 -4.000
    1 29 -3.100
    1 31 -1.600
    1 33 -0.500
    1 35 0.100
    1 37 0.000
    1 39 -0.100
    1 41 -1.200
    1 43 -1.800
    1 45 -2.200
    1 47 -2.900
    1 49 -2.500
    1 51 -2.800
    1 53 -2.900
    1 55 -3.300
    1 57 -4.700
    1 59 -6.000
    1 61 -8.600
    1 63 -10.400
    1 65 -11.600
    2 66 -12.300
    2 64 -10.000
    2 62 -8.800
    2 60 -6.400
    2 58 -4.400
    2 56 -3.200
    2 54 -1.900
    2 52 -1.600


    Air : 25.813770 25.905270 0
    Air : 30.307770 30.310450
    Ma2 : -10.000000 -10.000000 0
    Enor : 0.31640048 0.31640015

    Ich hoffe ihr könnt mir weiterhelfen.

    Vielen Dank!
    Gruß
    56K

  • #2
    Textdokument zeilenweise einlesen und dann mittels regulärem Ausdruck

    ".*([+ -]\\d\\.\\d{3}).*"

    p1.jpg


    Deine gewünschten Ziffern sind in Group 1

    http://www.regexplanet.com/advanced/java/index.html

    http://fiddle.re/e9aaf6



    https://msdn.microsoft.com/de-de/lib...vs.110%29.aspx
    Zuletzt editiert von Christian Marquardt; 12.07.2015, 06:18.
    Christian

    Comment


    • #3
      Naja oder den Bereich bis "Deviations" wegenehmen und danach aber der ersten Leerzeiche alles weg. Dann die einzelnen Zeilen mit einem Leerzeichen splitten und dann den 3. Wert nehmen. Ich mag RegEx nicht

      Comment


      • #4
        Wie würdest du das denn anstellen? Bin in der Programmierwelt noch nicht so begabt also entschuldigt falls dir das wie ne Anfängerfrage vorkommt

        Comment


        • #5
          [highlight=c#]
          var zeilen = File.ReadAllLines("DeinTextFile.txt");
          var zeilenNachDeviations = zeilen.SkipWhile(x => !x.StartsWith("DEVIATIONS::")).Skip(1); // Schmeiss alle Zeilen bis DEVIATIONS raus und dann noch die Zeile Deviations
          var zeilenDieDuBrauchst = zeilenNachDeviations.TakeWhile(x => !String.IsNullOrEmpty(x.Trim()); // nimm alle Zeilen bis zur ersten Leerzeile
          var werteDieDuHabenWillst = zeilenDieDuBrauchst.Select(x => Convert.ToInt32(x.Split(' ')[2])); // jede Zeile nach Leerzeichen splitten, den zweiten Wert holen und diesen in einen Integer umwandeln
          [/highlight]

          Vielleicht etwas viel LINQ, aber so im Prinzip sollte das tun was Du willst. Ich hab gerade leider kein Visual Studio zur Hand, aber das Prinzip sollte es erklären. Die ganzen LINQ Statements kann ich im Zweifelsfall auch in Schleifen übersetzen
          Zuletzt editiert von fanderlf; 14.07.2015, 10:25.

          Comment


          • #6
            Müsste var werteDieDuHabenWillst = zeilen.Select(x => Convert.ToInt32(x.Split(' ')[2])); nicht eher var werteDieDuHabenWillst = zeilenDieDuBrauchst.Select(x => Convert.ToInt32(x.Split(' ')[2])); heißen, oder habe ich einen Denkfehler?

            Gruß Womble

            Comment


            • #7
              Ja da hast Du Recht Womble. Ich werde es oben korrigieren. Ich hab das nur im Browser hingetippt sorry dafuer

              Comment


              • #8
                var werteDieDuHabenWillst = zeilenDieDuBrauchst.Select(x => Convert.ToInt32(x.Split(' ')[2])); // jede Zeile nach Leerzeichen splitten, den zweiten Wert holen und diesen in einen Integer umwandeln
                Es ist zu prüfen, ob die Umwandlung in einen Integer gewünscht ist, den aus 0.000 wird 0, aus -2.200 wird -2.2 usw.
                Christian

                Comment


                • #9
                  naja klar es sah aus wie eine Zahl, also hab ich es mal umgewandelt. Die Umwandlung kann aber auch gerne weggelassen werden

                  Comment


                  • #10
                    OffTopic:
                    Originally posted by Christian Marquardt
                    ... aus -2.200 wird -2.2 usw.
                    Sorry, daß ich für mich mal nachfrage, aber -2.2 wäre doch kein Integer?!
                    PHP rocks!
                    Eine Initiative der PHP Community

                    Comment


                    • #11
                      Originally posted by Arne Drews View Post
                      OffTopic:
                      Sorry, daß ich für mich mal nachfrage, aber -2.2 wäre doch kein Integer?!
                      Ja da hast Du vermutlich recht wie gesagt ich habe den Code im Browser einfach runtergetippt. Aber ich glaube die Anpassung bekommt jeder hoffentlich selbst hin.

                      Comment


                      • #12
                        Jo, ist klar, war aber nicht direkt auf Dich bezogen. Ich fragte nur nach, weil Christian sozusagen meinte, daß ein Convert von -2.2000 zu Int -2.2 ergibt. Wollte nur nachfragen, ob ich da ein Datentyp-Basiswissen-Defizit habe...
                        PHP rocks!
                        Eine Initiative der PHP Community

                        Comment


                        • #13
                          Richtg wäre -2.2000 ergibt dann -2
                          Dem TE kam es ja auf die Formatierung an. Die geht verloren. Bei der Nutzung eines regl. Ausdruckes bliebe diese erhalten
                          Christian

                          Comment


                          • #14
                            Naja wenn er das nicht als Zahl haben moechte kann er auch einfach das Convert.To... weglassen Dann hat er genau den String der auch dort steht.

                            Bei RegEx haette ich tatsaechlich Angst dass ich da irgendwelchen zusaetzlichen Krempel erwische den ich nicht haben will. RegEx sind natuerlich auch eine Loesung. Ich mag sie nur nicht besonders

                            Comment


                            • #15
                              Bei RegEx haette ich tatsaechlich Angst dass ich da irgendwelchen zusaetzlichen Krempel erwische den ich nicht haben will.
                              Bei ausreichend Kenntnis über RegEx, passiert das in den wenigsten Fällen...
                              PHP rocks!
                              Eine Initiative der PHP Community

                              Comment

                              Working...
                              X