Hallo Leute,
ich habe folgendes Problem: Ich habe lese in der main eine Datei zeilenweise aus.
Aus den extrahierten Variablen(string und int) möchte ich mir in der Funktion "Createfilename" einen Dateinamen zusammensetzen.
Leider werden mir die String-werte(prozessname und zifferncode) zwar in die Funktion übergeben aber nicht an die Variable dateinamevar angehängt.
Ich hatte selbiges schon in char-Feldern umgesetzt, was wunderbar funktionierte bis gestern. Dann hab ich es auf String umgemünzt, funkioniert leider auch nicht.
Hier der Code:
Ich hoffe ihr könnt mir helfen. Ich verzweifel da schon 1,5 Tage dran.
Viele Grüße
Guddy
ich habe folgendes Problem: Ich habe lese in der main eine Datei zeilenweise aus.
Aus den extrahierten Variablen(string und int) möchte ich mir in der Funktion "Createfilename" einen Dateinamen zusammensetzen.
Leider werden mir die String-werte(prozessname und zifferncode) zwar in die Funktion übergeben aber nicht an die Variable dateinamevar angehängt.
Ich hatte selbiges schon in char-Feldern umgesetzt, was wunderbar funktionierte bis gestern. Dann hab ich es auf String umgemünzt, funkioniert leider auch nicht.
Hier der Code:
Code:
// sonstige Headerdateien
#include <stdio.h>
#include <iostream>
#include<fstream>
#include<iomanip>
#include<cstring>
#include<math.h>
#include<sstream>
#include<string>
#include <vector>
#include <limits>
#include <time.h>
#ifdef __unix__ //Header für Auslesen der Dateizeit, Unterscheidet Unix und Windows Dateisystem
#include <sys/stat.h>
#include <sys/types.h>
#else
#include <sys\stat.h>
#endif
#define cout STD_COUT //da iostream hier nicht eingefuegt wurde.
#define endl STD_ENDL //an anderer Stelle wird das zu std::cout geaendert
//Funktionsprototypen
void createfilename (std::string& dateinamevar, std::string prozessname, std::string zifferncode, int gatyp, int genometyp, int testfkttyp); //char* ist Zeigervariable,
int main(){
// \0 = leerer String
char vardat[30]="Variableninput.dat"; //enthält Variablengrenzen
//Ergebnisdatei
cout << "\n\nEinlesen der Parameter\n\n\n";
cout << "*************************\n";
//Einlesen der Variablen aus Datei vardat
std::string dummy, val[6]; // dummy liest String bis : ein, val[] ist stringarray für die Werte, müssen aber noch gecastet werden
std::string prozess; //Name des Prozesses
std::string zifferncode; //Zifferncodierung oder Datum
int gatyp; //zur Wahl des GA-Typs
int genometyp; //zur Wahl des Genome-Typs
int testfkttyp; //zur Wahk der Testfkt
int anzdurchlaeufe; //Anzahl der Durchläufe
std::ifstream in(vardat); // neuen Lese-Stream aus Datei vardat erzeugen
if( !in.is_open() ) //Fehlerprüfung ob Datei geöffnet werden kann
{
std::cerr << "Fehler beim Oeffnen der Datei " << vardat << "\n";
return 1;
}
//1. Zeile auslesen
std::getline(in, dummy, ':'); // Einlesen bis :
in.ignore(); // Leerzeichen ignorieren
std::getline(in, val[0]); // Einlesen bis Zeilenende
prozess = val[0];
//2.Zeile auslesen
std::getline(in, dummy, ':');
in.ignore();
std::getline(in, val[1]);
zifferncode = val[1];
//3.Zeile auslesen
std::getline(in, dummy, ':');
in.ignore();
std::getline(in, val[2]);
std::istringstream invar(val[2]);
invar >> gatyp;
//4.Zeile auslesen
std::getline(in, dummy, ':');
in.ignore();
std::getline(in, val[3]);
invar.clear();
invar.str(val[3]);
invar >> genometyp;
//5.Zeile auslesen
std::getline(in, dummy, ':');
in.ignore();
std::getline(in, val[4]);
invar.clear();
invar.str(val[4]);
invar >> testfkttyp;
//6. Zeile auslesen
std::getline(in, dummy, ':');
in.ignore();
std::getline(in, val[5]);
invar.clear();
invar.str(val[5]);
invar >> anzdurchlaeufe;
//Prüfung Ausgabe der eingelesenen Werte auf Screen
cout << "prozess: " << prozess << "\n";
cout << "zifferncode: " << zifferncode << "\n";
cout << "gatyp: " << gatyp << "\n";
cout << "genometyp: " << genometyp << "\n";
cout << "testfkttyp: " << testfkttyp << "\n";
cout << "anzdurchlaeufe: " << anzdurchlaeufe << "\n";
std::string dateierg;
// Namen der Dateien aus Zeichenkette zusammenbauen
createfilename(dateierg, prozess, zifferncode, gatyp, genometyp, testfkttyp); //generiert ersten Teil des Dateinamens
dateierg += "_Erg.dat"; //generiert Endung
cout << "\n" << dateierg << "\n";
}
void createfilename (std::string& dateinamevar, std::string prozessname, std::string zifferncode, int gatyp, int genometyp, int testfkttyp){
//fügt dateinamevar-string die übergebenen strings aus Variableninput an
cout << prozessname;
dateinamevar += prozessname;
dateinamevar+= zifferncode;
switch(gatyp){
case 1: dateinamevar += "Simp"; break;
case 2: dateinamevar += "Stea"; break;
case 3: dateinamevar += "Inc"; break;
}
switch(genometyp){
case 1: dateinamevar += "B2D"; break;
case 2: dateinamevar += "Real"; break;
}
switch(testfkttyp){
case 1: dateinamevar += "TF1"; break;
case 2: dateinamevar += "TF2"; break;
case 3: dateinamevar += "ZF"; break;
}
}
Ich hoffe ihr könnt mir helfen. Ich verzweifel da schon 1,5 Tage dran.
Viele Grüße
Guddy