Programm unvollständig und fehlerhaft

Lulu999

Grünschnabel
Hi, ich brauche umbedingt Hilfe bei dem folgenden Programm:
Ziel des Programms soll sein, Zeile für Zeile aus einer CSV Datei zu lesen.
Als nächstes soll eine Monats und Jahreseingabe mit dem Datum der jeweilig gelesenen Zeile verglichen werden und wenn eine Übereinstimmung vorhanden ist, soll die Zeile in eine txt Datei ausgegeben werden.

Das Programm habe ich schon soweit geschrieben, allerdings gibt es wahrscheinlich einige Fehler in der Logik und Syntax des Programms, daher bitte ich Euch mal diesen Hilferuf Euch anzunehmen

schonmal vielen Dank:p

Code:
#include <iostream>                                 
#include <fstream>
#include <string>
#include <stringstream>                             

using namespace std;                                

int main ()                                         
{
  
  string zeile;                                      
  string monat;
   
  ifstream myfile ("Test1.csv");                     
  ofstream newfile ("Zertifikate.csv");             

  int pos;
  

      cout<<"Bitte geben sie ein Datum ein. Bsp: 07.07 (Monat und Jahr)";   
  
      cin>>monat;                                                          
  

  
  if (myfile.is_open())      
  {
    
    while (! myfile.eof() )         /
    
    {
      getline (myfile,zeile);                               
       
        
      
      
      
      string src = zeile;                                   
      
      int strpos = src.find("Name des Antragstellers");                   
      
      string zeile = src.substr(0, strpos);                              
      
      cout << zeile << endl;                                    
      newfile <<zeile<<endl;                                   
     
       ///////////////////////////////////////////////////////// 
        
        
            
      istringstream in(zeile); 
      
      in.ignore(numeric_limits<std::streamsize>::max(), ';'); 
                                                             
      
      string datum;   
      
      getline(newfile, datum, ';');    
      
      
           
      istringstream in(datum);                   
      
      in.ignore (numeric_limits<std::streamsize>::max(3));   
      
      string abfragedatum;            
      
      getline (newfile, abfragedatum );   
      
     
     
     
              if (abfragedatum==monat)    
      
                 {
                 cout>>zeile;             
                 
                 newfile<<zeile<<endl;    
                 
                 while((pos = line.find(';'))!=string::npos)line[pos] = ' '; 
      
                 while((pos = line.find('"'))!=string::npos)line[pos] = ' ' ;
                 
                 }
      
      
      
              else (abfragedatum!==monat)    
           
                   {
                   continue;                 
           
                   }
      
      
      
        
 
    
    }
  
  }

  else cout << "Unable to open file"; 


  system("PAUSE");
  return 0;
}
 
Hi.

Nicht so:
Code:
    while (! myfile.eof() )         /
    
    {
      getline (myfile,zeile);
Sondern so:
C++:
while (getline(myfile, zeile)) {
Code:
      string src = zeile;
Warum kopierst du die Zeile hier?
Code:
      int strpos = src.find("Name des Antragstellers");
Die std::string::find Methode gibt einen std::string::size_type zurück. Es ist besser diesen Typ(-Alias) zu verwenden.
Code:
      getline(newfile, datum, ';');
newfile ist ein Outputstream. Warum rufst du getline für einen Outputstream auf? Das macht keinen Sinn.
Code:
      istringstream in(datum);
      
      in.ignore (numeric_limits<std::streamsize>::max(3));   
      
      string abfragedatum;            
      
      getline (newfile, abfragedatum );
Was soll dieser Code denn machen?
Code:
                 while((pos = line.find(';'))!=string::npos)line[pos] = ' '; 
      
                 while((pos = line.find('"'))!=string::npos)line[pos] = ' ' ;
Einfacher wäre:
C++:
std::replace(line.begin(), line.end(), ';', ' ');

Gruß
 
Zurück