Seite 1 von 1

Problem mit dem Auslesen von Dateien.

Verfasst: Di Okt 07, 2014 12:50 pm
von jigglypuff
Hallöchen.
Nur kurz zum Verständnis, ich muss zurzeit einige Teile einer Shell nachempfinden und programmieren. Komplett in C, nackt, nur mit Standartbibliotheken. Ausführbar in der richtigen Shell, halt wie ein Imitat. Jedoch bereitet mir die "grep" Funktion Kopfschmerzen.
Wenn ich eine Datei öffne, diese zeilenweise auslese, fehlt jeweils das erste Zeichen jeder Zeile. Ich verstehe nicht, woher dieser Fehler kommt, habe auch einige Umformungen des Codes ausprobiert, jedoch fehlt wirklich immer das erste Zeichen. Google & co hilt mir auch nicht.
Hier ist der Codeschnipsel nur für's auslesen. Vorher wurde die Datei natürlich geöffnet und danach auch wieder geschlossen.
Die Definierung der char etc ist natürlich nicht an der Stelle, hab die da nur eben eingefügt damit ihr wisst, wie die Sachen definiert wurden.

Code: Alles auswählen


FILE *datei ;
int zaehler;
char zeile [256] = "";
// wort ist das zu vergleichende wort als string ohne enter.

while( (zaehler=fgetc(datei)) != EOF)
{
	fgets (zeile, 256, datei);           // auslesen der zeile

	if (strstr (zeile, wort))              // falls in der zeile das suchwort vorkommt
	{
		printf("%s", zeile);         // ausgabe dieser zeile
	}
					
	strcpy (zeile, "" ) ;                // zeile wieder "leeren"
					
}
Wo bleibt der erste Buchstabe? Fehlt irgendwas hierbei? Oder liegt der Fehler woanders?

Sorry, falls das hier ein bisschen durcheinander ist, ich bin gerade etwas aufgelöst und Matsche im Hirn.

Re: Problem mit dem Auslesen von Dateien.

Verfasst: Di Okt 07, 2014 2:36 pm
von Xin
jigglypuff hat geschrieben:Hallöchen.
Hallöchen ;-)
jigglypuff hat geschrieben:Wo bleibt der erste Buchstabe? Fehlt irgendwas hierbei? Oder liegt der Fehler woanders?
Es mag nur eine Vermutung sein, aber was genau macht diese Zeile in Deinen Augen?

Code: Alles auswählen

while( (zaehler=fgetc(datei)) != EOF)

Re: Problem mit dem Auslesen von Dateien.

Verfasst: Di Okt 07, 2014 5:03 pm
von jigglypuff
Also so wie ich das verstanden habe, setzt das den Pointer zaehler auf Anfang der Zeile. Jetzt wo du es so hinterfragst zweifle ich selber dran... :lol:

Aber wenn ich jetzt nochmal drüber nachdenke... Der schluckt ja wirklich nur jeweils den ersten Buchstaben. Also alle Zeilen werden quasi richtig ausgegeben, nur das erste Zeichen fehlt. Verwirrt mich gerade hart. Sowas im ersten Semester ist echt gemein ^^

Re: Problem mit dem Auslesen von Dateien.

Verfasst: Di Okt 07, 2014 6:56 pm
von canlot
So wie ich das jetzt verstanden habe, setzt fgetc den internen Zeiger eins weiter, deshalb liest fgets auch das erste Zeichen nicht mit.
Nachzulesen hier: http://www.cplusplus.com/reference/cstdio/fgetc/

Re: Problem mit dem Auslesen von Dateien.

Verfasst: Di Okt 07, 2014 7:12 pm
von jigglypuff
Danke für die Denkanstöße!
Habe einfach meine festgefahrene Schleife verbannt und komplett neu recherchiert und geschrieben.
Ist jetzt auch kürzer, übersichtlich und die Hauptsache, es funktioniert :D

Falls jemand ähnliche Probleme hat, so hab ich's jetzt gelöst (wieder nur der Codeschnipsel)

Code: Alles auswählen

while ( fgets(teil,256,datei) != NULL )
				{
	   
   
					if (strstr (teil, wort))     
						{

							printf("%s", teil);
						}
				}
Danke nochmal! :)