Bestimmte Zeichen aus Datei lesen

Pfeiffer

Grünschnabel
Bestimmte Zeichen aus Datei lesen (C)

Hi, ich finde einfach keinen Ansatz.

Mein Problem ist, dass ich eine access.log-Datei habe, welche ich auslesen möchte. Diese besteht aus mehrern Zeilen:

Zeile1:
172.17.21.3 - struenkm [11/Mar/2004:15:32:42 +0100] "GET http://counters.honesty.com/cgi-bin/honesty-counter.cgi? HTTP/1.0" 302 620 TCP_MISS:DEFAULT_PARENT

Zeile2:
172.17.21.3 - struenkm [11/Mar/2004:15:32:42 +0100] "GET http://banners.ebay.com/de/Ads/versandservice_70x20.gif HTTP/1.0" 200 1254 TCP_REFRESH_HIT:DEFAULT_PARENT
...

Das mit der Datei öffnen ist ja klein Problem. Ebenso wie das Auslesen mit Hilfe der while-Schleife:
while(!feof(rdatei))
{

}

Bisher habe ich in der Schleife mit dem Befehl:

fscanf (rdatei,"%s",&daten[0];

gearbeite und habe dann diese immer gleich in eine anderes Datei geschrieben. Nur habe ich da den ganzen Zeilensatz in der Variable. Nun möchte ich aber gerne in eine Variable nur die ip schreiben, in eine andere den "-", in die nächste das Datum und so weiter. Wie bekomme ich es denn hin, dass er immer nur bis zu einem vorgegeben Zeichen liest, diesen dann wieder als Startpunkt ansieht und bis zum nächsten vorgegeben Endpunkt weiterliest und so die entsprechenden Variablen füllt. Bevor er dann in die nächste Zeile geht werden nur die Variablen in einen Datei geschrieben, welche für mich relevant sind, d.h. die Variablen können, wenn er in die nächste Zeile springt von neuem gefüllt werden. Ebenso sollen Zeilen, welche mit einem bestimmten Zeichensatz beginnen übersprungen werden.

Ich besitze leider nur Grundkenntnisse in C, doch ich denke, dass dies nicht so wild sein wird.

mfg. Andreas
 
Zuletzt bearbeitet:
Hi!
Deklariere zuerst eine Variable, dann lies die ganze Zeile in die Variable ein.
Allerdings würde ich ein anderes Verfahren wählen, wie zb:

Code:
#define LEN 1024
char Variable[LEN];
char *IP;

while(fgets(Variable,LEN,f))
{
IP=strchr(Variable,'-');  // Sucht nach dem "-"
                                        // IP ist jetzt alles vor dem "-"

}

Genau weiß ich es leider auch nicht mehr, aber den Ansatz kann ich dir vielleicht wengistens geben ;) Probier einfach in bisschen mit strchr herum. Ach ja, vorher noch <string.h> includen!
Greetz
 
Hi,

danke für die Antwort, mit deinem Code bekomme ich aber alles ab dem '-' angezeigt. Ich bräuchte aber was vor dem '-' steht in einer variable. Habe mir die Zeile in eine Variable eingelesen und habe auch die Position wo das '-' steht. Wie bekomme ich nun das, was vom Anfang bis zu der Postition steht, bzw. kann diese sofort in eine Variable einlesen?

mfg. Andreas
 
Hallo,

du kannst es so machen:
Code:
/* als erstes brauchst du eine Funktion, die eine Datei
   bis zum Zeilenende weiter ausliest */

void skipLine(FILE *fileF)
{
    char cR;

    do {
        cR = fgetc(fileF);
    } while((cR != '\n') && (cR != EOF));
}


/* dann kannst du einfach den ersten String aus der Zeile
   per fscanf auslesen: */

FILE *fileLog;
char szIp[16];

fileLog = fopen("access_log", "r");
if (fileLog == NULL) {
    fprintf(stderr, "Fehler beim oeffnen der Logdatei.\n");

    return 1;
}

while (!feof(fileLog)) {
    fscanf(fileLog, "%s", szIp);
    skipLine(fileLog);

    printf("Ip: %s\n", szIp);
}

fclose(fileLog);
hth
 
Zuletzt bearbeitet von einem Moderator:
Zurück