Zeile aus Datei auslesen



  • Hi,

    folgender Text ließt aus einer Textdatei den Text aus:

    void findInFile(FILE *l_file, char *l_mask) {
    	char tmpStr[50];
    	int i=1;
    	int retval=0;
    
    	// Solange noch nicht das Ende der Datei erreicht wurde, lese neue Zeile ein.
    	printf("------------------------------------------------------------------------\n");
    	while (!feof(l_file)) {
    		// Zeilenweise Text aus der Datei auslesen.
    		fscanf(l_file, "%s\n", tmpStr);
    		// Die ausgelesene Zeile auf dem Bildschirm ausgeben.
    		printf("> ZEILE %d:| %s|\n", i, tmpStr);
    
    		// Funktion zum Durchsuchen einer Zeichenkette, welche die Fundstelle als
    		// Integer-Wert zurückgibt.
    		retval = findStr(tmpStr, l_mask, 1);
    		if (retval > 0) {
    			printf(">> TREFFER: <Zeile: %d,Zeichen: %d>\n", i, retval);
    			retval=0;
    		}
    		i++;
    	}	
    	printf("------------------------------------------------------------------------\n");
    }
    

    Probleme bereitet mir dabei der Befehl fscanf, da dieser nur bis zu einem Leerzeichen zu lesen scheint und dann die Schleife weiterlaufen lässt.
    Wie müsste ich meinen Code modifizieren, um folgende Zeile ganz einzulesen?
    "Mehrere Wort aneinandergereiht ergeben einen Satz - er muss nur nicht immer sinnvoll sein!"

    Vielen Dank.
    MFG.



  • mit fgets() statt scanf()



  • fgets hilft mir nicht wirklich, da es anscheinend selbst einen Zeilenumbruch an das Ende der Zeichenkette hängt.
    Das will ich aber nicht!



  • Musst du den Zeilenumbruch halt wieder entfernen (bzw. den String verkürzen):

    line[strlen(line)-1] = 0;
    


  • Hi,

    mit Hilfe der folgenden Zeilen wollte ich den String selbst einlesen, doch das Resultat sieht merkwürdig aus...
    Woran kann dies liegen?

    while ((c=getc(l_file))!=EOF && (c!='\n') && (j<=50)) {
        tmpStr[j++]=c;
    }
    

    Müsste ich meinen String, also tmpString[] erst jedes mal löschen, damit ich keinen Datenmüll mehr drin zu liegen habe?
    Wie würde dies gehen?

    Gruß.



  • W2K schrieb:

    Müsste ich meinen String, also tmpString[] erst jedes mal löschen, damit ich keinen Datenmüll mehr drin zu liegen habe?

    Du musst nur dafür sorgen, dass er mit einer \0 abschließt.
    Am Ende also:

    tmpStr[j] = 0;
    

Anmelden zum Antworten