Name einer Datei aussuchen

P

Paper

Guten Morgen ihr Programmier meister :)
Mein Titel erklärt mein Problem jetzt nicht wirklich, mir ist aber kein besserer Titel eingefallen :)

Meine Frage ist folgendes. Ich gebe mal ein Beispiel.

Wir haben ein Programm das uns eine Logdatei ausließt diese verändert und wieder abspeichert.

Meine Frage ist jetzt.
Ist es möglich das der Name der Datei nicht fest im Quellcode gegeben ist, sondern der User einen Namen angeben kann wie die Datei heißen soll?
Zum Beispiel acces%heutigesDatum%.log oder so

Mit freundlichen Grüßen
Paper
 
Hi

natürlich ist das möglich.
Welche Programmart ist es denn (Konsole?)

Und seoll der Benutzer wirklich "%heutigesDatum%" oÄ. eingeben,
dass dann durch das echte Datum ersetzt wird,
oder war das jetzt nur im Forum als Platzhalter gedacht?
 
Hallo sheel,

Ja genau es ist in einer Konsole :)

%heutigesDatum% war als PLatzhalter gedacht, hab es doof erklärt.
Das die Eingabe z.B "Acces" ist und das heutige Datum wird halt automatisch dahinter gehangen für jeden Tag wo es gespeichert wird. :)
 
Ah, Moment.
Ich glaub, hab was falsch verstanden.

Du willst keinen Log erstellen, sondern eine vorhandene Datei auslesen?
Bzw. mehrere alte Dateien von verschiedenen Zeitpunkten?

In welchem Format ist denn das Datum?
Für 01.01.2000 "Acces01012000.log", oder ist da auch eine Uhrzeit dabei,
oder das Jahr zuerst, oder...?

Ist es für die erarbeitung wichtig, wann die Logdatei erstellt wurde,
oder ist das im Prinzip nur zum Datei-unterscheiden?
 
Also ich habe ein Programm das einen Squid ausliesst nenn wir den "Squid1". Den Unix Timestamp der da drin steht den Wandelt er in ein Datum + Uhrzeit um. Soweit funktioniert es auch. Und diese Umwandlung schreibt er nochmal in eine andere txt Datei. Ich hab es aber nur so das es im Quellcode angegeben ist wie die Datei heißt. Ich zeige euch mal den Code.


C:
//Festlegen des Pfades für die Output-Datei
  FILE *fileOutput;
  fileOutput = fopen("SquidNEU.log", "w");
 
 
 
  //Überprüfung, ob Datei vorhanden ist
  if(NULL == fileOutput) {
    fprintf(stderr, "Fehler beim Oeffnen ...\n");
    return EXIT_FAILURE;
  }
 
  //Festlegen des Pfades für die Input-Datei
  FILE *fileInput;
  fileInput = fopen("squid123.log", "r");
 
  //Überprüfung, ob Datei vorhanden ist
  if(NULL == fileInput) {
    fprintf(stderr, "Fehler beim Oeffnen ...\n");
    return EXIT_FAILURE;

und wie man sieht, bei der Output und Input Datei ist der Name fest angegeben. Meine frage halt ob es möglich ist dort den Namen Variabel zu machen=)


In welchem Format ist denn das Datum?
Für 01.01.2000 "Acces01012000.log", oder ist da auch eine Uhrzeit dabei,
oder das Jahr zuerst, oder...?

Ja genau so kann man es machen wie du geschrieben hast "Access0101200.log" hauptsache das noch das Datum dabei steht :)



Hallo,
also ich würde es durch <string.h> und/oder <string> realisieren.
Die Uhrzeit dürftest du durch <time.h> bekommen, wenn nicht schon vorhanden.

Hmm..Nur ich weiß halt nicht wie ich es so hinkriege das es im Dateinamen steht.. :)
 
Zuletzt bearbeitet von einem Moderator:
Zuerst liest du mit gets das Wunsch-Präfix in ein zB. "char prefix[1024]" ein.
Kopier das mit strcpy in einen zweiten String (hier format)
und häng mit strcat "%8d.log" an format an.

Such mit FindFisrFile bzw. FindNextFile das ganze Verzeichnis durch.

Auf jeden Dateinamen machst du ein
C++:
sscanf(...dateiname..., format, &datum)
wobei datum ein int ist.
Wenn der Returnwert von sscanf 1 ist,
hast du eine passende Logdatei.

Verarbeiten.

Den neuen Dateinamen für die Ausgabedatei bekommst du mit
C++:
sprintf(x, "%s%8dNeu.log", prefix, datum);
in einen String x.
 
hmm ich weiß zwar was du meinst..aber mit der umsetzung klappts i.wie nicht...habe nicht wirklich 'ne Ahnung wie ich das da rein bringen soll :/
 
C:
int logConvert()
{
//Wunsch-Präfix
char namee[1024]; 
char format;

//string kopieren
strcpy (format, namee);
strcat (format, "%8");

 
  //Zwischenspeicher fürs Einlesen
  char puffer[256];
  int line= sizeof(puffer);
 
  //Trennzeichen
  char del[]="\n";
 
  //Zählvariabeln
  int i =0;
 
  //Festlegen des Pfades für die Input-Datei
  FILE *fileOutput;
  fileOutput = fopen("SquidNEU.log", "w");
 
 
 
  //Überprüfung, ob Datei vorhanden ist
  if(NULL == fileOutput) {
    fprintf(stderr, "Fehler beim Oeffnen ...\n");
    return EXIT_FAILURE;
  }
 
  //Festlegen des Pfades für die Output-Datei
  FILE *fileInput;
  fileInput = fopen("squid123.log", "r");
 
  //Überprüfung, ob Datei vorhanden ist
  if(NULL == fileInput) {
    fprintf(stderr, "Fehler beim Oeffnen ...\n");
    return EXIT_FAILURE;
  }
 
  //solange Zeilen vorhanden sind wird eingelesen
  while(fgets (puffer, line, fileInput))
    {
/// neue Zeilen
      int len;
      int uxtime;
      if (sscanf(puffer, "%d.%*d%n", &uxtime, &len) >= 1) {
        fprintf(fileOutput, "%s %s", Unix2Date(uxtime, 1), puffer + len);
      }
////
    }
 
 
 
 
  //Schließen der Dateien
  fclose(fileInput);
  fclose(fileOutput);
}

habs nochmal versucht alles schritt für schritt und folgende Meldung bekomme ich

213 [Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast
214 [Warning] passing arg 1 of `strcat' makes pointer from integer without a cast
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück