String / Stringstream Frage

Dieses Thema im Forum "C/C++" wurde erstellt von tr0nix, 08.08.2003.

  1. #1 tr0nix, 08.08.2003
    Zuletzt bearbeitet: 08.08.2003
    tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Hallo zusammen

    Ich schreibe gerade eine Fehler/Loggingklasse und habe da ein kleines Problem.
    Wenn ich was loggen will, kann ich 2 Argumente mitgeben. Zuerst eine art "Level" (enum mit verschiedenen Werten) und als zweites einen String mit dem Fehlerbeschreib.
    Nun will ich aber im String einen Satz und eine Variable angeben koennen. Also wenn ich eine Datei oeffnen will will ich sagen koennen
    log( NOTICE, (string) "Konnte " <datei> " nicht oeffnen" );

    Wie mache ich das am schlausten? Geht das moeglicherweise mit stringstream?

    Gruss
    Joel

    P.S. Datei ist vom Typ string. Habe aber auch int-Werte!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 thorus, 08.08.2003
    Zuletzt bearbeitet: 08.08.2003
    thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    In C++ bin ich ned ganz fit, aber als alter C-Fanatiker würde ich das so machen:
    Code:
    char *tmp;
    sprintf(tmp, "Konnte %s nicht oeffnen", datei);
    log(NOTICE, tmp);
    
    cu
    thorus

    EDIT: Fataler Fehler ;)
    Speicher muß noch allokiert werden...

    Code:
    char *tmp;
    tmp = (char *)malloc((strlen(datei)+21)*sizeof(char));
    sprintf(tmp, "Konnte %s nicht oeffnen", datei);
    log(NOTICE, tmp);
    free(tmp);
    
     
  4. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Mh danke, aber ich wuerde den String gerne direkt mitgeben und nicht vorher noch in den Fehlermeldung-String reinkonvertieren.. das wuerde mich jedesmal 2 weitere Codezeilen kosten pro Fehlermeldung :/
     
  5. hopfe

    hopfe Haudegen

    Dabei seit:
    01.04.2003
    Beiträge:
    733
    Zustimmungen:
    0
    Ort:
    Aachen
    Warum wenn das als Funktion machst, brauchst das ganze nur einmal schreiben. Die zwei Zeilen werden zur Laufzeit nicht stark auffallen, da es sich ja um eine Fehlermeldung handelt.
     
  6. #5 tr0nix, 08.08.2003
    Zuletzt bearbeitet: 08.08.2003
    tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Ich habs mal so geloest:
    Ich deklariere in der Klasse welche die Fehler/Logmeldungen wirft eine private Stringstream Klasse.

    Code:
    	
    // To build error-msg's
    stringstream GLLogStream;
    
    Wenn ein Fehler auftritt, baue ich mit der bereits deklarierten Variable den Fehlertext und schicke ihn an die Methode zum loggen (GLLogger ist ein Pointer auf eine statische Methode einer anderen Klasse):
    Code:
    GLLogStream << "TEXMANAGER: Loading image " << filename <<
    				    " failed and no default image defined!" << endl;
    GLLogger( GLCRITICAL, GLLogStream );
    
    Da der String via Referenz uebermittelt wird, kann ich den gesetzten String in der Logging-Methode wieder leeren und wieder brauchen.
    Nur.. wie leere ich den Stringstream buffer? ;) *narf*

    // Edit
    Hat sich erledigt. Hab clear() vergessen ;)
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. hoza

    hoza Jungspund

    Dabei seit:
    16.08.2003
    Beiträge:
    10
    Zustimmungen:
    0
    So eher:

    Code:
    void
    DoLog(unsigned long severity, const char *fmt, ...) 
    {
    va_list start;
    
    va_start(start, fmt);
    
    fprintf(logfile, "<%u> ", severity);
    vfprintf(logfile, fmt, start);
    fprintf(logfile, "\n");
    
    va_end(start);
    
    return;
    
    Dann kannst nämlich ganz gemütlich
    DoLog(0, "%i attempts to write on %s failed", num, string);
    aufrufen :)
     
  9. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Also mit meiner Loesung bin ich zufrieden ;). Aber es sollen ja auch C'ler etwas davon haben hehe.
     
Thema:

String / Stringstream Frage

Die Seite wird geladen...

String / Stringstream Frage - Ähnliche Themen

  1. FIND mit UND-Verknüpfung im Suchstring

    FIND mit UND-Verknüpfung im Suchstring: Hallo, ich schaffe es einfach nicht bei folgendem Kommando die Suchoptionen zu erweitern, damit nur Dateien beginnend mit "T_*" aufgelistet...
  2. String auf Konsole ausgeben

    String auf Konsole ausgeben: Hallo zusammen, ich bin auf ein Problem gestoßen dass für mich sehr unverständlich ist, aber vllt übersehe ich auch etwas Offensichtliches. Es...
  3. String einer bestimmten Zeile durchsuchen

    String einer bestimmten Zeile durchsuchen: Hallo, wie kann ich den eine bestimmte Zeile einer Textdatei zerlegen und daraus ein Stück entnehmen? Ich suche nach der Zeile in der "model...
  4. alles außer letzte 4 strings

    alles außer letzte 4 strings: Hallo, ich habe verschieden lange Strings (Dateinamen) und möchte gerne den Dateinamen als Variable ausgeben: 1. Strings...
  5. Firefox erhält JavaScript-String-Optimierung

    Firefox erhält JavaScript-String-Optimierung: Eine Optimierung, die in Firefox 33 zu erwarten ist, wird für JavaScript-Strings wesentlich weniger Speicher benötigen. Damit wird in Firefox 33...