Problem mit dem Auslesen von Dateien.

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
jigglypuff
Beiträge: 3
Registriert: Di Okt 07, 2014 12:34 pm
Wohnort: nrw

Problem mit dem Auslesen von Dateien.

Beitrag von jigglypuff » Di Okt 07, 2014 12:50 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit dem Auslesen von Dateien.

Beitrag von Xin » Di Okt 07, 2014 2:36 pm

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)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

jigglypuff
Beiträge: 3
Registriert: Di Okt 07, 2014 12:34 pm
Wohnort: nrw

Re: Problem mit dem Auslesen von Dateien.

Beitrag von jigglypuff » Di Okt 07, 2014 5:03 pm

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 ^^

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Problem mit dem Auslesen von Dateien.

Beitrag von canlot » Di Okt 07, 2014 6:56 pm

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/
Unwissenheit ist ein Segen

jigglypuff
Beiträge: 3
Registriert: Di Okt 07, 2014 12:34 pm
Wohnort: nrw

Re: Problem mit dem Auslesen von Dateien.

Beitrag von jigglypuff » Di Okt 07, 2014 7:12 pm

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! :)

Antworten