S
sw33tlull4by
Guest
Hi!
Sprache ist C++.
Das nachfolgende Programm ist zugegebener massen sehr unstruckturiert sollte allerdings auch nicht erweitert werden sondern nur einmal zum Einsatz kommen.
Problem dabei ist nun, getline((std::fstream,std::string);
keine neuen Zweilen erwischt, sondern immer die gleichen nimmt.
Das Curiose dabei ist das es sich genau an die Anzahl der Zeilen haelt,
aber die ausgegebenen Zeilen nicht mit der Aktuellen uebereinstimmen.
Zur illustration koennt ihr das Programm ja mal kompilieren und die angehaengten *.csv datein angeben.
Erst Mappe2.csv dann Mappe1.csv
Es sollten nur die Zeilen welche nicht in beiden Datein vorkommen ausgegeben werden.
mfg
sw33t
Sprache ist C++.
Das nachfolgende Programm ist zugegebener massen sehr unstruckturiert sollte allerdings auch nicht erweitert werden sondern nur einmal zum Einsatz kommen.
Problem dabei ist nun, getline((std::fstream,std::string);
keine neuen Zweilen erwischt, sondern immer die gleichen nimmt.
Das Curiose dabei ist das es sich genau an die Anzahl der Zeilen haelt,
aber die ausgegebenen Zeilen nicht mit der Aktuellen uebereinstimmen.
Code:
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
#include<algorithm>
/*
*Dieses Programm wird sehr einfach und unschoen programmiert werden
*da ich es nicht erweitern und nur einmal brauchen werde
*/
using std::cout;
using std::cin;
using std::endl;
int main(int argc,char**argv)
{
std::string hitlist;
std::string filterfile;
std::string hitline,filterline,backupfilterline,hitkey,filterkey,tmp;
std::stringstream tmp2(std::stringstream::in|std::stringstream::out);
int startposition,foundposition;
bool found;
startposition = foundposition = -1;
cout<<"Bitte Datei mit Hitliste eingeben:"<<endl;
cin>>hitlist;
cout<<endl<<"Bitte zu filternde Datei eingeben:"<<endl;
cin>>filterfile;
std::fstream hit(hitlist.c_str(),std::fstream::in);
std::fstream filter(filterfile.c_str(),std::fstream::in);
filterfile +="result.csv";
std::fstream result(filterfile.c_str(),std::fstream::out);
while(!filter.eof())
{
found = false;
filterline = filterkey = "";
std::getline(filter,filterline);
backupfilterline = filterline + "\n";
foundposition = startposition = -1;
while(true)
{
startposition = foundposition +1;
foundposition = filterline.find(";",startposition);
if(foundposition ==std::string::npos)
break;
else
filterline.replace(foundposition,1," ");
}
tmp2.flush();
tmp2<<filterline;
tmp2>>tmp;
filterkey += tmp;
tmp2>>tmp;
filterkey += tmp;
tmp2>>tmp;
tmp2>>tmp;
tmp2>>tmp;
filterkey += tmp;
while(!hit.eof())
{
hitline = hitkey = "";
std::getline(hit,hitline);
startposition = foundposition = -1;
cout<<"eingelesen:"<<hitline<<endl;
while(true)
{
startposition = foundposition +1;
foundposition = hitline.find(";",startposition);
if(foundposition == std::string::npos)
break;
else
hitline.replace(foundposition,1," ");
}
cout<<"bearbeitet:"<<hitline<<endl;
tmp2.flush();
tmp2<<hitline;
for(int i = 1;i<=3;i++)
{//in dieser Schleife ist der Fehler aber ich weiss nicht wo
tmp2>>tmp;
hitkey = hitkey+tmp;
cout<<tmp<<endl;
}
cout<<hitkey<<"<=>"<<filterkey<<endl;
cin.get();
if(hitkey.compare(filterkey) == 0)
{
cout<<"ich komme hier nicht rein\n";
found = true;
break;
}
}
hit.clear();
hit.seekg(std::fstream::beg);
if(!found)
result<<backupfilterline;
}
hit.close();
filter.close();
result.close();
return 0;
}
Zur illustration koennt ihr das Programm ja mal kompilieren und die angehaengten *.csv datein angeben.
Erst Mappe2.csv dann Mappe1.csv
Es sollten nur die Zeilen welche nicht in beiden Datein vorkommen ausgegeben werden.
mfg
sw33t