-
Gesamte Inhalte
297 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Fufialk
-
Vielen Dank, So ist das immer mit dem Wald und den Bäumen. Jetzt läuft es, wie ich es haben wollte.
-
Ich hab eine kleine Batchdatei geschrieben, an die ich per Drag & Drop einzelne Dateien zur Bearbeitung übergeben kann. Ich möchte jetzt aber mehrere Dateien gleichzeitig Übergeben, jedoch springt mein Programm nicht in die Schleife ein. #include <iostream.h> // cin, cout #include <fstream.h> // ifstream, ofstream #include <stdlib.h> // exit, rand #include <iomanip.h> // setw #include <conio.h> // getch #include <sys/stat.h> // stat #include <time.h> // ctime, time #include <stdio.h> int main(int argc, const char* argv[]) { int f = 1; // Zähler übergebene Dateien cout << "\nEs wurden " << argc -1 << " Dateien zur Bearbeitung Uebergeben."; // Hier wird die erste Datei, die ich übergeben habe richtig ausgegeben.... for (f=1; f==argc; f++) //ab hier folgt mein Code für die Bearbeitung {.....
-
Vielen Dank erst mal für die schnelle Hilfe. Leider hat es aber nicht funktioniert, da mir beim erneuten Versuch das Update einzuspielen als Fehlermeldung angezeigt wurde, dass das Update bereits installiert ist. Auch eine deinstallation und erneute Installation von Office hat das Problem nicht beheben. Vielleicht kennt ja jemand den oben erwähnten Schlüssel in der Registrierung.
-
Ich habe bisher immer Word2003 als Emaileditor genutzt. (Extras|Optionen|Emailformat|Emails mit Microsoft Word 2003 bearbeiten aktiviert) Seit ich ich das letzte Servicepack für Office 2003 eingespielt habe, erhalte ich nun die Fehlermeldung: dass die Schnittstelle nicht registriert ist. Dadurch können die Mails nicht verschickt werden. Habe schon die Reparierenfunktion von Office 2003 genutzt und das Paket neu installiert, jdoch ohne Erfolg. Kennt jemand das Problem und weiß einen Rat? Oder ist deinstallation und erneutes Installieren von Office notwendig?
-
Das heisst ich muss wenn die Verzeichnisse noch nicht vorhanden sind, diese über einen Befehl erstellen. Habe folgendes versucht: sprintf(filewrite,"C:\\Messdaten\\Auswertung\\CUT\\%02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); sprintf(partner,"C:\\Messdaten\\Auswertung\\Cut\\Extern\\%02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); cout << "\nDateiname : " << filewrite; // Kontrolle des Dateinamens ofstream ofl(filewrite, ios::out); [/PHP] Die Ordner Messdaten\Auswertung\CUT etc. wurden jedoch nicht erstellt. Und somit auch die Textfiles nicht in diese geschrieben. Wenn ich die Ordner vorher von Hand erstelle, landen auch die Daten dort, wo Sie hinsollen. Ich muss also mein Programm nur noch dazu bewegen, Ordner selbstständig nach von mir gewählten Parametern anzulegen, bzw. zu überprüfen, ob diese schon vorhanden sind, und gegebenenfalls neue Ordner (z.B. für jeden Monat) zu erstellen. Ich hoffe ich finde dazu eine Referenz hier im Forum. Falls jemand schon eine kennt, wäre es nett, den Link hier noch einmal zu posten.
-
OK, das werde ich probieren. Wenn ich generell einen ganz neuen, und für alle Files festen Pfad haben möchte, muss ich da noch irgendwelche Attribute beachten, dass auch neue Ordner und verzeichnisse erstellt werden? Oder geschieht das automatisch, wenn man als Benutzer schreib und Leserechte auf dem PC bzw. Laufwerk hat?
-
Also ich habe mein Programm jetzt folgendermassen angepasst: #include <iostream.h> // cin, cout #include <fstream.h> // ifstream, ofstream #include <stdlib.h> // exit, rand #include <iomanip.h> // setw #include <conio.h> // getch #include <sys/stat.h> // stat #include <time.h> // ctime, time #include <stdio.h> int main(int argc, const char* argv[]) { if (argc != 2) { printf("start the program with \"%s filename\"\n", argv[1]); printf("or drag and drop a file\n"); getch(); exit(0); } cout << "\nFolgende Datei wird verarbeitet : " << argv[1]; getch(); char filewrite[64]; // Dateiname der Auszugebenden Datei char partner[64]; char rep; // Kontrollvariable const Max = 16; struct ausgabeT { short blocka; short lengtha; int timea; short werta1; short werta2; short werta3; short werta4; short werta5; short werta6; short werta7; short werta8; short werta9; }; ausgabeT Tab[Max]; ifstream ifl(argv[1], ios::in|ios::binary); //öffnen der Datei zur Eingabe im Binärmodus if (!ifl) // Fehler beim öffnen der Datei { cerr << "\nFehler beim oeffnen der Datei! " << argv[1]; cout<< "\nDas Programm wird nach Tastendruck geschlossen."; getch(); exit (1); } struct stat buf; stat(argv[1], &buf); int groesse = buf.st_size; long zeit; ifl.seekg(2*sizeof(short), ios::beg); ifl.read((char*)&zeit, sizeof(int)); time_t timer; struct tm *tblock; tblock = localtime(&zeit); sprintf(filewrite,"CUT %02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); sprintf(partner,"Extern %02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); cout << "\nDateiname : " << filewrite; ofstream ofl(filewrite, ios::out); // schreiben der Kopfzeile // erster Datenblock ofl << setfill(' ') << setw(14) << "Block"; // Blocknummer ofl << setfill(' ') << setw(14) << "Werte"; // Anzahl der Werte im Block [/PHP] und dann geht die Umwanlung los. So weit so gut. Leider werden jetzt aber keine neuen Dateien mehr geschrieben, obwohl mir die Ausgabe: cout << "\nDateiname : " << filewrite; den Namen richtig ausgibt. In meiner ersten Version, wo ich den Namen der Umzuwandelnden Datei noch von Hand eingegeben habe, hat es jedoch funktioniert. Liegt es eventuell daran, dass ich den kompletten Pfad über argv[1] mit übergebe?
-
OK, da hast Du mich darauf gestossen. Ich bin davon ausgegangen, dass ich eine Dateinamenlänge von 64 Zeichen habe und habe char argv[64] gewählt. Jetzt stürzt das Programm auch nicht ab. Hast Du denn eine übersicht, welche Parameter in welcher Reihenfolge übergeben werden können, bzw. wo ich etwas dazu finde? Vielleicht kann ich noch ein paar weitere von diesen übernehmen.
-
OK, soweit ist das klar. Trotzdem bleibt es immer noch dabei, dass das Programm nach dem Start abstürzt. Ich gehe immer noch davon aus, dass ich den Speicher für irgendeine vorher Variable nicht richtig reserviert habe (ich denke mal, das es mein char* argv ist). Oder habe ich noch etwas anderes nicht beachtet?
-
Wenn ich die Zeile so übernehme, erhalte ich einen Fehler beim Compilieren: Warning W8057 C:\Auswertung\C++\CUT datkonvert 1.5.2.cpp 611: Parameter 'argc' is never used in function main(int,const char * *) Also muss ich den int-Parameter später doch noch irgendwie einsetzen, um das Programm zum Laufen zu bekommen.
-
Habe mein Problem schon im C/C++ Forum gepostet, und wurde von dort an Euch verwiesen. Ich hoffe Ihr könnt mir jetzt weiterhelfen. Ich habe ein Programm in C++ geschrieben, mit dem ich datensätze auslesen und schreiben kann. Bisher erfolgte der Start und die Auswahl der auszulesenden Datei von hand. Ich suche jetzt eine Lösung, die mir das Eingeben des Dateinamens erspart (Drag&Drop). Ich poste hier auch mal meinen bisherigen Code: #include <iostream.h> // cin, cout #include <fstream.h> // ifstream, ofstream #include <stdlib.h> // exit, rand #include <iomanip.h> // setw #include <conio.h> // getch #include <sys/stat.h> // stat #include <time.h> // ctime, time #include <stdio.h> void main(const char* argv[64]) { char filewrite[64]; char partner[64]; char rep; const Max = 16; struct ausgabeT { short blocka; short lengtha; int timea; short werta1; // hier geht es noch weiter, ist aber für mein Problem belanglos }; ausgabeT Tab[Max]; ifstream ifl(argv[64], ios::in|ios::binary); struct stat buf; stat(argv[64], &buf); int groesse = buf.st_size; long zeit; ifl.seekg(2*sizeof(short), ios::beg); ifl.read((char*)&zeit, sizeof(int)); time_t timer; struct tm *tblock; tblock = localtime(&zeit); sprintf(filewrite,"CUT %02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); [/PHP] Wenn ich eine Datei auf mein Programmicon ziehe und loslasse, startet das Programm zwar, aber es Stürzt sofort ab und gibt folgende Fehlermeldungen aus: [code] Die Anweisung in "0x00401036" verweist auf Speicher in "0x00000102". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden. Die Ausnahme "unknown software exception" (0xc0000027) ist in der Anwendung an der Stelle 0x77e76153 aufgetreten. [/code] Ich hoffe jemand von Euch sieht den Fehler, der sich bei mir eingeschlichen hat.
-
Kannst Du das mit den Parametern bitte etwas genauer erläutern? Ich habe in einem anderen Forum einen Ansatz gefunden, und diesen dann weiterverarbeitet. Es ging dort um eine Möglichkeit, Dateien zu löschen. Ich poste mal den Code: #include <stdio.h> #include <stdlib.h> // exit, rand #include <conio.h> // getch void main(int argc, const char* argv[]) { if (argc != 2) { printf("start the program with \"%s filename\"\n", argv[0]); printf("or drag and drop a file\n"); exit(0); } if (remove(argv[1]) == -1) perror("Could not delete file"); else printf("Deleted %s\n", argv[1]); getch(); } Dieses Programm läuft bei mir Problemlos. Nur mit dem Zusammenmischen von beiden komme ich nicht hin. Der Haken ist sicherlich klein, aber ausschlaggebend. Vielleicht hast Du ja eine Meinung dazu.
-
Ich möchte die datei auf das Symbol meiner Anwendung ziehen, und dann soll diese starten und die Umwandlung vornehmen. So weit bin ich bisher: #include <iostream.h> // cin, cout #include <fstream.h> // ifstream, ofstream #include <stdlib.h> // exit, rand #include <iomanip.h> // setw #include <conio.h> // getch #include <sys/stat.h> // stat #include <time.h> // ctime, time #include <stdio.h> void main(const char* argv[64]) { char filewrite[64]; char partner[64]; char rep; const Max = 16; struct ausgabeT { short blocka; short lengtha; int timea; short werta1; // hier geht es noch weiter, ist aber für mein Problem belanglos }; ausgabeT Tab[Max]; ifstream ifl(argv[64], ios::in|ios::binary); struct stat buf; stat(argv[64], &buf); int groesse = buf.st_size; long zeit; ifl.seekg(2*sizeof(short), ios::beg); ifl.read((char*)&zeit, sizeof(int)); time_t timer; struct tm *tblock; tblock = localtime(&zeit); sprintf(filewrite,"CUT %02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); [/PHP] Das Programm wird jetzt gestartet, stürzt aber sofort mit diversen Fehlermeldungen ab. [code] Die Anweisung in "0x00401036" verweist auf Speicher in "0x00000102". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden. Die Ausnahme "unknown software exception" (0xc0000027) ist in der Anwendung an der Stelle 0x77e76153 aufgetreten. [/code] Das deutet ja meines Wissens darauf hin, dass ich den Speicher nicht korrekt reserviert habe. Ich erkenne jedoch keinen Fehler. Ich hoffe, dass jemand von Euch diesen sieht. Muss eventuell mein [b][color=Red]argv[64][/color][/b] vorher definiert werden?
-
Kannst Du mir da vielleicht noch einen kleinen Tip zum Einstieg geben? Ich muss doch sicherlich erst einmal eine Routine haben, dass, das Testprogramm überhaupt erst einmal auf den Drop reagiert. Bisher passiert nämlich nichts, wenn ich eine Datei per D&D auf mein Programm ziehe. Also es öffnet sich nicht einmal. In meinen C++ Grundlagen-Büchern steht dazu leider auch nichts. Und im Forum hier habe ich über die Suche auch nichts derartiges Gefunden, Also einen Befehl, oder ein Skript, was D&D für mein Programm überhaupt erst einmal ermöglicht.
-
Ich möchte gerne wissen, wie es funktioniert. Das es funktioniert, darüber bin ich mir ja recht sicher, da ich das schon bei Programmen gesehen hab. Aber in die kann man leider nicht reinschauen, um zu sehen, wie das entsprechende Skript aufgebaut sein muss.
-
Hallo, Ich habe ein fertiges C++ Programm, welches ich jetzt komfortabler gestalten möchte. Das Programm dien zur Umwandlung von Binärdaten in lesbare Daten. Der Dateiname wird automatisch erzeugt. Es geht mir jetzt darum, das ganze etwas komfortabler zu gestalten. Bisher erfolgt immer noch eine Abfrage des Dateinamens der Binärdatei. Dies möchte ich umgehen, um Fehler, die bei der Eingabe entstehen können, zu vermeiden. Ich hatte dabei an Drag & Drop gedacht. Sprich der Anwender soll die gewünschte Datei einfach auf das Programmicon ziehen, und dieses damit automatisch starten. Bin ich da hier an der richtigen Adresse?
-
Genau, vielen Dank für die Hilfe, es sieht jetzt so aus, und funktioniert hervorragend. long zeit; ifl.seekg(2*sizeof(short), ios::beg); ifl.read((char*)&zeit, sizeof(int)); time_t timer; struct tm *tblock; tblock = localtime(&zeit); sprintf(filewrite,"%02d%02d%04d.txt",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); cout << "\nDateiname : " << filewrite; Ich war vorher nur immer davon ausgegangen, das localtime nur das aktuelle Datum anzeigt, was mich etwas verwirrt hat. Schönen abend noch. Ich kann fürs erste einmal ruhig schlafen.
-
Der Speicher wird doch über die #include <time.h> allociert, oder täusche ich mich da? Ich meine sonst würde das Problem ja auch beim anderen Fall, wo nur von der länge short einlese, auch ein Fehler entstehen.
-
Ehrlich gesagt weiß ich das nicht. Ich hab mich völlig auf folgendes Beispiel bezogen: Thread vom 29.04.2004 Und da wurde es ähnlich gemacht. Du meinst ich muss noch die Funktion time_t noch hinzufügen?
-
Ich möchte gerne das Datum aus einem Hexstream auslesen, und dieses dann anzeigen lassen bzw. später als Dateinamen für den Stream verwenden. Der Stream beginnt so: 02 00 20 00 71 1c c7 42 00 00 00 00 00 00 00 00 ......... Der unterstrichene Teil bezeichnet dabei Datum und Uhrzeit, die ich anzeigen, bzw. später verwenden möchte. Mein Code sieht derzeit so aus: struct tm *tblock; ifl.seekg(2*sizeof(short), ios::beg); ifl.read((char*)&tblock, [U]sizeof(int)[/U]); cout << tblock; bis hier läuft alles richtig, und die korrekte Hexfolge wird angezeigt. (71 1c c7 42) Weiter geht es dann so: printf("%02d%02d%04d",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); Es lässt sich auch alles ohne Probleme compilieren, jedoch stürzt das Programm beim ausführen ab. Windows Fehler: Die Anweisung "read" konnte nicht ausgeführt werden! Verändere ich den oberen Code wie folgt (unterstrichene Stelle): struct tm *tblock; ifl.seekg(2*sizeof(short), ios::beg); ifl.read((char*)&tblock, [U]sizeof(short)[/U]); cout << tblock; läuft das Programm durch, aber beim Datum wird murks angezeigt. Der Dateiname (42C86DF0.dat) enthält auch das Datum, und wird vom Benutzer eingegeben: char fileread[13] cout << "\n\nGeben Sie den Dateinamen der zu bearbeitenden Datei ein: "; cin.getline(fileread, 13); Vielleicht besteht ja auch die Möglichkeit darauf zuzugreifen.
-
Habe jetzt mal eine Weile rumgespielt und ältere und bereits verworfene Codefragmente untersucht, und hab folgende Lösung gefunden: struct tm *tblock; tblock = localtime( &buf.st_mtime ); sprintf(filewrite,"CUT %02d %02d %04d.txt",tblock->tm_mday-1,tblock->tm_mon+1,tblock->tm_year+1900);
-
Das es Quatsch ist, habe ich ja schon bemerkt. Ich will halt einfach meiner datei, die ich schreibe das Datum zuweisen, das ich aus einer anderen Datei auslese. Das auslesen funktioniert ja auch. Die Anzeige mit: cout<< ("Erstellungsdatum : %s", ctime( &buf.st_mtime ) ); ebenso. Mein Gedanke war, wenn ich die Zeile so am Bildschirm ausgeben kann, kann ich die auch in meine Variable filewrite packen, und habe den Dateinamen. Also wo hinke ich? Wenn ich folgenden Code verwende: sprintf(filewrite,"CUT %s.txt",ctime (&buf.st_mtime)); Erhalte ich nach Programmablauf sogar die Meldung, dass meione Datei unter dem Namen:" CUT Thu Feb 07 14:39:36 2002" gespeichert wurde. Jedoch ist die Datei nicht vorhanden....
-
Also die Ausgabe funktioniert ja auch wunderbar. Ich kann den String jedoch nicht als Dateinamen verwenden. Beim Kompilieren erhalte ich immer eine Fehlermeldung. (Cannot convert 'char *' to 'char[]' in function main()) struct stat buf; stat(fileread, &buf); int groesse = buf.st_size; cout<< ("Erstellungsdatum : %s", ctime( &buf.st_mtime ) ); char filewrite[] = ("CUT %s", ctime( &buf.st_mtime) ); Vorher hatte ich immer eine Eingabe, die ich nun weglassen will, weil das datum in meinem Fall eine Eindeutige Zuordnung für die datei darstellen würde.