Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Folgendes Problem:

Bei einer zu bearbeitenden Datei ist ein Datum als Hexwert im Dateinamen angegeben, z.B.: 43542CF0.DAT dieses möchte ich gerne in ein lesbares Format umwandeln und als Namen übergeben, zum Beispiel 18 11 2005.txt

Derzeit entnehme ich diesen Zeitstempel immer direkt aus der Datei, mit:


struct stat buf;

stat(argv[f], &buf);

groesse = buf.st_size;


ifl.seekg(2*sizeof(short), ios::beg); // an dieser Stelle im File sind Datum & Uhrzeit hinterlegt

ifl.read((char*)&zeit, sizeof(int));


time_t timer;

struct tm *tblock;

tblock = localtime(&zeit);

sprintf(filewrite,"C:\\Messdaten\\Auswertung\\CUT\\%02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900);

Das Problem ist, dass bei einigen Dateien das im File hinterlegte Datum nicht stimmt, was teilweise sogar zum Programmabsturz führt, was ich gerne vermeiden möchte.

Meine Überlegung:

Da der Dateiname immer die selbe Länge hat, und die Dateien immer im selben Verzeichnis liegen, sollte der Zeitstempel, also für unser Beispiel: 43542CF0 mit Hilfe eines Array recht einfach zu separieren sein, wie kann ich diesen wert jedoch meiner Variable zeit zuweisen?

  • Autor
Meine Überlegung:

Da der Dateiname immer die selbe Länge hat, und die Dateien immer im selben Verzeichnis liegen, sollte der Zeitstempel, also für unser Beispiel: 43542CF0 mit Hilfe eines Array recht einfach zu separieren sein, wie kann ich diesen wert jedoch meiner Variable zeit zuweisen?

Da habe ich mich wohl etwas zu weit aus dem Fenster gelehnt.

Ich übergebe den Dateinamen per Drag&Drop über die Variable argv[1]:


int main(int argc, const char* argv[])

erhalte den kompletten Pfad : C:\Pfad\4320C271.DAT

zeit = strtol(argv[1],0, 16);

liefert jetzt ein falsches Ergebnis. Ich benötige also noch eine Funktion, die mir nur den Namen der Datei aus argv[1] ausgibt.

Wie wäre es mit: Stringfunktionen?

Die Prosition des letzten "/" ermitteln und evt. noch die Position des letzten "." . Dazwischen liegt Dein Dateiname.

char *strrchr(const char*zeichenkette, int zeichen).

Oder z.B. die Stringlänge ermitteln und die letzten 19 Zeichen herauskopieren

  • Autor

Du meinst etwa mit folgendem Fragment:


char *strrchr( const char *argv[1], '134'); // 134 = Dez für \
cout << strrchr; // sollte dann nur den Dateinamen 43542CF0.DAT ausgeben
[/PHP]

Habe ich noch zwei Fehlermeldungen drin:

Expression syntax in function main(int,char * *)

) expected in function main(int,char * *)

genau in dieser Zeile. Leider findet sich in der cpprefference auch nicht mehr als Hinweis.

  • Autor

Hab es zum Glück selbst gemerkt. Naja und auch hier im Forum den Einstieg zur Lösung gefunden.


char* find = strrchr(argv[f], '\\'); //letztes "\" finden
strncpy(fwrite,find+1, 12); //alles ab "\" kopieren und fwrite zuweisen

[/PHP]

Vielen Dank an alle, die mich auf den rechten Weg gewiesen haben, und einen schönen Abend noch.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.