Filter Programm

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
gabeBU
Beiträge: 8
Registriert: Di Apr 03, 2012 11:50 am

Filter Programm

Beitrag von gabeBU » Di Mai 01, 2012 1:53 pm

Hallo zusammen

Ich habe ein Filterprogramm geschrieben und bin schon fast fertig. Es geht um das Filtern der Ausgabe der kompletten Oskar-Datenbank (siehe Anhang). Die Regeln sind gesetzt (bis auf ein paar nicht lösbare Zeilen, aber das ist jetzt nicht wichtig). Jetzt bei der Ausgabe in der .txt (siehe Anhang) wird bei jeder Zeile ein "*" ausgegeben, der eigentlich nur beim nominierten gewinner ausgegeben werden sollte und die Notes, die ich nicht haben möchte, werden auch wieder eingeschrieben. Ist es möglich das zu verhindern?

Hier ist der Code:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
//#include <windows.h>
#include <iostream>
#include <string>

using namespace std;

struct entry {
	string year;
};

bool is_number(const std::string& s)
{
   for (int i = 0; i < s.length(); i++) {
       if (!std::isdigit(s[i]))
           return false;
   }

   return true;
}

bool is_upper(const std::string& s)
{
     locale loc;
     char c;
     for (size_t i=0; i<s.length(); ++i)
     {
         c=s[i];
         if (!isupper(c,loc))
          return false;
     }
     return true;
}

bool is_afilm ( const std::string& s)
{
     return s.find_first_of("--") > -1;
}    
     
int main (void)
{
	FILE *datei;
	char line[1000];
	int i ;
	i = 500;

	datei = fopen ("oscardateien.txt", "r");
	char c;
	char a[20];
    const char *p;
    char abstand[] = ",";
	FILE * ausgabe = fopen("ausgabe.txt","w+");

	while(!feof(datei))
	{
		fgets(line,i,datei);

		string s_line (line);

	
		// year
		if(  s_line.find_first_of("--") == -1 && is_number(s_line.substr(0, 4)))
		{
			
			int yearEnd = s_line.find_first_of(' ');
		    
		     string year = s_line.substr(0,yearEnd);
			cout << year + "\n";
			p = year.c_str();
			strcpy( a, year.c_str());
			fprintf(ausgabe,a);
			fprintf(ausgabe,abstand);
            		}
		
		
       //category
     else  if (  s_line.find_first_of("--") == -1  && is_upper(s_line.substr(0,s_line.find_first_of(' '))))
       {
         cout << "Kategorie:" <<  s_line + "\n";
         	p = s_line.c_str();
			strcpy( a, s_line.c_str());
			fprintf(ausgabe,a);
			fprintf(ausgabe,abstand);
       }
       //film
    /*else   if (s_line.find_first_of("--") > string::npos)
       {
         cout << "Film:" >> s_line + "\n";
       }*/
       //Vorname
    else if (   s_line.find_first_of("*") != -1)
    {
         cout << "Gewinner:" << s_line;
         	strcpy( a, s_line.c_str());
			fprintf(ausgabe,a);
		
    }
     //notes
   else if (s_line.substr(0,5) == "[NOTE")
   {
    }
    
    //fliesstext
    else if ( s_line.find_first_of("--") == -1 && s_line.substr(0,2) == "To")
    {
         cout <<"Beschreibung" <<  s_line + "\n";
          	strcpy( a, s_line.c_str());
			fprintf(ausgabe,a);
			
    }
    //vorname
    
    else 
    {
         cout << "Film:" << s_line + "\n";		
    }
		//fprintf(ausgabe,line,c);
	}
  //music
  
  //sound
  
  //director
  
  //
  
	fclose (datei);


	system("PAUSE");
	return 0;
}


Gruss

GabeBU
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Filter Programm

Beitrag von Xin » Di Mai 01, 2012 4:44 pm

gabeBU hat geschrieben:Hallo zusammen

Ich habe ein Filterprogramm geschrieben und bin schon fast fertig. Es geht um das Filtern der Ausgabe der kompletten Oskar-Datenbank (siehe Anhang). Die Regeln sind gesetzt (bis auf ein paar nicht lösbare Zeilen, aber das ist jetzt nicht wichtig). Jetzt bei der Ausgabe in der .txt (siehe Anhang) wird bei jeder Zeile ein "*" ausgegeben, der eigentlich nur beim nominierten gewinner ausgegeben werden sollte und die Notes, die ich nicht haben möchte, werden auch wieder eingeschrieben. Ist es möglich das zu verhindern?

Hier ist der Code:
Ich bekomme erstmal beim Kompilieren folgendes:

Code: Alles auswählen

xin@Trinity:~/Dokumente/Personen/gabeBU$ g++ oskar.cpp 
oskar.cpp: In Funktion »int main()«:
oskar.cpp:71:33: Fehler: »strcpy« wurde in diesem Gültigkeitsbereich nicht definiert
oskar.cpp:72:27: Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
oskar.cpp:73:33: Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
oskar.cpp:82:35: Fehler: »strcpy« wurde in diesem Gültigkeitsbereich nicht definiert
oskar.cpp:83:27: Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
oskar.cpp:84:33: Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
oskar.cpp:95:38: Fehler: »strcpy« wurde in diesem Gültigkeitsbereich nicht definiert
oskar.cpp:96:27: Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
oskar.cpp:108:39: Fehler: »strcpy« wurde in diesem Gültigkeitsbereich nicht definiert
oskar.cpp:109:27: Warnung: Format ist kein Zeichenkettenliteral, und keine Formatargumente [-Wformat-security]
Nachdem ich statt <string> <string.h> einbinde, kann ich kompilieren.
Es kommen viele Ausgaben, gefolgt von:

