Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Hilfe ich brauche Unterstützung

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 ] > 2 < [ 3 ]
010
11.01.2013, 09:36 Uhr
~f.-th.
Gast


Weisst du warum dir die Aufgabe 1 und die 2 in der Reihenfolge gegeben worden sind?

Das sollte dir die Arbeit erleichtern. Warum greifst du die Vorlage nicht auf?

Verstehst du was wir dir schreiben? Du setzt ja nur jeweils Teile der Tipps um.

Du brauchst da das getline gar nicht, wenn du die Aufgabe begreifst. Und auch die Funktionen des Header string.h brauchst du nicht.

Okay, im Netz gibt es viele solche Beispiele. Aber warum von Mailand nach Rom über Peking fahren?

Denke mal darüber nach

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
12.01.2013, 00:20 Uhr
~f.-th.
Gast


Meine Quelltexte müssen oft noch an die exakte Aufgabenstellung angepasst werden.

Wenn du den ersten Teil deiner Aufgabe erledigt hast, hast du ja die Daten so, das die meisten Compiler diese einfach einlesen können.

Nur die Daten einlesen mit Punkt statt Komma und ohne Vorspann:

C++:
#include <fstream>
#include <iostream>

using namespace std;
//---------------------------------------------------------------------------

int main()
{
    int z = 0;    
    ifstream readdataFile("datapoint.txt");
    if (!readdataFile.is_open())
    {
        cout << "Kein File :-(" << endl;
        return 1;
    }
    while (!readdataFile.fail())
    {
        double winkel, wmod, zeit, ai4, ai5;    // alternativ in struct fassen?
        readdataFile >> winkel >> wmod >> zeit >>  ai4 >> ai5;
        cout.precision( 10 );
        if(!readdataFile.eof())
            cout << "Winkel / °: " << winkel << endl;
        ++z;
    }
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
12.01.2013, 03:02 Uhr
Hans
Library Walker
(Operator)


Hi,

ich hab deine letzte Programmversion mal durch einen PrettyPrinter gejagt, also mit einem Programm bearbeitet, das den Quelltext ein wenig umformatiert um ihn besser lesen zu können. Das Ergebnis sieht so aus:

C++:
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string> // <string.h> ist nicht nötig, da C ohne ++
#include <vector>
#include <cmath>
#include <limits>

using namespace std;
//---------------------------------------------------------------------------

std::istream& skipline( std::istream& in ) // überliest alles bis zum Ende einer Zeile
{
    return in.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
}

int main()
{
    ofstream dateiWrite; /* Objekt der Ergebnis-Datei */
    ofstream dateiSchreib; /* Objekt der Ergebnis-Datei */
    char string[256];
    /* Dateiname eingeben */
    //string dateiname;
    cout << "Eingabe des Dateinamens (mit Dateiendung):" << endl;
    char dateiname[40];
    cin >> dateiname;
    ifstream dateiRead(dateiname);
    /* Eingabeprüfung */
    while (!dateiRead.eof())
        {
            dateiWrite.open("Ziel.txt", ios::out);
            if (!dateiWrite.good())
                {
                    cout << "Konnte Datei zum Schreiben nicht oeffnen." << endl;
                }
            else
                {
                    for( int zl = 0; zl < 7; ++zl )
                        dateiRead >> skipline;
                    /* Bei der Zahlenfolge Komma durch Punkt ersetzen */
                    char z;
                    while ( dateiRead.get(z))
                        {
                            if(z==44)
                                z=46 ;
                            dateiWrite << z;
                        }
                }
        }
    dateiWrite.close();
    dateiRead.close();

    //  Variablen deklarieren
    char Zeile[100];
    char *token;
    int x = 0;
    int y = 0;
    int z = 0;
    fstream File;
    File.open("Ziel.txt",ios::in);
    if(!File)
        {
            cerr << "Datei konnte nicht geöffnet werden" <<endl;
            exit(1);
        }
    while (!File.eof())
        {
            File.getline(Zeile,100);
            ++z;
        }
    File.close();

    double Array[z][7];
    File.open("Ziel.txt",ios::in);
    while (!File.eof())
        {
            File.getline(Zeile,100);
            token = strtok(Zeile," \t");
            x=0;
            while (token)
                {
                    Array[y][x] = atof(token);
                    token = strtok(NULL," \t");
                    ++x;
                }
            ++y;
        }

    double aa;
    double ot;
    ot=100;
    aa=20+ot;
    int i;
    int j;
    for(int j=0; j<z; ++j)
        {
            for(int i=0; i<=6; ++i)
                {
                    if(Array[j][1]>200)
                        {
                            cout << Array[j][3];
                            cout << "\n";
                            cout << Array[j][5];
                            cout << "\n";
                            double temp;
                            temp = Array[j][3];
                            Array[j][3] = Array[j][5];
                            Array[j][5] = temp;
                            cout << Array[j][3];
                            cout << "\n";
                            cout << Array[j][5];
                            cout << "\n";
                        }
                }
        }

    int yy;
    ofstream arrayData("array.txt",ios::app);
    for(yy=0; yy<(z); ++yy)
        {
            arrayData << Array[yy][0] << "      \t"
                << Array[yy][1] << "\t\t"
                << Array[yy][2] << "  \t"
                << Array[yy][3] << "   \t"
                << Array[yy][4] << "    \t"
                << Array[yy][5] << "   \t"
                << Array[yy][6] << endl;
        }
    return 0;
}



Ansonsten hab nur oben noch den Kommentar zu string rein gesetzt.

Hans

---
Edit: Tippfehler verbessert.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 12.01.2013 um 21:23 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
12.01.2013, 18:24 Uhr
denker



Sieht alles sehr gut aus. Dankeschön.
Momentan gibts es noch zwei dinge die ich nicht verstehe:
erstens:


C++:
char dateiname[40];
cin >> dateiname;
ifstream dateiRead(dateiname);


Damit lese ich ja meine Eingabe und lege ein konstantes Feld aus Zeichen an (constant char Array).
Was muss ich vorher tun (bitte 2 bis drei Zeilen code als beispiel), um sowas hinzubekommen:


C++:
ofstream arrayData("Neu" + dateiname,ios::app);



Dass heißt ich will das die Ausgabedatei ein Wort aus den Teilen Neu und dem Namen der Eingabedatei trägt.
Ich weiss dass das bei ios::app nicht geht, also wie kann ich vom constant char Array im Code eine Kopie machen, die Zeichenkette in der Kopie erweitern und dann als Namen für meine Ausgabedatei nehmen?

zweitens:

Wenn in meinem Kopf folgendes steht:


Zitat:

Erstellung: 19.10.2012 13:55:51
Drehzahl: 2493
aufgez.Umdr.: 9
OT n.Synch(°): 329,0000000



Wie kann ich nach der Zeichenkette OT suchen (nur suchen) und in der gleichen Zeile
die Zahl (in dem Fall 329) mit

C++:
atof


oder ähnlichem am besten als

C++:
int  //oder
double


einlesen und einer variablen zuweisen.

Tut mir echt leid, dass ich so unselbstsändig bin, aber ichhab in 3 Jahren fast alles von C und C++ vergessen. (War damals im 1. Semester Pflichtfach)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
12.01.2013, 20:04 Uhr
~f.-th.
Gast


Bei dem Dateinamen versuchst du C und C++ zu mischen.
Gehe entweder den C-Weg bei alten C++ Compilern oder besser den C++ Weg bei neueren C++ Compilern.

Aktuelles C++, wenn C++11 am Compiler da noch nicht funktioniert:

C++:
#include <fstream>
#include <iostream>

int main()
{
    std::string dateiname;
    std::cin >> dateiname;
    dateiname = "new" + dateiname;
    std::ofstream dateiWrite(dateiname.c_str());  // c_str() noch alte C Relikte
    {
        std::cout << "Kein File zum Schreiben :-(" << std::endl;
        return 2;
    }
}    



Wenn du deinen Compiler von C++11 überzeugen kannst:

C++:
    dateiname = "new" + dateiname;
    std::ofstream dateiWrite(dateiname);


Da ist das C++ konsequenter umgesetzt.

Wenn du den alten C-Weg gehen willst, suche den. Da geht nichts mit "new"+ dateiname in C.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
12.01.2013, 20:07 Uhr
~f.-th.
Gast


Hab doch glatt eine Zeile unterschlagen:

C++:
    std::ofstream dateiWrite(dateiname.c_str());
    if (!dateiWrite.is_open())  // die sollte auch mit

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
12.01.2013, 20:22 Uhr
~f.-th.
Gast


Ist der Aufbau des Datei-Kopfs starr?


Zitat:

Erstellung: 19.10.2012 13:55:51 -> Datum + Zeit sind immer im selben Format?
Drehzahl: 2493 -> auch das selbe Format?
aufgez.Umdr.: 9 -> auch das selbe Format?
OT n.Synch(°): 329,0000000 -> auch das selbe Format? Hey, wieso steht da noch das Komma?



Zur ersten Teilaufgabe: Da das Komma immer beim "deutsche" Zahlenformat in der Datei steht, lass die ersten Zeilen nicht aus. Übersetze die komplette Datei Komma zu Punkt. Dann kannst du oder dein Compiler das einfacher lesen.

Dann die ersten 3 Zeilen ignorieren.
4. Zeile: 2 Strings lesen und dann den double Wert und schon hast du 329.00000000


Es gibt noch bessere elegantere Lösungen. Aber ob das dann noch einsteigerfreundlich ist?

MfG F.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
12.01.2013, 21:40 Uhr
~denker
Gast


Danke für die Hilfe mit dr Dateiausgabe, werd das testen und berichten.

nein der kopf ist nicht starr, ansonsten hätte ich das bereits gelöst.

es sind nochnichteinmal immer sieben Zeilen. Aber das mit dem Ausgabedateinamen wird gleich getestet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
12.01.2013, 21:45 Uhr
~denker
Gast


Für


C++:

dateiname = "new" + dateiname



erhalte ich folgende Fehlermeldung:


C++:
[Error] invalid operands of types 'const char [4]' and 'char [40]' to binary 'operator+'

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
12.01.2013, 22:06 Uhr
~denker
Gast


1. Problem gelöst mit

C++:
std::replace(dateiname, dateiname + ::strlen(dateiname), dateiname[0], 'X');



Mir gings ja nur um die generierung eines Dateinamens der Ausgabedatei, welcher dem der Eingabedatei ähnlich ist, ohne, dass man tippen muss.

Ansonsten brauche ich aber noch eine Lösung um char[2]=OT in einer Zeile und finden und die Zahl in dieser Zeile als int oder double zu verarbeiten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ 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: