Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char produkt[80], blatt1[15][80];
- char blatt2[11][11][80];
- char blatt3[6][80];
- char verzeichnis[] = "C:\\Users\\awiedenfeld\\Documents\\Seminar\\C-Schulung\\ConfigTool\\Fragebogen\\";
- char dateipfad[264];
- int blatt3_vis;
- void einlesen(int trigger, char *datei_uebergabe) //Aufruf zum Programmstart "einlesen(1, NULL)", um Datei Fragebogen einzulesen "einlesen(2, <Dateiname>)
- {
- int i, j;
- // int m, n; //Wenn zur Überpüfung des Codes bei einer der Ausgabeteile die Kommentarzeichen entfernt werden, müssen diese auch hier entfern werden
- FILE *datei; //Dateizeiger initialisieren
- if(trigger == 1) //Welche Einlesevariante wurde gewählt? (1 = Nur Blatt1 und Blatt2 einlesen bei Programmstart, 2 = Fragebogen einlesen)
- {
- datei = NULL;
- memset(dateipfad, 0 , 264); //Dateipfad nullen
- strcat(dateipfad,verzeichnis); //Verzeichnis in Dateipfad schreiben
- strcat(dateipfad,"blatt1.cfg"); //Dateinamen von Blatt1 an dateipfad anhängen
- datei = fopen(dateipfad, "r+"); //Datei öffnen
- for(i=0; i<15; i++) //Schleife läuft so oft, wie die erste Dimension von blatt1[][] gross ist
- {
- memset(blatt1[i], 0, 80); //blatt1 nullen
- }
- if(datei == NULL)
- {
- printf("Die Datei %s konnte nicht gefunden werden", dateipfad);
- }
- else
- {
- j = 0;
- while(feof(datei) == 0) //Schleife solange durchlaufen, bist Ende der Datei erreicht ist
- {
- fgets(blatt1[j], 80, datei); //Zeile aus Datei in array blatt1 schreiben
- if(blatt1[j][strlen(blatt1[j])-1] == 10) //Wenn letztes Zeichen der geschrieben Zeile im Array eine 10 ist (Zeilenumbruch)....
- {
- blatt1[j][strlen(blatt1[j])-1] = 0; //...tausche Sie mit einer 0 aus (So werden die Zeilenumbrüche verhindert)
- }
- j++;
- }
- /* m = 0; //Zum Überprüfen des Codes die Kommetarzeichen entfernen. Dadurch wird dann das eingelesene aus den Arrays wieder ausgegeben
- for(m=0; m<15; m++)
- {
- puts(blatt1[m]);
- }*/
- }
- fclose(datei); //Datei schliessen
- datei = NULL; //Dateizeiger wieder nullen
- memset(dateipfad, 0 , 264); //dateipfad wieder nullen
- strcat(dateipfad,verzeichnis); //Verzeichnis in dateipfad schreiben
- strcat(dateipfad,"blatt3.cfg"); //Dateinamen von Blatt3 an dateipfad anhängen
- datei = fopen(dateipfad, "r+"); //Datei öffnen
- for(i=0; i<6; i++) //Schleife läuft so oft, wie die erste Dimension von blatt3[][] gross ist
- {
- memset(blatt3[i], 0, 80); //blatt3 nullen
- }
- if(datei == NULL)
- {
- printf("Die Datei %s konnte nicht gefunden werden", dateipfad);
- }
- else
- {
- j = 1;
- while(feof(datei) == 0) //Schleife solange durchlaufen, bist Ende der Datei erreicht ist
- {
- fgets(blatt3[j], 80, datei); //Zeile aus Datei in array blatt3 schreiben
- if(blatt3[j][strlen(blatt3[j])-1] == 10) //Wenn letztes Zeichen der geschrieben Zeile im Array eine 10 ist (Zeilenumbruch)....
- {
- blatt3[j][strlen(blatt3[j])-1] = 0; //...tausche Sie mit einer 0 aus (So werden die Zeilenumbrüche verhindert)
- }
- j++;
- }
- /*m = 0; //Zum Überprüfen des Codes die Kommetarzeichen entfernen. Dadurch wird dann das eingelesene aus den Arrays wieder ausgegeben
- for(m=0; m<6; m++)
- {
- puts(blatt3[m]);
- }*/
- }
- fclose(datei); //Datei schliessen
- }
- else //Wenn als Einlesevariante "2" (Fragebogen einlesen) übergeben worden ist
- {
- datei = NULL; //Dateizeiger wieder nullen
- memset(dateipfad, 0 , 264); //dateipfad wieder nullen
- strcat(dateipfad,verzeichnis); //Verzeichnis in dateipfad schreiben
- strcat(dateipfad,datei_uebergabe); //An Funktion übergebener Dateinamen dateipfad anhängen
- strcat(dateipfad,".txt"); //Dateiendung hinzufügen
- datei = fopen(dateipfad, "r+"); //Datei öffnen
- int kopieren; //Überprüfungsvariable
- if(blatt2[1][0][0] == 0) //Wenn der erste Buchstabe der ersten Kategorie im Array blatt2 leer ist (blatt2[1][0][0] ist das erste belegbare Feld im Array blatt2)...
- {
- kopieren = 1; //...dann setze Überprüfungsvariable auf 1
- }
- else //... sonst
- {
- printf("Es sind noch Daten im Speicher vorhanden. Fortfahren und Daten überschreiben (1 = ja, 0 = nein)?\n"); //Scheinbar sind noch Daten im Speicher. Nachfragen ob diese überschrieben werden sollen.
- int kopieren_temp; //Zur Sicherheit und zur Überprüfung der folgenden Eingabe, wird eine temp-variable inistialisiert
- scanf("%d", &kopieren_temp); //Eingabe der Auswahl in temp-variable
- if(kopieren_temp == 1) //Wenn "1" (Ja) eingegeben worden ist....
- {
- kopieren = 1; //...dann setze Überprüfungsvariable auch auf "1"
- }
- }
- if(kopieren == 1) //wenn Überprüfungsvariable "1" enthält
- {
- for(i=0; i<11; i++) //Schleife läuft so oft, wie die erste Dimension von blatt2[][][] gross ist
- {
- for(j=0;j<11;j++) //Schleife läuft so oft, wie die zweite Dimension von blatt2[][][] gross ist
- {
- memset(blatt2[i][j], 0, 80); //blatt2 nullen
- }
- }
- if(datei == NULL)
- {
- printf("Die Datei %s konnte nicht gefunden werden", dateipfad);
- }
- else
- {
- j = 0;
- char tmp[80]; //initialisiere ein temporäres Char-Array (Hier werden die Zeilen aus der Datei zur Überprüfung reingeschrieben)
- while(feof(datei) == 0) //Schleife solange durchlaufen, bist Ende der Datei erreicht ist
- {
- fgets(tmp, 80, datei); //Zeile aus Datei in temporäres array schreiben
- if(tmp[strlen(tmp)-1] == 10) //Wenn letztes Zeichen der geschrieben Zeile im Array eine 10 ist (Zeilenumbruch)....
- {
- tmp[strlen(tmp) -1] = 0; //...tausche Sie mit einer 0 aus (So werden die Zeilenumbrüche verhindert)
- }
- switch(tmp[0]) //Was ist das erste Zeichen im temporären Array?
- {
- case 37 : blatt3_vis = (int)tmp[1] - 48; break; //Wenn 37 (=%), dann schreibe den Wert des zweiten Feldes des temporären Arrays in die Variable blatt3_vis (diese variable regelt die Sichtbarkeit des dritten Blattes. Der rechner liest aus dem temporären Array den AsciiCode aus (Wenn eine "1" da steht, dann eine 49). Daher wird bei der Zuweisung nochmal 48 subtrahiert. ("1" bzw 49 steht im Feld, 49 - 48 ergibt wieder die "1", die nun in die integer variable gepseichert werden kann))
- case 35 : strcpy(produkt, tmp); break; //Wenn 35 (=#), dann schreibe den Inhalt des temporären Arrays in das produkt-array
- case 91 : strcpy(blatt2[tmp[1] - 48][0], tmp); break; //Wenn 91 (=[), dann schreibe den Wert des temporären Arrays in die richtige zeile von blatt2 (Bei einer eckigen klammer handelt es sich um eine Kategorie. Diese Werden immer in blatt2[i][0] gespeichert. Das i muss auf gleiche weise ermittelt werden, wie vorher bei dem %-zeichen (in tmp[1] steht z.b. die 1 für die Kategorienummer. Diese wird aber als AsciiCode (49) zurück gegeben. Daher wird erneut 48 abgezogen, um wieder die richtige Kategorienummer zu erhalten))
- case 123 : strcpy(blatt2[tmp[1] - 48][tmp[3] - 48], tmp); break; //Wenn 123 (={) dann schreibe den Wert des temporären Arrays in die richtige Zeile von blatt2 (Bei einer geschwungenen Klammer handelt es sich immer um eine Frage. Diese werden immer in blatt2[i][j] gespeichert. Das i muss erneut wie vorher bei den Kategorien ermittelt werden. Das j wird ähnlich ermittelt, nur das hier auf das dritte Feld des temporären Arrays zurück gegriffen wird (hier stehen die Nummern der fragen))
- }
- j++;
- }
- /*m = 0; //Zum Überprüfen des Codes die Kommetarzeichen entfernen. Dadurch wird dann das eingelesene aus den Arrays wieder ausgegeben
- for(m=0; m<11; m++)
- {
- for(n=0; n<11; n++)
- {
- puts(blatt2[m][n]);
- }
- }*/
- }
- }
- fclose(datei); //Schliesse Datei
- }
- }
- void vorschau(int blatt) //Aufruf z.B. über "vorschau(1)" Die übergebene zahl gibt an, was ausgegeben werden soll. 1 = Nur Blatt1, 2 = Nur Blatt2, 3 = Nur Blatt3, 4 = gesamter Fragebogen
- {
- int i, j;
- if(blatt2[1][0][0] == 0) //Wenn der erste Buchstabe der ersten Kategorie im Array blatt2 leer ist (blatt2[1][0][0] ist das erste belegbare Feld im Array blatt2)...
- {
- printf("Es ist kein Fragebogen im Speicher vorhanden.\n"); //...dann ist scheinbar kein Fragebogen im Speicher vorhanden
- }
- else //...sonst
- {
- switch(blatt) //Switch für die übergebene Zahl (also, was augegeben werden soll)
- {
- case 1 : //Wenn nur Blatt 1 ausgegeben werden soll
- {
- i = 0;
- printf("[Blatt 1]\n\n"); //Schreibe erstmal die Überschrift für das erste Blatt
- while(blatt1[i][0] != 0) //Durchlaufe die Schleife solange das erste Zeichen einer Zeile in blatt1 keine 0 ist
- {
- printf("%s\n", blatt1[i]); //Gebe die Zeile aus
- i++;
- }
- break;
- }
- case 2 : //Wenn nur Blatt 2 ausgegeben werden soll
- {
- i = 1;
- printf("[Blatt 2]\n\n"); //Schreibe erstmal die Überschrift für das zweite Blatt
- while(blatt2[i][0][0] != 0) //Durchlaufe die Schleife solange das erste Zeichen einer Kategorie in blatt2 keine 0 ist (In blatt2[i][0][0] stehen immer die Kategorien)
- {
- printf("\n%s\n", blatt2[i][0]); //Gebe die Kategorie aus
- j = 1;
- while(blatt2[i][j][0] != 0) //Durchlaufe die Schleife solange das erste Zeichen einer Frage keine 0 ist (in blatt2[i][>0] stehen immer die Fragen zu der Kategorie in blatt2[i][0])
- {
- printf("%s\n", blatt2[i][j]); //Gebe die Frage aus
- j++;
- }
- i++;
- }
- break;
- }
- case 3 : //Wenn nur Blatt 3 ausgegeben werden soll
- {
- printf("[Blatt 3]\n\n"); //Schreibe erstmal die Überschrift für das dritte Blatt
- if(blatt3_vis == 1) //Ist Blatt3 auf sichtbar gestellt? (1 = Ja, 0 = nein)
- {
- printf("Blatt 3 wird im Fragebogen angezeigt\n"); //Gebe aus, das Blatt 3 im Fragebogen sichtbar ist
- i = 1;
- while(blatt3[i][0] != 0) //Durchlaufe die Schleife solange das erste Zeichen einer zeile in blatt3 eine 0 ist (Beginnt bei 1, da im Feld 0 das zeichen für die Sichtbarkeit des dritten Blattes steht, und dieses nicht mehr ausgegeben werden muss)
- {
- printf("%s\n", blatt3[i]); //Gebe die zeile aus
- i++;
- }
- }
- else //Wenn Blatt3 als nicht sichtbar gekennzeichnet ist...
- {
- printf("Blatt 3 wird im Fragebogen nicht angezeigt."); //...gebe aus, das Blatt 3 im Fragebogen nicht angezeigt wird
- }
- break;
- }
- case 4 : //Wenn der komplette Fragebogen ausgegeben werden soll, mache alles wie oben, nur nacheinander mit ein paar Zeilenumbrüchen
- {
- i = 0;
- printf("[Blatt 1]\n\n");
- while(blatt1[i][0] != 0)
- {
- printf("%s\n", blatt1[i]);
- i++;
- }
- i = 1;
- printf("\n\n\n[Blatt 2]\n\n");
- while(blatt2[i][0][0] != 0)
- {
- printf("\n%s\n", blatt2[i][0]);
- j = 1;
- while(blatt2[i][j][0] != 0)
- {
- printf("%s\n", blatt2[i][j]);
- j++;
- }
- i++;
- }
- printf("\n\n\n[Blatt 3]\n\n");
- if(blatt3_vis == 1)
- {
- printf("Blatt 3 wird im Fragebogen angezeigt\n");
- i = 1;
- while(blatt3[i][0] != 0)
- {
- printf("%s\n", blatt3[i]);
- i++;
- }
- }
- else
- {
- printf("Blatt 3 wird im Fragebogen nicht angezeigt.");
- }
- break;
- }
- }
- }
- }
- void speichern()
- {
- int i, j, speichern = 0; //Zählvariablen, sowie Überprüfungsvariable, ob gespeichert werden soll
- char temp[] = "{2.6 Test";
- strcpy(blatt2[2][6],temp);
- FILE *datei; //Dateizeiger initialisieren
- datei = NULL; //Dateizeiger nullen
- memset(dateipfad, 0 , 264); //Dateipfad nullen
- strcat(dateipfad,verzeichnis); //Verzeichnis in dateipfad schreiben
- strcat(dateipfad,produkt); //Produktnamen an dateipfad anhängen
- strcat(dateipfad,".txt"); //Dateiendung hinzufügen
- datei = fopen(dateipfad, "r+"); //Datei öffnen
- if(datei == NULL) //Wenn Datei nicht vorhanden...
- {
- speichern = 1; //...setze Überprüfungsvariable auf 1 (Es darf gespeichert werden)
- }
- else //Wenn Datei vorhanden
- {
- printf("\nFragebogen bereits vorhanden. Soll dieser Überschrieben werden? (1 = Ja, 0 = nein\n"); //Frage nach, ob die Datei überschrieben werden soll
- int speichern_temp; //Zur Sicherheit und zur Überprüfung der folgenden Eingabe, wird eine temp-variable inistialisiert
- scanf("%d", &speichern_temp); //Eingabe der Auswahl in temp-variable
- if(speichern_temp == 1) //Wenn "1" (Ja) eingegeben worden ist....
- {
- speichern = 1; //...dann setze Überprüfungsvariable auch auf "1"
- }
- }
- if(speichern == 1) //Wenn gespeichert werden soll
- {
- if(datei != NULL) //Wenn Datei vorhanden...
- {
- remove(dateipfad); //...lösche sie
- }
- datei = NULL; //Dateizeiger nullen
- datei = fopen(dateipfad, "w+"); //Datei erstellen und öffnen
- fputs(produkt,datei); //Schreibe Produkt in Datei
- i = 1;
- while(blatt2[i][0][0] != 0) //Durchlaufe die Schleife solange das erste Zeichen einer Kategorie in blatt2 keine 0 ist (In blatt2[i][0][0] stehen immer die Kategorien)
- {
- fputs(blatt2[i][0], datei); //Schreibe Kategorie aus blatt2 in Datei
- j = 1;
- while(blatt2[i][j][0] != 0) //Durchlaufe die Schleife solange das erste Zeichen einer Frage keine 0 ist (in blatt2[i][>0] stehen immer die Fragen zu der Kategorie in blatt2[i][0])
- {
- fputs(blatt2[i][j], datei); //Schreibe Frage aus blatt2 in Datei
- j++;
- }
- i++;
- }
- char tmp[] = "%"; //Schreibe das Vorzeichen für die Sichtbarkeit in ein temporäres Array
- //char tmp2[] = (char)blatt3_vis; //Initialisiere ein weiteres temporäres Array, um den integer-wert aus blatt3_vis (ob Blatt3 sichtbar sein soll, oder nicht) in ein char-array vorzubereiten
- //tmp2[1] = (char)(blatt3_vis + 48); //Schreibe den Wert aus blatt3_vis in das zweite temporäre Array (Als Ascii-Code. Daher +48)
- //strcat(tmp, tmp2); //Füge beide temporäre Arrays zusammen
- //fputs(tmp, datei); //Schreibe den Inhalt des temporären Arrays in die Datei
- }
- }
- int main()
- {
- char datei[] = "Persil";
- einlesen(1, NULL);
- einlesen(2, datei);
- // speichern();
- vorschau(2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement