Werte aus Textdatei auslesen



  • 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.



  • Ich würde es so angehen:

    // Liste anlegen:
     TStringList *AlleZeilen = new TStringList;
    
     // Dateiinhalt in die Liste laden:
     AlleZeilen->LoadFromFile("C\\test\\test.txt");
    
     // Anzahl Zeilen ermitteln:
     int int_Anzahl_Zeilen = AlleZeilen->Count;
    
     // Jetzt kansst du z.B. in der ersten Zeile nach einem Teilstring suchen:
     AlleZeilen->Strings[0].Pos("R12");
    
     // Speicherplatz freigeben:
     delete AlleZeilen;
    


  • Hallo sonic,
    hier ein ausschnitt:

    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 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.



  • Hallo

    Ja, eine solche Auswertung und Berechnung must du schon selber schreiben. Zum Beispiel : Wenn du den Wert nicht gleich in einen Integer umformen kannst oder einem R-Register zuordnen kannst, such in dem Wert nach einem Rechenzeichen. Links und rechts von dem Rechenzeichen stehen nun je ein weiterer Wert, auf den du Schritt 1 anwenden kannst. Forme solange alle Rechnungen in Konkrete Integer und Registerverweise um, bis alle Berechnungen aufgelöst sind. Dann kannst du die Rechnung nachvollziehen. (Die Rekursion brauchst du nur wenn die Berechnung aus mehr als einem Schritt besteht).

    bis bald
    akari


Anmelden zum Antworten