Announcement

Collapse
No announcement yet.

Aus Textdatei Werte auslesen und umrechnen

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

  • Aus Textdatei Werte auslesen und umrechnen

    Hallo zusammen,
    ich versuche aus einer Textdatei einige Werte auszulesen und umzurechnen.

    Hier ein kleiner Auszug aus der Textdatei:


    N1 R12=40
    N2 R30=R12/2
    N3 G0 X0 Y-515
    N4 Z=-R30

    es soll ausgelesen werden: "R12" wobei "R" zwischen 1 und 600 liegen kann und
    den zugewiesenen Wert in diesem Fall "40" in Zeile 1.

    In Zeile 2 soll dann "R" "30" und darin das Rechenergebnis R12/2 gespeichert werden.

    Ich habe mir überlegt ein "float R[600]" anzulegen und die R-Parameter mit dem Wert zu speichern Zum bsp: R[12]=40.

    Ich weiss nur nicht so genau wie ich das umsetzen soll.

    Ich bin dankbar für jede Hilfe.

  • #2
    Bevor du eine float benutzen kannst ist ja ersteinmal die Textdatei zu parsen

    - Eine Instanz von TStringList anlegen
    - mit LoadFromFile die Datei laden
    - Alle Zeilen durchgehen und dabei mit Hilfe der Stringverabeitung
    - das R suchen
    - das Gleichheitszeichen suchen
    - Werte ergeben sich dann aus der Position des R+1 bis zum Gleichheitszeichen und
    - dem Gleichtheitszeichen+1 bis zum Ende

    Dann kannst du rechnen
    Christian

    Comment


    • #3
      Hallo Christian,
      ich öffne die Textdatei mit ifstream und kopiere den Text zeilenweise in einen Char Array. Danach geht es so weiter:

      for (ZeichAnz = 0; ZeichAnz < (int)strlen(Zeile);ZeichAnz++)
      {
      if (Zeile[ZeichAnz]=='R')
      {
      while (Zeile[++ZeichAnz] >= '0' && Text[ZeichAnz] <='9')
      { Puffer_1[i++] = Zeile[ZeichAnz];

      Die erste Zeile R12=40 habe ich ausgelesen aber wie mache ich das mit der zweiten Zeile?

      Ich danke dir für deine Hilfe.

      Comment


      • #4
        Empfehle das Vorgehen aus Beitrag 2
        Christian

        Comment


        • #5
          Originally posted by Tommy111 View Post
          ...es soll ausgelesen werden: "R12" wobei "R" zwischen 1 und 600 liegen kann
          Es soll "R###" ausgelesen werden wobei ### zwichen 1 und 600 legen kan.


          In Zeile 2 soll dann "R" "30" und darin das Rechenergebnis R12/2 gespeichert werden
          Unverständlich. Da steht das schon... Also warum sollst du da etwas/dasselbe schreiben? Und weshalb ist R12/2 ein 'Rechenergebnis' ?


          Ich habe mir überlegt ein "float R[600]" anzulegen und die R-Parameter mit dem Wert zu speichern Zum bsp: R[12]=40.
          Whenn du erst erzáhlst was es da zu berechnen gibt...?

          Uebrigens empfhele Ich auch die benutzung eine TStringList.

          Originally posted by Tommy111 View Post
          Hallo Christian,
          ich öffne die Textdatei mit ifstream und kopiere den Text zeilenweise in einen Char Array.
          Bitte lass deine code sehen.


          Die erste Zeile R12=40 habe ich ausgelesen aber wie mache ich das mit der zweiten Zeile?
          Soeben hast du noch gesacht "kopiere den Text zeilenweise". Also... fertig.. ??
          Zuletzt editiert von Christian Marquardt; 26.11.2009, 07:31.

          Comment


          • #6
            @HansG

            Er hat seinen Code gezeigt!
            Christian

            Comment


            • #7
              Originally posted by Christian Marquardt View Post
              @HansG

              Er hat seinen Code gezeigt!
              Zum parsen eine Zeile ja. Aber nicht das einlesen Zeile nach Zeile. Das möchte ich sehen.

              @Tommy111
              Kannst du die ganze Aufgabe hier nicht vorlegen?

              Comment


              • #8
                Zum parsen eine Zeile ja. Aber nicht das einlesen Zeile nach Zeile. Das möchte ich sehen.
                Das ganze ist umständlich und fehleranfällig. Es ist besser hier mit den Möglichkeiten des C++Builders zu arbeiten
                Christian

                Comment


                • #9
                  Originally posted by Christian Marquardt View Post
                  ... Es ist besser hier mit den Möglichkeiten des C++Builders zu arbeiten
                  Dus weist das ich die gleiche Meinung habe.

                  Aber wass wenn die Aufgabe leutet: Lese den Tekst Zeile fuer Zeile ein?

                  Comment


                  • #10
                    Hallo Hans,
                    hier ein ausschnitt:

                    Code:
                    ifstream NC_Programm;
                    NC_Programm.open(OpenDialog1->FileName.c_str(), ios::in);
                    
                     while(NC_Programm.getline(Zeile,256) != NULL)
                         {
                          for (ZeichAnz = 0; ZeichAnz < (int)strlen(Zeile);ZeichAnz++)
                           {
                            switch (Zeile[ZeichAnz])
                             {
                              case 'R' :  
                    
                                 while (Zeile[++ZeichAnz] >= '0' && Zeile[ZeichAnz] <='9')
                                  {
                                   Puffer_1[i++] = Zeile[ZeichAnz];
                                  }
                    
                                 Para = atoi(Puffer_1);  // R.. auslesen
                                 ZeichAnz++;
                    
                                 if (Zeile[ZeichAnz] == '=' ||Zeile[++ZeichAnz] == '=') 
                                  {
                                   //================== R-Parameter Wert einlesen =======
                    	      while ( Zeile[++ZeichAnz] >='+' && Zeile[ZeichAnz] <':' )
                                   {
                    	        Puffer_2[kcnt++] = Text[ZeichAnz];
                    	       }
                    //---------------------- Wert in "float" umwandeln ----------------------------
                                  fx = atof(Puffer_2);
                                 }
                              }
                            }
                           }
                    somit habe ich habe damit ausgelesen:
                    Variable "Para"=12
                    Variable "fx"=40

                    also die erste zeile --> N1 R12=40

                    Mein Problem ist, mit dem code kann ich die zweite Zeile "N2 R30=R12/2"
                    nur teilweise auslesen. Also nur R30--> "Para"=30 . In R30 soll dan das ergebnis R12/2 also in dem Fall 40/2=20 gespeichert werden.
                    Zuletzt editiert von Tommy111; 26.11.2009, 21:10.

                    Comment


                    • #11
                      Also ich tu mir das nicht an; noch nicht mal formatiert

                      Warum einfach, wenn es auch umständlich geht
                      http://www.marquardtnet.info/cecke/q...quicky_58.html
                      Christian

                      Comment


                      • #12
                        Tommy benutze erst mahl den code tags.

                        Jetzt is dein code nicht zu lesen weil es nicht indentiert.

                        Also ist:
                        N1 R12=40
                        N2 R30=R12/2
                        N3 G0 X0 Y-515
                        N4 Z=-R30

                        das was mann zu sehen bekomst when man die datei zum beispiel in notepad oefnet?

                        Du hast nicht reagiert auf meine bemerkung warum du plötzlich auf zeile zwei der tekstdatei schreiben must. Dass finde ich fremd denn auf dieses moment hast du zeile zwei noch gar nicht ausgelesen. Auch hast du meine frage was es da zu berechnen gibt nicht beantwordtet.

                        Comment


                        • #13
                          Ich hab mein code überarbeitet.

                          in zeile zwei soll der wert von R12/2 in R30 gespeichert werden.
                          Der wert von R12=40 also muss in R30=20 stehen.

                          Comment


                          • #14
                            Originally posted by Tommy111 View Post
                            Ich hab mein code überarbeitet.
                            Besser nicht zurück gehen nach ein alten Post und da editieren, weil dass macht die thread unlesbar.

                            in zeile zwei soll der wert von R12/2 in R30 gespeichert werden.
                            Der wert von R12=40 also muss in R30=20 stehen.
                            Aber was ist R30?

                            Ich habe schon etwas gefragt wir "musst du dan gleich in zeile zwei etwas schreiben?" Wenn ja dann seht die Datei danach so aus:

                            N1 R12=40
                            N2 R30=20
                            N3 G0 X0 Y-515
                            N4 Z=-R30

                            Ist dass die Aufgabe?

                            Realisiere dich bitte dass du uns bis jetzt nicht erklaert hast was die code tun soll.

                            Du hast auch meine frage "ob dass dann in notepad auch so aussieht" nicht beantwortet.

                            Comment

                            Working...
                            X