Code: Alles auswählen

Gewinner:*
BeschreibungTo Jonathan Erland in appreciation for outstanding service and dedication in upholding the high standards of the Academy of Motion Picture Arts and Sciences. 
Bus-Zugriffsfehler (Speicherabzug geschrieben)
Ich befürchte, da musst Du zuerst ran.

Ansonsten verstehe ich noch nicht, was Du genau willst, vermutlich weil ich auch nichts von Oskars verstehe.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gabeBU
Beiträge: 8
Registriert: Di Apr 03, 2012 11:50 am

Re: Filter Programm

Beitrag von gabeBU » Do Mai 03, 2012 8:45 am

Das Programm soll die Ausgabe der Datenbank so filtern, dass das Jahr, die Kategorie, die Nominierten, der Film, sowie die Gewinner mit einem Stern bezeichnet werden. Die Fehlermeldungen habe ich nicht erhalten...bei mir wird das Programm problemlos kompiliert.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Filter Programm

Beitrag von fat-lobyte » Do Mai 03, 2012 9:19 am

gabeBU hat geschrieben:Die Fehlermeldungen habe ich nicht erhalten...bei mir wird das Programm problemlos kompiliert.
Das liegt wahrscheinlich daran, dass du einen anderen Compiler verwendest. Wenn du für mehrere Plattformen kompilierst, solltest du dein Programm auch immer mit mehreren Compilern testen um dir sicher zu sein.
Wenn das nicht möglich sein sollte, solltest du zumindest in einer Referenz, z.B. hier: http://www.cplusplus.com/reference/ nachschauen, in welchen Headern sich die Funktionen tatsächlich befinden.

Übrigens: Bei manchen Menschen ist das Archivformat "RAR" nicht sehr beliebt, zum Beispiel bei mir.
Das liegt 1. daran, dass es bessere Algorithmen gibt (z.B. LZMA in 7zip) und 2. dass man zum Entpacken unfreie Software benötigt.

Weiter verbreitet sind .zip, .tar.gz, .tar.bz2, .tar.xz oder .7z.
Vor allem .7z und .tar.xz haben eine besser Kompressionsrate als RAR. Und alle Menschen können es aufmachen!
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Filter Programm

Beitrag von Xin » Do Mai 03, 2012 9:37 am

gabeBU hat geschrieben:Das Programm soll die Ausgabe der Datenbank so filtern, dass das Jahr, die Kategorie, die Nominierten, der Film, sowie die Gewinner mit einem Stern bezeichnet werden.
Filtern bedeutet also schlussendlich nur, dass der Gewinnerfilm mit einem Stern gekennzeichnet wird?
gabeBU hat geschrieben:Die Fehlermeldungen habe ich nicht erhalten...bei mir wird das Programm problemlos kompiliert.
Ich kompilierte mit dem GCC 4.6 unter Ubuntu 12.04. Der Compiler ist recht aktuell.
Wenn Du <string> einbindest, dann befinden sich alle str...-Funktionen im Namespace std. Also std::strcpy z.B.
<string.h> ist die ältere Fassung, die die Funktionen im globalen Namensraum liegen hat.
Wenn Du keinen Plan hast, wovon ich rede, so ist das nicht schlimm: binde einfach die <string.h> ein. ;-)

Viel problematischer ist "Bus-Zugriffsfehler (Speicherabzug geschrieben)", der nebenher bei mir den kompletten Stack-Trace killt. Hier fliegt also irgendwann irgendwas in die Luft.
Kannst Du den Fehler nachvollziehen (welchen Compiler benutzt Du?)


Was .rar angeht - einfach zippen und fertig.
Dass .tar.xz weiter verbreitet als .rar ist, ist wohl sehr vom Kreis abhängig indem man guckt - die Endung kannte ich nämlich noch gar nicht. ^^
Bei .zip hat jedes OS in der Grundinstallation alles dabei.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gabeBU
Beiträge: 8
Registriert: Di Apr 03, 2012 11:50 am

Re: Filter Programm

Beitrag von gabeBU » Di Mai 08, 2012 10:13 am

Ist doch völlig egal, wie ich es verpackt habe...-.- es geht ja um's Programm.

In der Schule nehmen wir Bloodsheet DEV C++ zum Compilieren und wie gesagt, dort sind keine Fehlermeldungen erschienen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Filter Programm

Beitrag von Xin » Di Mai 08, 2012 11:10 am

gabeBU hat geschrieben:In der Schule nehmen wir Bloodsheet DEV C++ zum Compilieren und wie gesagt, dort sind keine Fehlermeldungen erschienen.
Ursache und Wirkung. ;-)

Der BloodSheet ist steinalt und fehlerhaft. Die aktuelle Version ist von Februar 2005! Das sind über 7 Jahre. Der MinGW ist ebenfalls meistens weit hinter dem GCC her und ich kompilierte Deinen Code mit einem Compiler, der bestenfalls ein paar Monate alt ist.
Biete Deinem Lehrer doch einfach an, sich auch mal hier anzumelden. Spontan fallen mir drei Entwicklungsumgebungen ein, die er stattdessen benutzen könnte.


Wie ist der aktuelle Stand? Kannst Du die Speicherzugriffproblematik nachvollziehen?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten