ANSI-C: Dateien + Bestimmtes Stück Zeile auslesen

Jacizzle

Mitglied
Hallöchen alle!

Ich habe schon länger nicht mehr mit Dateien gearbeitet und frage deshalb mal hier nach ob mir einer helfen kann... Habe ein Problem und zwar:

Ich habe eine Datei in der stehen Zeilen drin die ca. so aussehen:

GREEN_DRIVER=3c8590
GREEN_DEV=eth0
GREEN_ADRESS=10.10.10.10
GREEN_.....

usw. die Datei ist noch viel länger. Nun will ich z.B. die Datei öffnen (das krieg ich sogar noch hin ;-D) und die 3te Zeile auslesen, aber nicht die ganze, sondern nur die IP Adresse hinter Green_adress= .. also die 10.10.10.10

Das ist mit Sicherheit irgendwie möglich, ich habe nur leider nicht gefunden wie man das anstellen könnte :o( .. Mit PHP würden mir sogar funktionen einfallen *g* Aber das bringt mir bei diesem Problem hier nichts, vielleicht kann mir ja mal einer helfen. Danke im vorraus
 
Wenn Du nur mit ANSI-C arbeiten willst, wird Dir nichts übrigbleiben, als die Datei Zeichen für Zeichen durchzuparsen, bis Du 'GREEN_ADRESS=' gefunden hast und dann die IP-Adresse danach ebenfalls Zeichen für Zeichen einzulesen.
Du könntest natürlich auch Zeichen für Zeichen einlesen jeweils bis Du ein '\n' gefunden hast, die Zeile dann in ein char-Array kopieren (0 am Ende nicht vergessen) und dann mit den String-Funktionen nachsehen, ob es die GREEN_ADRESS-Zeile ist. Falls ja, kannst Du die Adresse aus dem String kopieren.
 
Ja die zweite Variante hört sich schon besser an, dann habe ich noch 2 Fragen...

1. Wie gehe ich eine Zeile zeichen für zeichen durch bzw. lese sie zeichen für zeichen ein bis /n .. weiß nur wie man ne ganze zeile aufeinmal einliest (würde ja auch reichen oder nicht?)
2. Mit welcher String funktion kann ich in der Zeile abfragen ob es sich um GREEN_ADRESS Zeile handelt? So eine Funktion habe ich gesucht.

Aber danke dir schonmal für die Hilfe...

P.S.: Ich WILL nicht mit ANSI - C Arbeiten *g* Bin jedoch leider durch das Projekt dran gebunden, geht um eine Displaysteuerung, die mit ANSI - C geschrieben wird.Deswegen muß ich das so machen
 
1a.
Wie gehe ich eine Zeile zeichen für zeichen durch bzw. lese sie zeichen für zeichen ein bis /n
Du merkst Dir den Dateizeiger, dann liest Du zeichenweise mit
Code:
int fgetc(FILE *stream);
bis du ein '\n' eingelesen hast. Danach holst Du Dir wieder den aktuellen Dateizeiger, errechnest aus der Differenz der beiden Dateizeiger die Zeilenlänge, springst mit dem Dateizeiger wieder zum Zeilenanfang (der gemerkte Dateizeiger) und liest mit
Code:
char *fgets(char *string, int n, FILE *stream);
die ganze Zeile ein. Dann brauchst Du nur noch die 0 anhängen.

1b.
weiß nur wie man ne ganze zeile aufeinmal einliest (würde ja auch reichen oder nicht?)
Klar, das würde auch reichen, aber welche Funktion meinst Du da?

2.
Mit welcher String funktion kann ich in der Zeile abfragen ob es sich um GREEN_ADRESS Zeile handelt?
mit
Code:
char *strstr(const char *string, const char *strCharSet);
kannst Du einen Substring in einem String suchen. Wenn der Substring nicht gefunden wurde, gibt die Funktion NULL zurück, sonst einen Zeiger auf den Substring im String.
 
Okay, bin jetzt schon die ganze Zeit am rumtesten.

Hab bis jetzt sogar rausgefunden, wie ichs schaffe die ganze GREEN_ADRESS Zeile alleine auszugeben, also ohne den anderen Kram. Also hab ich nun in dem string GREEN_ADRESS=10.10.10.10 stehen. Nun besteht mein Problem darin, wie schneide ich die "IP-Adresse" daraus?

Das ich hinterher in nem String nur noch "10.10.10.10" stehen habe?

Kann mir da mal einer ein Beispiel zu geben?

Stück Code bis jetzt, wens interessiert ;o):

Code:
    for( ; ; )
    {
   	ref = fscanf(pfile, "%s", Zeile);
	if ((strstr(Zeile,tmpZeile)!=NULL)) 
	{
		printf(Zeile);
		break;
	}

    }

Hätte natürlich auch ne whileschleife nehmen können, aber hab das ausm Beispiel von nen Buch übernommen und da stands so drin ;o).
 
Hi.

/edit: Also, da stand ich wohl ein bißchen neben mir selber. Zweiter Versuch:
Code:
char* pos;
char tmpZeile[] = "GREEN_ADRESS=";
for( ; ; )
    {
   	ref = fscanf(pfile, "%s", Zeile);
	if (strncmp(Zeile, tmpZeile, strlen(tmpZeile)) == 0) 
	{
		printf("IP address = %s\n", strchr(Zeile, '=')+1);
		break;
	}
    }
So sollte es jetzt aber funktionieren. Ich hab statt strstr strncmp genommen weil sonst nicht sichergestellt ist, das GREEN_ADRESS= (im Englischen wird Adresse übrigens mit dd geschrieben) auch am Anfang der Zeile steht und nicht etwa "XYZ_GREEN_ADRESS" oder sonstwas ist.

strchr arbeitet so ähnlich wie strstr und findet die Position eines einzelnen Zeichens in einem String.

Gruß
 
Zuletzt bearbeitet:
Zurück