Logfiledaten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich versuche momentan den Inhalt eines Logfiles f¸r meinen "Logfilereader" verf¸gbar zu machen. Im Forum hat mir schon einer einen Tip gegeben, dafl das mit <b>NSScanner</b> funktionieren w¸rde. Hat jemand damit schon Erfahrungen gemacht? Oder vielleicht einen Link, zur einem Tutorial bereit?
  • RE: Logfiledaten

    Vielleicht reicht Dir schon NSStrings

    - (NSArray *)componentsSeparatedByString:(NSString *)separator

    Ansonsten bietet NSScanner schon sehr viel, nachzulesen unter:

    developer.apple.com/techpubs/m…gs/Concepts/Scanners.html

    Was ich persˆnlich sehr kompliziert fand, war das NSScanner immer ein BOOL zur¸ckgibt ob es den target string gefunden hat und das in diese komplizierten Strukturen, wie

    if ([theScanner scanString:PRODUCT intoString:NULL] &&
    [theScanner scanUpToCharactersFromSet:semicolonSet
    ntoString:&productName] &&
    theScanner scanString:@";" intoString:NULL] &&
    [theScanner scanString:COST intoString:NULL] &&
    [theScanner scanFloat:&productCost]) {

    /* Do something with productName and productCost. */
    }

    (aus den Apple Docus) ergibt. Ich finde das umst‰ndlich... :(

    - Titan =)
    - Titan =)

    "In theory, there is no difference between theory and practice.
    But in practice, there is."
    - Jan L.A. van de Snepscheut
  • RE: Logfiledaten

    Ich habe mal den NSScanner verwendet, um eine Metadatei von CVS zu parsen (CVS/Entries). Das hat prima funktioniert. Allerdings gebe ich Titan recht, dass durch die Boolean-Verkn¸pfung in der Tat komplexe Konstrukte entstehen kˆnnen. Wichtig ist halt auch, dass man in der Regel "blockweise" vorgeht, also in etwa: Lese ein bis zum Zeichen x, suche weiter bis zum Zeichen Y, lese ein bis zum Zeichen x, suche weiter bis zum Zeichen Y usw.
    Im Falle einer Logdatei kann man sich auch ¸berlegen, ob man mit der Funktion fscanf nicht schneller ans Ziel kommt.
    AcidWare.net - Better Software For Your Mac
  • RE: Logfiledaten

    Original von kay
    Ich versuche momentan den Inhalt eines Logfiles f¸r meinen "Logfilereader" verf¸gbar zu machen. Im Forum hat mir schon einer einen Tip gegeben, dafl das mit <b>NSScanner</b> funktionieren w¸rde. Hat jemand damit schon Erfahrungen gemacht? Oder vielleicht einen Link, zur einem Tutorial bereit?


    Hmm, vielleicht ein anderer Vorschlag. Logfiles werden (fast) immer sequentiell bearbeitet, dafl Einlesen ist also ziemlich einfach. Wieso arbeitest du nicht eine Ebene tiefer mit

    ggf. NSDirectoryEnumerator
    ggf. NSFileManager
    NSFileHandle

    Am Ende bekommst du ein NSData mit dem Inhalt der Logdatei. Mit der [NSData bytes] Memberfunktion bekommst du dann einen Pointer auf den Puffer.

    Nun kannst du den Puffer abwandern (einfach nach lf suchen, f¸r jeweils eine Zeile) und die Zeilen mit den "normalen" string.h Funktionen beackern.

    Ist nicht unbedingt cocoa like, aber f¸r diese einfache Funktion (Logfile auswerten) w¸rde ich mir nicht den Kopf zerbrechen :D

    Allerdings gibt es auch einen Weg, der mehr Arbeit bedeutet, aber daf¸r n‰her an der reinen Lehre ist (so wie das Apple haben will). Es gibt ein feines Framework von Mulle-Cybernetic, da sind auch Funktionen drin, wie man eine Textfile ZEILENWEISE einlesen/schreiben kann:

    mulle-kybernetik.com/software/…ks/download.html#EDCommon
    Es gibt genau 10 Sorten von Menschen.
    Die eine kennt das binaere Zahlensystem, die andere nicht.
  • RE: Logfiledaten

    Ich hatte auch mal eine App, die Server-Logfiles gelesen hat. Und NSScanner ging da ohne Probleme. Auch in meinem aktuellen Programm nehm ich NSScanner. f¸r eine einfache Suche brauche ich 4 Zeilen:

    scanner = [NSScanner scannerWithString: name];
    result = [name copy];
    [scanner scanUpToString:[Suche stringValue] intoString:&result];
    if (![result isEqual: name] || [scanner scanString: [Suche stringValue] intoString: nil]){
    // gefunden
    }

    warum das result = [name copy]; ?? Wenn du nach einem bestimmten Typ von Strings suchst (weis nicht mehr genau, welcher), dann wird result nicht beschrieben, was zur Folge hat, dass du bei ![result isEqual: name] YES zur¸ckbekommst, was du eigentlich nicht willst.

    grufl

    MAX