Teile von Char Array auslesen



  • Hallo zusammen..

    Ich hab ein kleines Problem, welches mich schon den ganzen Morgen beschäftigt. Leider werde ich aus anderen Beiträgen einfach nicht schlau..

    Also:
    ich hab ein char array

    char RecDataArray[80]={1};
    

    Dies wird später durch eine Funktion mit Folgendem Inhalt gefüllt:

    MEAS1?
    7.15E+00
    =>

    Nun soll nur der Mittlere Teil, also nach dem "?" und vor dem "=>" in ein Text File geschrieben werden.

    Wie lese ich nur den mittleren Teil aus (z.B in ein neues char Array oder String schreiben)?

    Grüsse


  • Mod

    http://www.cplusplus.com/reference/algorithm/find/
    http://www.cplusplus.com/reference/algorithm/copy/

    edit: Sind da auch noch Zeilentrennzeichen zwischen? Falls ja, kannst du das auch mit getline extrahieren.



  • SeppJ schrieb:

    Sind da auch noch Zeilentrennzeichen zwischen? Falls ja, kannst du das auch mit getline extrahieren.

    ja, vor und nach dem gewünschten Teil befindet sich ein '\n'.

    Die MSDN sagt mir:
    int GetLine( int nIndex, LPTSTR lpszBuffer ) const;

    Wenn Ich 3 Zeilen habe und ich die mittlere kopieren will, muss ich dan für nIndex 1 wählen?

    Ich wäre froh wen mir jemand ein kleines Beispiel machen könnte, oder ein Code Snippet von einem eigenen Programm zeigen könnte.

    Danke


  • Mod

    TTS schrieb:

    Ich wäre froh wen mir jemand ein kleines Beispiel machen könnte, oder ein Code Snippet von einem eigenen Programm zeigen könnte.

    Sag doch gleich, dass du zu faul bist um es selbst zu versuchen. Aber die fünf Zeilen schmerzen nicht:

    stringstream parser;
    parser.write(RecDataArray,80);  // Stream mit deinen Daten füllen
    string line;
    getline(parser, line);   // line enthält nun die erste Zeile
    getline(parser, line);   // line enthält nun die zweite Zeile
    

    Ungetestet.



  • SeppJ schrieb:

    Sag doch gleich, dass du zu faul bist um es selbst zu versuchen. Aber die fünf Zeilen schmerzen nicht:
    Ungetestet.

    Ich habs versucht.. jedoch komplet anders als du und es hat nicht funktionert..

    Habs so versucht:

    int GetLine( int nIndex, LPTSTR lpszBuffer ) const;
    

    Auf jeden Fall Funktioniert es jetzt 😃

    Danke



  • Nun bin ich schon beim nächsten Problem angelangt:

    Das Programm liesst über den Com Port Messwerte eines messgerätes aus und schreibt sie in eine Datei, die einen eindeutigen Namen hat mit Datum, und Uhrzeit.

    Jedoch liesst es einen Messwert aus, schreibt ihn in das File, liesst den nächsten Wert aus und stürzt ab. Ich vermute es liegt daran, das die Angabe, wo er er es hinschreiben soll sich bei jedem Durchgang erneuert. Und somit statt es ins alte File zu schreiben stürzt es ab.

    Kann es sein, dass es daran liegt das der Filename nicht Static ist?

    //Time Stamp File Name
    	time_t timeStamp;
    	tm *nun;
    	timeStamp = time(0);
    	nun = localtime(&timeStamp);
    	char chTime[21]; 
    	sprintf(chTime,"%02d_%02d_%02d_%02dh_%02dm_%02ds", ((long)nun->tm_year)+1900, ((long)nun->tm_mon)+1, (long)nun->tm_mday, (long)nun->tm_hour, (long)nun->tm_min, (long)nun->tm_sec);
    
    		//Filename zusammensetzen
    	char file[40];
    	strcpy(file, "log_");
    	strcat(file, chTime);
    	strcat(file, ".CSV");
    
    		//erstellt ein Textfile mit dem Namen log_<date,time>.csv
    	ofstream outputFile( fileName, ios::app);
    
    		//Filename Ausgeben
    	cout << "Output File: " << fileName << endl;
    
    	while(!kbhit())
    	{
    		double DCVoltage;
    		flukeReader.GetDCVoltage(&DCVoltage, Range, outputFile);
    	}
    


  • Ach ja, der Filename wird im Main definiert, und dann an die Funktion GetDCVoltage() übergeben. Diese Funktion wird in einer Schleife immer wieder aufgerufen.


  • Mod

    😮 Wie wäre es mit Benutzung der C++ Standardbibliothek? sprintf & Co schreit ja geradezu nach segmentation fault, wenn man nicht genau weiß was man da tut (und du weißt es nicht, sonst hättest du gleich C++-Mittel oder wenigstens strftime benutzt).

    Ansonsten wird der eigentliche Fehler wohl eher in GetDCVoltage liegen...


Anmelden zum Antworten