tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1293
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Pfeiffer Pfeiffer ist offline Rookie
    Registriert seit
    May 2004
    Beiträge
    7
    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/...y-counter.cgi? HTTP/1.0" 302 620 TCP_MISSEFAULT_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_HITEFAULT_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
    Geändert von Pfeiffer (01.06.04 um 15:34 Uhr)
     

  2. #2
    Script_Kiddie Script_Kiddie ist offline Mitglied
    Registriert seit
    Jan 2004
    Ort
    Wien
    Beiträge
    24
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    #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
     
    Wenn du weißt, dass du nichts weißt, bist du sehr wissend!

  3. #3
    Pfeiffer Pfeiffer ist offline Rookie
    Registriert seit
    May 2004
    Beiträge
    7
    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
     

  4. #4
    Registriert seit
    Nov 2002
    Ort
    Altdorf bei Nürnberg
    Beiträge
    3.027
    Hallo,

    du kannst es so machen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    /* 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
    Geändert von Fabian Hofmann (02.06.04 um 17:02 Uhr)
     

Ähnliche Themen

  1. Bestimmte teile aus einer Datei lesen
    Von VanHellsehn im Forum PHP
    Antworten: 5
    Letzter Beitrag: 17.06.08, 16:55
  2. Bestimmte Zeile aus Datei lesen
    Von helavi im Forum Java
    Antworten: 4
    Letzter Beitrag: 14.12.07, 09:11
  3. bestimmte zeile mit batch datei lesen
    Von Blame23 im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 03.08.07, 10:20
  4. Split-Funktion vs. Zeichen für Zeichen lesen
    Von Yoah im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 12.01.05, 16:32
  5. bestimmte zeilen aus datei lesen
    Von moistwanted im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 05.11.04, 19:43