-
        

Ergebnis 1 bis 5 von 5

Thema: Datei Zeilenweise einlesen mit dynamischer Buffergröße

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2007
    Beiträge
    6

    Datei Zeilenweise einlesen mit dynamischer Buffergröße

    Anzeige

    hi,

    ich möchte gern ein Datei einlesen mit hilfe ein c Programms.
    Die einzulesende Datei ist eine Textdatei und ist Zeilenweise aufgebaut.

    Hier ist mein anfang:
    Code:
    int dateieinlesen(const char* dateiname, const list_t *l)
    {
    	FILE* datei;
    	int zeilenlaenge;
    	char* zeilen_puffer;
    	int ergebnis;
    
    	datei = fopen(dateiname, "r");
    
    	if ( datei == NULL )
    	{
    		ergebnis = FALSE;
    	}
    	else
    	{
    		while( !feof(datei) )
    		{
    			zeilenlaenge = Zeilenlaenge(datei);
    
    			zeilen_puffer = (char*) malloc( (zeilenlaenge+1) * sizeof(char) );
    
    			fgets(zeilen_puffer, zeilenlaenge+1, datei);
    
    			free(zeilen_puffer);
    			
    		}
    		
    		fclose(datei);
    		ergebnis = TRUE;
    	}
    
    	return ergebnis;
    }
    
    int Zeilenlaenge(FILE* datei)
    {
    	int i;
    	char zeichen;
    	fpos_t alt_pos;		
    			
    	fgetpos( datei, &alt_pos );		// Aktuelle Position merken.
    	
    
    	i=0;
    	while ( ( zeichen = fgetc(datei) ) != '\n' && feof(datei) == FALSE )
    	{
    		i++;
    	}
    
    	fsetpos( datei, &alt_pos );		// Zurück auf gemerkte Position.
    	return (i+1);
    }
    Das Prinzip sollte klar sein. Ich lesen solang zeichen ein bis ein \n auftaucht. Zuvor sicher ich aber die Position innerhalb der Datei.
    Dann reserviere ich mir den erfoderlichen Speicher und lesen die Zeile ein.

    In der ersten Zeile klappt alles wunderbar, aber dann klapps nicht mehr. Das Problem ist, glaub ich , das das sichern der Dateipostion nicht geht.

    Kann mir mal jemand ne kurzen Tipp geben ?

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.11.2004
    Ort
    Hvalstad, Norwegen
    Beiträge
    140
    Du solltest evtl. die letzte Position wieder einlesen und an die Aufrufende Funktion zurückgeben und den FILE-Pointer neu mit fsetpos positionieren.
    Sieht so aus, als wenn der FILE-Pointer den Wert aus der Funktion nicht übernimmt. Oder nen Pointer auf den FILE-Pointer übergeben.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    33
    Beiträge
    165
    ich hab vor das free(zeilen_puffer) mal ne Ausgabe gebastelt und das gibt bei mir wunderbar die einzelnen Zeilen aus.
    Was funktioniert denn nicht?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    ..dann klapps nicht mehr..
    Was passiert denn ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2007
    Beiträge
    6
    der fehler liegt dadrin das die postion nicht richtig zurück gesetzt wird. die zweiten zeile ist das letzte zeiche der ersten usw. es ende in einer endlos schleife.

    es liegt, glaub ich, daran das in den datei der zeilenumbruch durch ein 0A dargestellt wird. bei windows editor wird der zeilen umbruch aber durch ein 0D0A dargestellt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •