002
09.02.2004, 15:32 Uhr
ARM-Tec
|
Hallo,
weiß nicht genau, was hier nicht ANSI C/C++ sein soll? Weist Du noch eine Andere Möglichkeit? Wäre toll du hättest noch mehr Rat für mich.
CODE: Wie unten geschrieben.
PS: Bin für jeden Tipp dankbar.
C++: |
// Hilfvariablen zum Zerlegen und neuem generieren des Pfades. char s[_MAX_PATH]; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char file[_MAX_FNAME]; char ext[_MAX_EXT];
//Damit ein aktueller Dateiname generiert wird NameGenerieren();
// generierten Dateinamen in Hilsvariable speichern char * HistName = ""; HistName = Form1->SaveDialog1->FileName.c_str();
getcwd(s,_MAX_PATH); // Erhält aktuelles Arbeitsverzeichnis if (s[strlen(s)-1] != '\\') strcat(s,"\\"); // Hängt ein abschließendes Zeichen \ an _splitpath(s,drive,dir,file,ext); // Teilt den String in separate Elemente auf
strcat(dir,"Historien"); // Gibt das Verzeichnis an in dem die Datei gespeichert wird. strcpy(file,"\\Hist@"); // Praefix für die Historien - Dateien. Achtung! Escape-Sequenz '\\' für ein '\' strcat(file,HistName); // anhängen der Gerätespezifischen Daten Seriennummer usw. strcpy(ext,".RTF"); // Angabe des Dateiformat (Rich Text Format)
// Nun wird der Komplette Pfad gebildet und der Dateiname angehängt. char * HistDatei = "";
strcpy(HistDatei,drive); strcat(HistDatei,dir); strcat(HistDatei,file); strcat(HistDatei,ext);
/* Variablen die zum kopieren und schreiben in Datei benoetig werden. Sie erzeugen den Dateikopf, übernehmen die Eingegebenen Daten und tragen sie in die Datei ein.*/ char RahmenOU[100] = "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"; char RahmenLR[100] = "* *"; char Kopf[100] = "* G E R Ä T E I D E N T I F I K A T I O N *"; char Trennung[150] = "_____________________________________________________________________________"; char Leer[200] = " "; char Bezeichnung[20] = "Bezeichnung:"; char Seriennummer[20] = "Seriennummer:"; char Datum[20] = "Datum:"; char KommNummer[20] = "Kommision - Nr:"; char BaNummer[20] = "BA - Nummer:"; char Kunde[20] = "Kunde:"; char Vorangestellt[200];
//Lege Dateivariable an und oeffnet Datei zum Lesen ab 1. Zeile ofstream schreiben;
// Oeffnen der Datei fur die eine neue Seriennummer angelegt wurde // "app" bedeutet Coursor auf das Ende der Datei.
schreiben.open(HistDatei);
// Pruefen ob Datei geoefnnet wurde if (!schreiben) { //Hier noch eine Messagebox ausgeben das Daten nicht geöffnet werden konnte. Application->MessageBox("Die Datei konnte nicht angelegt oder geöffnet werden! \nÜberprüfen Sie das Verzeichnis auf die fehlende Datei.", "Hinweis", MB_OK); return; }
/* ************************** KOPF ******************** */ // Den vorbereiteten Rahmen für den Kopf schreiben an forgegebene Stelle schreiben, // an die der Coursor gesetzt wird.
schreiben << Leer << endl; schreiben << Leer << endl; schreiben.seekp(0,ios::app); schreiben << RahmenOU << endl; schreiben.seekp(0,ios::app); schreiben << RahmenLR << endl; schreiben.seekp(0,ios::app); schreiben << Kopf << endl; schreiben.seekp(0,ios::app); schreiben << RahmenLR << endl; schreiben.seekp(0,ios::app); schreiben << RahmenOU << endl; schreiben.seekp(0,ios::app); schreiben << Leer << endl; schreiben.seekp(0,ios::app); schreiben << Leer << endl; schreiben.seekp(0,ios::app); schreiben << Trennung << endl; schreiben.seekp(0,ios::app); schreiben << Leer << endl;
/* ************************** BEZEICHNUNG ******************** */
// Kopieren der Vorbereiteten Hilfsvariable StrCopy(Vorangestellt,Bezeichnung); // Speicher für Zeichen die eingelesenwerden anlegen char* Inhalt = new char[ Vorangestellt[0] + Form1->Edit1->Text.Length()]; StrCopy(Inhalt, Vorangestellt); StrCat(Inhalt, Form1->Edit1->Text.c_str()); // Inhalt an forgegebene Stelle schreiben, an die der Coursor gesetzt wird. schreiben.seekp(0,ios::app); schreiben << Inhalt; // Leere Zeichen vorschreiben int i; for( i = 0 ; i < 42 - Form1->Edit1->Text.Length() ; i++) { schreiben.seekp( 0 , ios::app); schreiben << Leer; }
delete [] Inhalt;
/* ************************** SERIENNUMMER ******************** */
// Kopieren der Vorbereiteten Hilfsvariable StrCopy(Vorangestellt,Seriennummer); Inhalt = new char[ Vorangestellt[0] + Form1->Edit2->Text.Length()]; StrCopy(Inhalt, Vorangestellt); StrCat(Inhalt, Form1->Edit2->Text.c_str()); // Inhalt an forgegebene Stelle schreiben, an die der Coursor gesetzt wird. schreiben.seekp(530,ios::beg); schreiben << Inhalt << endl; delete [] Inhalt;
/* ************************** LEERE ZEILE ********************* */
// Zwischenzeile einfuegen schreiben << Leer <<endl;
/* ************************** BA-NUMMER ********************** */
// Kopieren der Vorbereiteten Hilfsvariable StrCopy(Vorangestellt,BaNummer); Inhalt = new char[ Vorangestellt[0] + Form1->Edit5->Text.Length()]; StrCopy(Inhalt, Vorangestellt); StrCat(Inhalt, Form1->Edit5->Text.c_str()); // Inhalt an forgegebene Stelle schreiben, an die der Coursor gesetzt wird. schreiben.seekp(0,ios::app); schreiben << Inhalt; // Leere Zeichen vorschreiben for( i = 0 ; i < 29 - Form1->Edit5->Text.Length() ; i++) { schreiben.seekp( 0 , ios::app); schreiben << Leer; }
/* ************************** KOMMISINNUMMER ***************** */
// Kopieren der Vorbereiteten Hilfsvariable StrCopy(Vorangestellt,KommNummer); Inhalt = new char[ Vorangestellt[0] + Form1->Edit4->Text.Length()]; StrCopy(Inhalt, Vorangestellt); StrCat(Inhalt, Form1->Edit4->Text.c_str()); // Inhalt an Dateiende beschreiben. schreiben.seekp((587 + Form1->Edit2->Text.Length()),ios::beg); schreiben << Inhalt << endl;
/* ************************** LEERE ZEILE ******************** */ // Zwischenzeile einfuegen schreiben << Leer <<endl;
/* ************************** DATUM*************************** */
// Kopieren der Vorbereiteten Hilfsvariable StrCopy(Vorangestellt,Datum); Inhalt = new char[ Vorangestellt[0] + Form1->Edit3->Text.Length()]; StrCopy(Inhalt, Vorangestellt); StrCat(Inhalt, Form1->Edit3->Text.c_str()); // Inhalt an Dateiende beschreiben. schreiben.seekp(0,ios::app); schreiben << Inhalt; // Leere Zeilen vorschreiben for( i = 0 ; i < 43 - Form1->Edit3->Text.Length() ; i++) { schreiben.seekp( 0 , ios::app); schreiben << Leer; }
/* ************************** KUNDE ************************** */
// Kopieren der Vorbereiteten Hilfsvariable StrCopy(Vorangestellt,Kunde); Inhalt = new char[ Vorangestellt[0] + Form1->Edit6->Text.Length()]; StrCopy(Inhalt, Vorangestellt); StrCat(Inhalt, Form1->Edit6->Text.c_str()); // Inhalt an Dateiende beschreiben. schreiben.seekp((655 + Form1->Edit2->Text.Length() +Form1->Edit4->Text.Length()),ios::beg); schreiben << Inhalt << endl;
/* ************************** LEERE ZEILE ******************** */ // Zwischenzeile einfuegen schreiben << Leer << endl;
/* ************************** TRENNLINIE ******************** */ schreiben.seekp(0,ios::app); schreiben << Trennung << endl; /* ************************** LEERE ZEILE ******************* */ schreiben.seekp(0,ios::app); schreiben << Leer << endl;
// Datei wieder schliesen schreiben.close();
// Speicher wieder freigeben delete [] Inhalt; return; }
|
Bearbeitung von Pablo: |
Bitte, bei so einem laaaaaangen Code, CPP tags selber benutzen!!!
|
Dieser Post wurde am 09.02.2004 um 17:38 Uhr von Pablo editiert. |