fscanf // Zeilenweises Einlesen aus einer .txt Datei

Kiesen

Mitglied
Hallo liebe Gemeinde,

ich versuche gerade ein Programm zu entwickeln, welches eine .txt Datei zeilenweise einliest und in eine selbst erstellte struct einfügt. Aber soweit komme ich gar nicht. Ich bin schon mit dem Debugger drüber und habe gesehen, dass die Adresse des Pointers auf die .txt zeigt. Aber irgendwie funktioniert die Methode fscanf nicht.

Dies ist mein Code in der main:

Java:
int main(void) {

    char* titel;
    int release;
    int length;
    char* regisseur;
    
    char filename[FILENAME_MAX];
    char line[MAXLINE];
    FILE *filepointer;
    size_t p;
    
    printf("Which File should be opend? (Needs to be in the same directory): ");
    fgets(filename, FILENAME_MAX, stdin);
    
    //Entfernt new line und setzt end of line 
    p = strlen(filename);
    filename[p-1] = '\0';
    
    filepointer = fopen(filename, "r");
    
    if(filepointer == 0) {
        printf("File can´t be opend!\n");
        return EXIT_FAILURE;
    
    } else {
        
        //Zählt die Zeilen in der .txt Datei 
        while(fgets(line, MAXLINE, filepointer)) {
            getlinenumbers = getlinenumbers+1;
        }
        
        //Erstellt i mal die movie struct. Liest nun Zeilenweise die .txt ein, bekommt die infos zu dem Film und fügt diese in die movie struct ein.  
        movie* input_movie[getlinenumbers];
        while(fscanf(filepointer, "%[^;];%d[^;];%d[^;];%[^;]", titel, &release, &length, regisseur) != EOF) {
            input_movie[i] = new_movie(titel, release, length, regisseur);
            i++;
        }
        
        for(int j = 0; j<i; j++) {
            printf("%s, %d, %d, %s", input_movie[j]->titel, input_movie[j]->release, input_movie[j]->length, input_movie[j]->regisseur);
        }
            
        
    }
    return EXIT_SUCCESS;
}

Vielleicht weiß ja jemand eine Lösung zu meine Problem.
 
Zuletzt bearbeitet:

MyOuzo

Mitglied
Erstmal herzlichen glückwunsch, dass du C++ gewählt hast :)

Der Code sieht aber trotzdem C ähnlicher, wie wärs wenn du die Bibliothek "fstream" verwendest und alles mit "ifstream dat_ein" einliest. Jedes mahl wenn du dann dat_ein ausführst ( es kann auch ein beliebige andere Name sein ) wirden die Zeichen bis zu einem Leerzeichen / Zeilenumbruch eingelesen, Was man prima in einer Schleife durchlaufen kann.

Z.b.

Java:
#include <iosteam>
#include <fstream>
#include <string>
using namespace std;

int main()
{
 cout << "Hallo Welt" << endl; // printf Äquivalent

 ifstream dat_ein;
 string dateiname = "test.txt"

// Datei öffnen
dat_ein.open(dateiname.c_str(), ios_base::in);

if(!dat_ein) return -1; // Fehler

string text;
string text2;

dat_ein >> text // Wenn in der .txt "Ouzo" steht wird text ouzo zugewiesen
dat_ein >> text2 // Weist text die Zeichenketten nach Ouzo bis zum nächsten Tabulator / Leerzeichen / Zeilenumbruch zu.

return 0
}

Schleife:

Java:
//...
int anzahl = 9;
string spirituozen[anzahl];

for(int loop = 0; anzahl-1 > loop; loop++) dat_ein >> spirituozen[loop];
//...

By the way an die Forumadmins ( falls es welche gibt ), ich bestehe darauf, dass C++ - Tags implementiert werden
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben