Programm geschrieben aber immer Fehler, BITTE HELFEN



  • Habs versucht mit dem zurücksetzen, amcht immer noch den Fehler

    datei2 = fopen("sort1.txt","w+");
      ueberpruefen1(datei, 39, datei2);
      fseek(datei2, 0, 0);
      datei3 = fopen("sort2.txt","w+");
      ueberpruefen2(datei2, 39, datei3);
    


  • Zum lernen muss ich auch mal was sagen:

    Wir lernen zur Zeit nur Konsolenanwendungen und sind gerader erst in die OOP rein, wo ich mich noch cniht dran wage, weil ich in der Therorie noch Schwächel.

    Ich kann nur eins sagen: Ich bin einer der besten in PRG (Programmieren) und 90% der Klasse schafft nciht mal das was ich in der Main habe, die würden an einer Array Drekl. verzweifeln!!!

    Das da einige "Schönheitsfehler" drin sind, ist mir klar. Aber wir lernen sag ich mal das was dem Lehrer am besten gefällt. Aber da ich soweiso der einzige bin der ausserhalb der Schule was macht... naja..



  • LordJaxom schrieb:

    @CStoll: Nu sei mal nicht so, immerhin hat er int main und return 0 😃

    Ja, wenigstens etwas 😃 Der Inhalt der Funktionen sieht trotzdem grauenhaft aus (und ich bin mir nicht sicher, ob sie das richtige machen).
    Zum Beispiel solltest du auch die übrigen Dateien vor der Verwendung überprüfen, ob sie existieren (und eventuell nach dem Ende von ueberpruefen1() einen Breakpoint setzen und nachsehen, was du überhaupt in die "sort1.txt" geschrieben hast.

    (und der letzte Parameter von ueberpruefen2() wird auch gar nicht verwendet)



  • Also wie meinst du das mit der überprüfung? Die ueberpruefung1 ist zur Filterung aus ca 20000 zeichen sql in alle zeichen mit Hochkomma´s da, was soll ichda überprüfen? ich kann ja in die sort1.txt reingucken, der macht ja was ich will.

    Der 2. Wert der ueberpruefung 2 Soll die nächste Temporöre Sortdatei werden, ist nur noch cniht eingebunden weil das nicht klappt udn der immer n Fehler macht wegen zugriffsrechte und so

    bitte helft mir doch maaaaaaaaa



  • L33ch schrieb:

    Also wie meinst du das mit der überprüfung? Die ueberpruefung1 ist zur Filterung aus ca 20000 zeichen sql in alle zeichen mit Hochkomma´s da, was soll ichda überprüfen? ich kann ja in die sort1.txt reingucken, der macht ja was ich will.

    Du testest ab, ob die Ursprungsdatei ordentlich geöffnet werden konnte - bei deinen Zwischendateien nimmst du es als gegeben an, daß alles geklappt hat.

    Ansonsten: setz mal zwischenzeitlich ein "return 0;" hinter den Aufruf von ueberpruefen1(), starte das Programm und schau dir anschließend an, was in der sort1.txt angekommen ist.

    PS: Mach's dir doch einfacher und pack die Daten einmal in den Speicher (z.B. in einen vector<string>), dann brauchst du sie nicht ständig zwischen Speicher und Festplatte hin- und herzuschieben.

    PPS: Und steig von FILE* um auf fstream's.



  • mir war echt langweilig *gääääääähn*
    und dann kam der augenkrebs 🙂
    @ leech : ist es so schöner? JA(!)

    //---------------------------------------------------------------------------
    
    #include <iostream> 
    using namespace std;
    #include <conio.h> 
    #include <stdio.h> 
    
    //---------------------------------------------------------------------------
    
    void dateiVorhanden(FILE*); 
    void leeren(char*);
    string speichern(char*, int); 
    void ausgeben(char*); 
    void ueberpruefen1(FILE *, int, FILE *); 
    void ueberpruefen2(FILE *, int, FILE *); 
    
    int main(int argc, char* argv[])
    {
            cout << "**************************************" << endl;
            cout << "*       Search`n Hack -  V. 0.1      *" << endl;
            cout << "*       MD 5 Hash Code Sucher        *" << endl;
            cout << "**************************************" << endl;
    
            FILE *datei, *datei2, *datei3, *datei4;
            string dateiname;
    
            cout << "\nBitte Dateinamen eingeben: "; cin >> dateiname;
            const char *dateinameChar = dateiname.c_str();
    
            datei = fopen(dateinameChar,"r");
            dateiVorhanden(datei);
    
            datei2 = fopen("sort1.txt","w+");
            ueberpruefen1(datei, 39, datei2);
            //fclose(datei2);
            //datei2 = fopen("sort1.txt","r");
            datei3 = fopen("sort2.txt","w+");
            ueberpruefen2(datei2, 39, datei3);
    
            fclose(datei);
            fclose(datei2);
            fclose(datei3);
            return 0;
    }
    //---------------------------------------------------------------------------
    
    void dateiVorhanden(FILE *d)
    {
            if (d == NULL)
            {
                    cout << "\nFehler beim oeffnen der Datei..." << endl;
                    cout << "Programm wird beende!" << endl;
                    getch();
                    exit(1);
            }
            else
            {
                    clrscr();
                    cout << "\nDatei gefunden und erfolgreich geoeffnet" << endl;
                    cout << "\nZum fortfahren bitte beliebige Taste druecken." << endl;
                    getch();
                    clrscr();
            }
    }
    
    void ueberpruefen1(FILE *d, int zeichen, FILE *d2)
    {
            char a;
            int isGut = 0;
            while (!feof(d))
            {
                    fread(&a, sizeof(a), 1, d);
                    if (a == zeichen)
                    {
                            if (isGut == 0)
                            {
                                    isGut = 1;
                            }
                            else
                            {
                                    fwrite(&a, sizeof(a), 1, d2);
                                    a = '\n';
                                    fwrite(&a, sizeof(a), 1, d2);
                                    isGut = 0;
                            }
                    }
                    if (isGut == 1)
                    {
                            fwrite(&a, sizeof(a), 1, d2);
                    }
            }//while
    }
    //---------
    void ueberpruefen2(FILE *d, int zeichen, FILE *d2)
    {
            char b;
            char c[1000];
            //string *str;
            int isGut = 0;
            int i=0;// index=0;
            while (!feof(d))
            {
                    fread(&b, sizeof(b), 1, d);
                    if (isGut == 1)
                    {
                            c[i]=b;
                            i++;
                    }
            }
            if (b == zeichen)
            {
                    if (isGut == 0)
                    {
                            isGut = 1;
                    }
                    else
                    {
                            isGut = 0;
                            if (i == 33)
                            {
                                    ausgeben(c);
                                    //str[index] = speichern(c,index);
                                    //index++;
                            }
                            leeren(c);
                            i=0;
                    }
            }
    }
    //------
    void leeren(char *a)
    {
            for (int i=0; i<=100; i++)
            {
                    a[i] = ' ';
            }
    }
    //---------
    string speichern(char *a, int index)
    {
            int help=0;
            string str2;
            for (int i=0; i<=100; i++)
            {
                    if (a[i] == ' ')
                    {
                            help=1;
                    }
                    if (help == 0)
                    {
                            for (int i=0; i<=100; i++)
                            {
                                    str2 += a[i];
                            }
                    }
            }
      return str2;
    }
    //---------
    void ausgeben(char *a)
    {
            for (int i=0; i<32; i++)
            {
                    cout << a[i];
            }
            cout << endl;
    }
    


  • Soweit ich sehe hast du lediglich den iostream oben und das Design geändert oder?

    Kannste mir das iostream genau erklären warum und wieso du das so gemacht hast...

    mit dem #import <iostream.h> bindet der doch die Bibliothek iostream ein, oder?

    Was löst jetzt mein Problem der Zugriffsvereltzung? h3h3?



  • Interessanterweise läuft das Programm bei mir durch (ohne Absturz), und schreibt in die sort1.txt alle in '' enthaltenen Texte raus. sort2.txt bleibt allerdings leer (warum hab ich nicht geschaut).

    Zu iostream: Die Headerdatei iostream.h ist veraltet, nach dem C++ Standard heisst sie iostream ohne .h und enthält nur Objekte die im Namensraum std beheimatet sind. Dadurch wird aus cout ein std::cout (cout im Namensraum std). Mit using namespace std; sagst du dem Compiler dass du alles aus std gerne in deinen (anonymen) Namensraum importiert haben möchtest um dir das std:: zu ersparen.



  • Versteh ich nicht. Hmmz... kann das ein zweiter mal Gegenchecken ob es bei ihm Zufall ist oder bei mir was schief läuft????

    (~~> Könnte gut sein, habe seit einiger Zeit richtige Probleme, die dem jetzigen ähneln, bei anderen genereelen problemen.)

    ZU Iostream... Ich versteh es nur halb.

    Also iostream.h ist veraltet udn deswegen benutzen wir das iostream weil es neuer ist, richtig?
    Die 2. zeile binden wir ein damit wir uns das STD:: sparen können. Aber was meinst du mit dem Namensraum? (Bitte denke bei der Erklärung daaran das ich in OOP noch sehr klein bin ^^)



  • für die tolle Überschrift.

    > . <


Anmelden zum Antworten