Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Programm will nicht!

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
10.04.2006, 11:31 Uhr
EagleFox



Hallo Leute,

ich habe hier ein kleines Programm, was ich leicht modifizieren möchte. Nur bekomme ich das mit meinen wenigen Kenntnissen nicht mehr hin.

Hier ein Teil des Programms und was ich bezwecken möchte. Die "heissen" Stellen sind mit ACHTUNG!!!!!!!!! markiert:



C++:
//---------------------------------------------------------------------------
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include "PQX.h"
using namespace std;
//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
        // Zeiger auf ein PQXFile-Objekt anlegen
        PQXFile *pqx = new PQXFile();

        // Datenstrukturen anlegen
        PQXFileHeader   pfh;
        PQXBlockHeader  pbh;
        PQXData        *data;

        // andere Variable
        FILE *f;
        char buffer[100];
        int i;
        float f1,f2,f3,f4;

        char datei;
        int sf;
        int ppb;



    //Werte eingeben    

        cout << "Dateiname: ";                     //z.B. cu_17.dat
        cin >> datei;
        cout << "Frequenz: ";                       //z.B. 10000
        cin >> sf;                                       //z.B. 2000
        cout << "Punkte pro Spektrum: ";
        cin >> ppb;


ACHTUNTG!!!!!!!!! Das eingeben der Daten klappt schon nicht!!! Drücke ich nach dem Dateinamen ENTER, erscheint "Frequenz: Punkte pro Spektrum: " auf dem Bildschirm. Er überspringt die Eingabe der Frequenz.


C++:
        // PQXFileHeader füllen - Werte aus Header in .dat!
        pfh.SampleFrequency = sf;
        pfh.PointsPerBlock = ppb;
        pfh.StartTime       = 0; // keine Zeitinfo mehr...


        // Neue pqx-Datei zum Schreiben öffnen
        pqx->WriteFile(datei".pqx", &pfh);


ACHTUNG!!!!!!!!! An dieser Stelle möchte ich, das der neue pqx-Dateiname aus dem vorher eingegebenen Dateinamen und der Endung .pqx besteht. Das klappt aber so nicht.


C++:
       // dat-Datei zum Lesen öffnen
        f = fopen(datei, "rt");



ACHTUNG!!!!!!!!! An dieser Stelle soll er die Datei mit dem vorher eingegebenen Dateinamen öffnen. Das klappt aber so wohl auch nicht! ;-( Ich weiss nicht, wie ich die Variable "datei" da vernünftig einbinde.


C++:
        // Speicher belegen
        data = new PQXData[pfh.PointsPerBlock];

        // PQXBlockHeader füllen - alles auf Null
        pbh.TimeStamp = 0;
        for (i = 0; i < 8; i++)
        {
                pbh.Counter[i] = 0;
                pbh.DigitalIN[i] = 0;
        }

        // Lesen: Zunächst Header ignorieren
        do {
                fgets(buffer, 100, f);
                printf(buffer);
        } while (buffer[0] == '#');

        // Jetzt Datenpunkte lesen
        while (!feof(f))
        {
              for (i = 0; i < pfh.PointsPerBlock; i++)
              {
                      sscanf(buffer, "%f %f %f %f\n", &f1, &f2, &f3, &f4);

                      // Umrechnung V - A/D-Werte
                      data[i].Ch[0] = f1 * 3276.8;
                      data[i].Ch[1] = f2 * 3276.8;
                      data[i].Ch[2] = f3 * 3276.8;
                      data[i].Ch[3] = f4 * 3276.8;

                      // Nächste Zeile holen
                      fgets(buffer, 100, f);
              }

              // Zweite Leerzeilen überlesen
              fgets(buffer, 100, f);

              // Erste neue Zeile mit Daten holen für nächsten Durchlauf
              fgets(buffer, 100, f);

              // Daten in pqx-Datei schreiben
              pqx->WriteBlock(&pbh, data);
        }                    

        // alles wieder schließen
        fclose(f);
        delete data;

        return 0;
}
//-----





So, das ist der eine Teil des Programms. Ich hoffe Ihr könnt mir helfen!

Besten Dank im voraus!


Bearbeitung von FloSoft:

CPP-Tags selbst nutzen!!!!


Dieser Post wurde am 10.04.2006 um 11:33 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.04.2006, 11:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
char datei ist ein zeichen!

benutze


C++:

std::string datei;

getline(cin, datei);



bei deinem endungsproblem dann


C++:
(datei+".pqh").c_str()




und dann bei fopen


C++:
fopen(datei.c_str(), ...)


--
class God : public ChuckNorris { };

Dieser Post wurde am 10.04.2006 um 11:36 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.04.2006, 12:16 Uhr
EagleFox



Vielen Dank für die super schnelle Antwort, ich probiere das gleich mal!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.04.2006, 12:25 Uhr
EagleFox



Ich bekomme nun folgende Fehlermeldung:

dat2pqx.cpp:46: error: invalid conversion from `const char*' to `char*'
dat2pqx.cpp:46: error: initializing argument 1 of `void
PQXFile::WriteFile(char*, PQXFileHeader*)'

Zeile 46 ist:


C++:
       pqx->WriteFile((datei+".pqx").c_str(), &pfh);



Soll ich mal zusätzlich die PQX.h posten?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.04.2006, 12:38 Uhr
Pler
Einer von Vielen
(Operator)



Zitat:

dat2pqx.cpp:46: error: invalid conversion from `const char*' to `char*'


Du musst in der Deklaration von WriteFile const char* schreiben. Das solltest du immer machen. Dieses Disskussion hatten wir erst letztens. Hab aber das Thema leider jetzt nicht gefunden.

Den zweiten Fehler kann ich jetzt auch nicht nachvollziehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.04.2006, 12:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hmm dann ist die pqx-klasse da nicht korrekt implementiert, normal sollte so ein pfad const sein...

Dann machs mit der Brechstange und nimm nen const_cast, also so:


C++:
pqx->WriteFile(const_cast<char*>((datei+".pqx").c_str()), &pfh);


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.04.2006, 13:21 Uhr
EagleFox



Genial!

Es läuft!
Vielen tausend Dank!

Ich habe nun beides ausprobiert. In einer zusätzlichen PQX.cpp habe ich die Deklaration von char auf const char geändert! Das hat geklappt.
Aber auch der Tipp von Flosoft hat geklappt!

Ihr seid super!

Dieser Post wurde am 10.04.2006 um 13:28 Uhr von EagleFox editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.04.2006, 14:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja wie gesagt, wenn du die implementation von writefile ändern kannst, mach das, das mit dem const_cast ist nur die allerletzte möglichkeit, wie gesagt, brechstangenmethode.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


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: