Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Schleife im Programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.09.2005, 11:40 Uhr
~Realmaster
Gast


Hallo. Hab über das Problem schon mal geschrieben, aber hab es noch nicht hinbekommen.
Also hab hier mal das kleine Programm geschrieben. Es soll Daten aus einer ausgangsdatei herauskopieren und in eine neue schreiben. Das funktioniert allerdings nur wenn die Ausgangsdatei keine Zeilen enthält die keine für mich wichtigen Datenzeilen enthält.
Also ich hab eine schleife erstellt die nur dann herauskopieren soll, wenn vor dem ersten Komma einer jeden Zeile ein X,Y,Z steht.
Hab das Programm getestet und festgestellt, das es nur so lange richtig funktioniert, bis der Fall eintritt das das Zeichen nicht X,Y,Z ist.
Kann mir mal jemand helfen. Oder sagen was ich falsch mache??

C++:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
#include "math.h"
#include "conio.h"

using namespace std;


// meine eigene Vektorstruktur
struct vektor
{
    double x_ist;  
    double y_ist;  
    double z_ist;
    double x_soll;
    double y_soll;
    double z_soll;
};

// Kopiert eine Zahl aus einem String
double zahl_kopieren(fstream &x_ist, fstream &x_soll, string was)
{
    // Zeilenstring
    string zeile;
    string temp;
        
    if (was=="ist")
        {
            // hole dir eine Zeile
            getline(x_ist, zeile);    
        
            // nehme die Zeile, suche nach dem ersten Komma und merke dir die Stelle
            int pos1 = zeile.find(',', 0);
            
            // nehme die Zeile, suche nach dem zweiten Komma und merke dir die Stelle
            int pos2 = zeile.find(',', pos1);

            // wenn der Buchstabe vor dem Komma ein X,Y oder Z ist dann kopiere
            // die Zahl zwischen den beiden Kommas raus und wandle sie in ein double um
        
            if((zeile[pos1-1]=='X') || (zeile[pos1-1]=='Y') || (zeile[pos1-1]=='Z'))
                return atof(zeile.substr(pos1+1,pos2).c_str());    
            else return 0;
            
            
        }
    else if (was=="soll")
        {
            // hole dir eine Zeile
            getline(x_soll, zeile);
            int pos_erstes_Komma = zeile.find(',', 0);
        
            // nehme die Zeile, suche nach dem letzten Komma, schneide dort den String ab
            // und merke dir die Stelle
            int pos2 = zeile.rfind(',');
            temp=zeile.substr(0,pos2);
    
            // nehme den abgeschnittenen String, suche nach dem letzten Komma und merke dir die Stelle
            int pos1 = temp.rfind(',');
            
            // wenn der Buchstabe vor dem Komma ein X,Y oder Z ist dann kopiere die Zahl zwischen den beiden Kommas raus und wandle sie in ein double um
            
            if ((zeile[pos_erstes_Komma-1]=='X') || (zeile[pos_erstes_Komma-1]=='Y') || (zeile[pos_erstes_Komma-1]=='Z'))
                return atof(zeile.substr(pos1+1,pos2).c_str());
            else return 0;
        }
    else return 0;
}
// Hauptprogramm
int main(int argc, char* argv[])
{
    /* -------------------------------------------------------------------- */
    string name = "Teil1";            // Dateiname der Istwertdatei
    string endung = "txt";                        // Dateiendung
    /* -------------------------------------------------------------------- */
    
    // Hilfsvariablen festlegen (werden vom Programm automatisch gefüllt)
    string input = name + "." + endung;
    string output= name + "." + "bmd";            // Dateiname der Zieldatei
    fstream x_ist, x_soll, ausgabe;                // Dateipointer
    int zeilen=0;                                // Anzahl der Zeilen der Tabelle
    
    /* -------------------------------------------------------------------- */
    //             Behandlung der Eingabe-Datei
    /* -------------------------------------------------------------------- */
    
    // mein Datenvektor, Datei darf maximal 1000 Zeilen haben
    vektor *daten = new vektor[1000];    
    
    // Datei zum Lesen öffnen und die IST-Werte einlesen
    x_ist.open(input.c_str(), ios::in);
          
    // Solange wie das Dateiende noch nicht erreicht ist
    zeilen=0;
    while (!x_ist.eof())
    {
        daten[zeilen].x_ist = zahl_kopieren(x_ist, x_soll, "ist");  
        daten[zeilen].y_ist = zahl_kopieren(x_ist, x_soll, "ist");
        daten[zeilen].z_ist = zahl_kopieren(x_ist, x_soll, "ist");

        // zähle die Zeilen
        zeilen++;
    }
    
    x_ist.close();

    // Datei zum Lesen öffnen und die SOLL-Werte einlesen
    x_soll.open(input.c_str(), ios::in);
          
    // Solange wie das Dateiende noch nicht erreicht ist
    zeilen=0;
    while (!x_soll.eof())
    {
        daten[zeilen].x_soll = zahl_kopieren(x_ist, x_soll, "soll");  
        daten[zeilen].y_soll = zahl_kopieren(x_ist, x_soll, "soll");
        daten[zeilen].z_soll = zahl_kopieren(x_ist, x_soll, "soll");

        // zähle die Zeilen
        zeilen++;
    }
    
    x_soll.close();

    /* -------------------------------------------------------------------- */
    //             Behandlung der Ausgabe-Datei
    /* -------------------------------------------------------------------- */
    
    // neue Zeilen zählen
    int zeilen_neu=0;
    int i=0;

    while (i<zeilen)
    {
        if (daten[i].x_ist!=0.0) zeilen_neu++;
        i++;
    }
    
    // Datei zum Schreiben öffnen
    ausgabe.open(output.c_str(), ios::out);
          
    // Name in die 1. Zeile schreiben
    ausgabe << name << endl;

    // zeilenlänge in die 2. Zeile schreiben
    ausgabe << zeilen_neu << endl;
    
    // schreiben des Tabellenkopfes
    ausgabe << "xist;yist;zist;xsoll;ysoll;zsoll" << endl;

    //Schreibe die Daten in die Ausgabe-Datei
    i=0;
    while (i<zeilen_neu)
    {
        if (daten[i].x_ist!=0.0)
        {
            ausgabe << fixed << setprecision (6) << daten[i].x_ist
                    << fixed << setprecision (6) << "; " << daten[i].y_ist  
                    << fixed << setprecision (6) << "; " << daten[i].z_ist  
                    << fixed << setprecision (6) << "; " << daten[i].x_soll  
                    << fixed << setprecision (6) << "; " << daten[i].y_soll  
                    << fixed << setprecision (6) << "; " << daten[i].z_soll
                    << endl;
        }

        i++;
    }
    
    ausgabe.close();

    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.09.2005, 11:41 Uhr
~Realmaster
Gast


Hier noch die Datei um die es sich handelt

Bearbeitung von Benutzer:

LOC1 AX:X, -1.980000, 0.500000, 0.500000, -1.979293, 0.000707
LOC1 AX:Y, 231.290000, 0.500000, 0.500000, 231.066881, -0.223119
LOC1 AX:Z, 0.000000, 0.500000, 0.500000, 0.000246, 0.000246
LOC1 AX, 8.000000, 0.500000, 0.500000, 8.138001, 0.138001
LOC2 AX:X, -2.300000, 0.500000, 0.500000, -1.731509, 0.568491
LOC2 AX:Y, 245.790000, 0.500000, 0.500000, 244.442840, -1.347160
LOC2 AX:Z, 37.000000, 0.500000, 0.500000, 37.077980, 0.077980
LOC2 AX, 8.000000, 0.500000, 0.500000, 8.006160, 0.006160
LOC3 AX:X, -2.300000, 0.500000, 0.500000, -2.123368, 0.176632
LOC3 AX:Y, 160.790000, 0.500000, 0.500000, 160.541270, -0.248730
LOC3 AX:Z, 37.000000, 0.500000, 0.500000, 37.142861, 0.142861
LOC3 AX, 9.000000, 0.500000, 0.500000, 9.087397, 0.087397
LOC4 AX:X, -1.300000, 0.500000, 0.500000, -1.298096, 0.001904
LOC4 AX:Y, 115.790000, 0.500000, 0.500000, 114.431579, -1.358421
LOC4 AX:Z, 49.500000, 0.500000, 0.500000, 49.459683, -0.040317
LOC4 AX, 8.000000, 0.500000, 0.500000, 8.018002, 0.018002
LOC5 AX:X, -2.300000, 0.500000, 0.500000, -2.143148, 0.156852
LOC5 AX:Y, 70.790000, 0.500000, 0.500000, 70.887431, 0.097431
LOC5 AX:Z, 37.000000, 0.500000, 0.500000, 37.127595, 0.127595
LOC5 AX, 9.000000, 0.500000, 0.500000, 9.089976, 0.089976
LOC6 AX:X, -2.300000, 0.500000, 0.500000, -1.726204, 0.573796
LOC6 AX:Y, -14.210000, 0.500000, 0.500000, -15.549582, -1.339582
LOC6 AX:Z, 37.000000, 0.500000, 0.500000, 36.957934, -0.042066
LOC6 AX, 8.000000, 0.500000, 0.500000, 8.005067, 0.005067
LOC7 AX:X, -1.980000, 0.500000, 0.500000, -1.976415, 0.003585
LOC7 AX:Y, 0.280000, 0.500000, 0.500000, 0.275345, -0.004655
LOC7 AX:Z, 0.000000, 0.500000, 0.500000, 0.018844, 0.018844
LOC7 AX, 8.000000, 0.500000, 0.500000, 8.146701, 0.146701
LOC8 AX:X, 20.860000, 0.500000, 0.500000, 22.078804, 1.218804
LOC8 AX:Y, 61.820000, 0.500000, 0.500000, 60.973897, -0.846103
LOC8 AX:Z, 59.660000, 0.500000, 0.500000, 58.946549, -0.713451
LOC8 AX, 16.000000, 0.500000, 0.500000, 16.075255, 0.075255
LOC8 AX:L, 16.000000, 0.500000, 0.500000, 16.080068, 0.080068
LOC9 AX:X, 20.860000, 0.500000, 0.500000, 21.844478, 0.984478
LOC9 AX:Y, 169.740000, 0.500000, 0.500000, 168.718349, -1.021651
LOC9 AX:Z, 59.640000, 0.500000, 0.500000, 59.490107, -0.149893
LOC9 AX, 16.000000, 0.500000, 0.500000, 16.075669, 0.075669
LOC9 AX:L, 16.000000, 0.500000, 0.500000, 16.291414, 0.291414
LOC10 AX:X, -2.300000, 0.500000, 0.500000, -1.652214, 0.647786
LOC10 AX:Y, -24.270000, 0.500000, 0.500000, -25.356881, -1.086881
LOC10 AX:Z, 38.300000, 0.500000, 0.500000, 38.396874, 0.096874
LOC10 AX:T, 0.000000, 0.500000, 0.500000, 1.091189, 1.091189
LOC11 AX:X, -2.750000, 0.500000, 0.500000, -2.384807, 0.365193
LOC11 AX:Y, -35.400000, 0.500000, 0.500000, -35.900707, -0.500707
LOC11 AX:Z, 25.110000, 0.500000, 0.500000, 25.520901, 0.410901
LOC11 AX:T, 0.000000, 0.500000, 0.500000, 0.607336, 0.607336
LOC12 AX:X, -5.310000, 0.500000, 0.500000, -5.495022, -0.185022
LOC12 AX:Y, -46.770000, 0.500000, 0.500000, -47.490427, -0.720427
LOC12 AX:Z, 5.220000, 0.500000, 0.500000, 5.630085, 0.410085
LOC12 AX:T, 0.000000, 0.500000, 0.500000, 0.849282, 0.849282
LOC13 AX:X, -5.930000, 0.500000, 0.500000, -6.345304, -0.415304
LOC13 AX:Y, -49.210000, 0.500000, 0.500000, -50.127448, -0.917448
LOC13 AX:Z, -4.120000, 0.500000, 0.500000, -4.118730, 0.001270
LOC13 AX:T, 0.000000, 0.500000, 0.500000, 0.990340, 0.990340
LOC14 AX:X, -13.000000, 0.500000, 0.500000, -13.001039, -0.001039
LOC14 AX:Y, -49.210000, 0.500000, 0.500000, -50.141883, -0.931883
LOC14 AX:Z, -8.330000, 0.500000, 0.500000, -8.134073, 0.195927
LOC14 AX:T, 0.000000, 0.500000, 0.500000, 0.939773, 0.939773
LOC15 AX:X, -17.170000, 0.500000, 0.500000, -17.717884, -0.547884
LOC15 AX:Y, -45.510000, 0.500000, 0.500000, -45.536554, -0.026554
LOC15 AX:Z, -9.750000, 0.500000, 0.500000, -10.060916, -0.310916
LOC15 AX:T, 0.000000, 0.500000, 0.500000, 0.553624, 0.553624
LOC16 AX:X, -13.910000, 0.500000, 0.500000, -14.016111, -0.106111
LOC16 AX:Y, -23.130000, 0.500000, 0.500000, -23.211109, -0.081109
LOC16 AX:Z, -18.210000, 0.500000, 0.500000, -18.497474, -0.287474
LOC16 AX:T, 0.000000, 0.500000, 0.500000, 0.107962, 0.107962
LOC17 AX:X, -11.190000, 0.500000, 0.500000, -11.920574, -0.730574
LOC17 AX:Y, 6.190000, 0.500000, 0.500000, 6.268494, 0.078494
LOC17 AX:Z, -21.700000, 0.500000, 0.500000, -22.077586, -0.377586
LOC17 AX:T, 0.000000, 0.500000, 0.500000, 0.730158, 0.730158
LOC18 AX:X, -10.300000, 0.500000, 0.500000, -10.708952, -0.408952
LOC18 AX:Y, 33.240000, 0.500000, 0.500000, 33.403143, 0.163143
LOC18 AX:Z, -13.980000, 0.500000, 0.500000, -14.302927, -0.322927
LOC18 AX:T, 0.000000, 0.500000, 0.500000, 0.408952, 0.408952
LOC19 AX:X, -9.020000, 0.500000, 0.500000, -8.324596, 0.695404
LOC19 AX:Y, 55.690000, 0.500000, 0.500000, 55.501135, -0.188865
LOC19 AX:Z, -0.510000, 0.500000, 0.500000, -0.661226, -0.151226
LOC19 AX:T, 0.000000, 0.500000, 0.500000, -0.702467, -0.702467
LOC20 AX:X, -9.450000, 0.500000, 0.500000, -8.856570, 0.593430
LOC20 AX:Y, 177.110000, 0.500000, 0.500000, 177.148129, 0.038129
LOC20 AX:Z, -0.960000, 0.500000, 0.500000, -1.265547, -0.305547
LOC20 AX:T, 0.000000, 0.500000, 0.500000, -0.580404, -0.580404
LOC21 AX:X, -10.400000, 0.500000, 0.500000, -10.906399, -0.506399
LOC21 AX:Y, 206.270000, 0.500000, 0.500000, 206.077402, -0.192598
LOC21 AX:Z, -17.470000, 0.500000, 0.500000, -17.970568, -0.500568
LOC21 AX:T, 0.000000, 0.500000, 0.500000, 0.505119, 0.505119
LOC22 AX:X, -12.020000, 0.500000, 0.500000, -12.747340, -0.727340
LOC22 AX:Y, 236.690000, 0.500000, 0.500000, 236.662168, -0.027832
LOC22 AX:Z, -21.810000, 0.500000, 0.500000, -22.201858, -0.391858
LOC22 AX:T, 0.000000, 0.500000, 0.500000, 0.731113, 0.731113
LOC23 AX:X, -13.850000, 0.500000, 0.500000, -13.943321, -0.093321
LOC23 AX:Y, 254.190000, 0.500000, 0.500000, 254.278272, 0.088272
LOC23 AX:Z, -18.390000, 0.500000, 0.500000, -18.717870, -0.327870
LOC23 AX:T, 0.000000, 0.500000, 0.500000, 0.096091, 0.096091
LOC24 AX:X, -16.970000, 0.500000, 0.500000, -17.263926, -0.293926
LOC24 AX:Y, 276.490000, 0.500000, 0.500000, 276.583697, 0.093697
LOC24 AX:Z, -9.970000, 0.500000, 0.500000, -10.325244, -0.355244
LOC24 AX:T, 0.000000, 0.500000, 0.500000, 0.297953, 0.297953
LOC25 AX:X, -5.930000, 0.500000, 0.500000, -5.726790, 0.203210
LOC25 AX:Y, 280.790000, 0.500000, 0.500000, 279.529308, -1.260692
LOC25 AX:Z, -2.490000, 0.500000, 0.500000, -2.514508, -0.024508
LOC25 AX:T, 0.000000, 0.500000, 0.500000, -1.272832, -1.272832
LOC26 AX:X, -5.130000, 0.500000, 0.500000, -4.857594, 0.272406
LOC26 AX:Y, 277.630000, 0.500000, 0.500000, 276.698344, -0.931656
LOC26 AX:Z, 6.590000, 0.500000, 0.500000, 6.068997, -0.521003
LOC26 AX:T, 0.000000, 0.500000, 0.500000, -1.100886, -1.100886
LOC27 AX:X, -3.370000, 0.500000, 0.500000, -2.823843, 0.546157
LOC27 AX:Y, 270.460000, 0.500000, 0.500000, 269.592988, -0.867012
LOC27 AX:Z, 20.260000, 0.500000, 0.500000, 19.705403, -0.554597
LOC27 AX:T, 0.000000, 0.500000, 0.500000, -1.106309, -1.106309

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.09.2005, 12:16 Uhr
mirrow



Führer doch ein Debug durch, dann sieht du genau wo dein Programm (code) aussteigt
und warum.

Dieser Post wurde am 14.09.2005 um 12:28 Uhr von mirrow editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.09.2005, 13:09 Uhr
~Realmaster
Gast


Das Programm steigt ja nicht aus. Es macht nur merkwürdige Sachen, also es sortiert die Daten nicht richtig.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.09.2005, 13:42 Uhr
ao

(Operator)



Zitat von ~Realmaster:
Das Programm steigt ja nicht aus. Es macht nur merkwürdige Sachen

Eben. Nimm den Debugger. Der kann das.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.09.2005, 14:19 Uhr
(un)wissender
Niveauwart


Rufe mal delete für deinen vektor auf, am Ende, wenn du ihn nicht mehr brauchst.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: