Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 14.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char produkt[80], blatt1[15][80];
  6. char blatt2[11][11][80];
  7. char blatt3[6][80];
  8. char verzeichnis[] = "C:\\Users\\awiedenfeld\\Documents\\Seminar\\C-Schulung\\ConfigTool\\Fragebogen\\";
  9. char dateipfad[264];
  10. int blatt3_vis;
  11.  
  12. void einlesen(int trigger, char *datei_uebergabe)       //Aufruf zum Programmstart "einlesen(1, NULL)", um Datei Fragebogen einzulesen "einlesen(2, <Dateiname>)
  13. {
  14.     int i, j;
  15.     // int m, n;            //Wenn zur Überpüfung des Codes bei einer der Ausgabeteile die Kommentarzeichen entfernt werden, müssen diese auch hier entfern werden
  16.     FILE *datei;            //Dateizeiger initialisieren
  17.     if(trigger == 1)        //Welche Einlesevariante wurde gewählt? (1 = Nur Blatt1 und Blatt2 einlesen bei Programmstart, 2 = Fragebogen einlesen)
  18.     {
  19.         datei = NULL;
  20.         memset(dateipfad, 0 , 264);         //Dateipfad nullen
  21.         strcat(dateipfad,verzeichnis);      //Verzeichnis in Dateipfad schreiben
  22.         strcat(dateipfad,"blatt1.cfg");     //Dateinamen von Blatt1 an dateipfad anhängen
  23.         datei = fopen(dateipfad, "r+");     //Datei öffnen
  24.         for(i=0; i<15; i++)                 //Schleife läuft so oft, wie die erste Dimension von blatt1[][] gross ist
  25.         {
  26.             memset(blatt1[i], 0, 80);       //blatt1 nullen
  27.         }
  28.         if(datei == NULL)              
  29.         {
  30.             printf("Die Datei %s konnte nicht gefunden werden", dateipfad);
  31.         }
  32.         else
  33.         {
  34.             j = 0;
  35.             while(feof(datei) == 0)                 //Schleife solange durchlaufen, bist Ende der Datei erreicht ist
  36.             {
  37.                 fgets(blatt1[j], 80, datei);                    //Zeile aus Datei in array blatt1 schreiben
  38.                 if(blatt1[j][strlen(blatt1[j])-1] == 10)        //Wenn letztes Zeichen der geschrieben Zeile im Array eine 10 ist (Zeilenumbruch)....
  39.                 {
  40.                     blatt1[j][strlen(blatt1[j])-1] = 0;         //...tausche Sie mit einer 0 aus (So werden die Zeilenumbrüche verhindert)
  41.                 }
  42.                 j++;
  43.             }
  44.         /*  m = 0;                                              //Zum Überprüfen des Codes die Kommetarzeichen entfernen. Dadurch wird dann das eingelesene aus den Arrays wieder ausgegeben
  45.             for(m=0; m<15; m++)
  46.             {
  47.                 puts(blatt1[m]);
  48.             }*/
  49.         }
  50.         fclose(datei);          //Datei schliessen
  51.  
  52.         datei = NULL;                       //Dateizeiger wieder nullen
  53.         memset(dateipfad, 0 , 264);         //dateipfad wieder nullen
  54.         strcat(dateipfad,verzeichnis);      //Verzeichnis in dateipfad schreiben
  55.         strcat(dateipfad,"blatt3.cfg");     //Dateinamen von Blatt3 an dateipfad anhängen
  56.         datei = fopen(dateipfad, "r+");     //Datei öffnen
  57.         for(i=0; i<6; i++)                  //Schleife läuft so oft, wie die erste Dimension von blatt3[][] gross ist
  58.         {
  59.             memset(blatt3[i], 0, 80);       //blatt3 nullen
  60.         }
  61.         if(datei == NULL)
  62.         {
  63.             printf("Die Datei %s konnte nicht gefunden werden", dateipfad);
  64.         }
  65.         else
  66.         {
  67.             j = 1;
  68.             while(feof(datei) == 0)                         //Schleife solange durchlaufen, bist Ende der Datei erreicht ist
  69.             {
  70.                 fgets(blatt3[j], 80, datei);                //Zeile aus Datei in array blatt3 schreiben
  71.                 if(blatt3[j][strlen(blatt3[j])-1] == 10)    //Wenn letztes Zeichen der geschrieben Zeile im Array eine 10 ist (Zeilenumbruch)....
  72.                 {
  73.                     blatt3[j][strlen(blatt3[j])-1] = 0;     //...tausche Sie mit einer 0 aus (So werden die Zeilenumbrüche verhindert)
  74.                 }
  75.                 j++;
  76.             }
  77.             /*m = 0;                                //Zum Überprüfen des Codes die Kommetarzeichen entfernen. Dadurch wird dann das eingelesene aus den Arrays wieder ausgegeben
  78.             for(m=0; m<6; m++)
  79.             {
  80.                 puts(blatt3[m]);
  81.             }*/
  82.         }
  83.         fclose(datei);                  //Datei schliessen
  84.     }
  85.     else                                        //Wenn als Einlesevariante "2" (Fragebogen einlesen) übergeben worden ist
  86.     {
  87.         datei = NULL;                           //Dateizeiger wieder nullen
  88.         memset(dateipfad, 0 , 264);             //dateipfad wieder nullen
  89.         strcat(dateipfad,verzeichnis);          //Verzeichnis in dateipfad schreiben
  90.         strcat(dateipfad,datei_uebergabe);      //An Funktion übergebener Dateinamen dateipfad anhängen
  91.         strcat(dateipfad,".txt");               //Dateiendung hinzufügen
  92.         datei = fopen(dateipfad, "r+");         //Datei öffnen
  93.         int kopieren;                           //Überprüfungsvariable
  94.  
  95.         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)...
  96.         {
  97.             kopieren = 1;                       //...dann setze Überprüfungsvariable auf 1
  98.         }
  99.         else                                    //... sonst
  100.         {
  101.             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.
  102.             int kopieren_temp;                      //Zur Sicherheit und zur Überprüfung der folgenden Eingabe, wird eine temp-variable inistialisiert
  103.             scanf("%d", &kopieren_temp);            //Eingabe der Auswahl in temp-variable
  104.             if(kopieren_temp == 1)                  //Wenn "1" (Ja) eingegeben worden ist....
  105.             {
  106.                 kopieren = 1;                       //...dann setze Überprüfungsvariable auch auf "1"
  107.             }
  108.         }
  109.         if(kopieren == 1)                           //wenn Überprüfungsvariable "1" enthält
  110.         {
  111.             for(i=0; i<11; i++)                         //Schleife läuft so oft, wie die erste Dimension von blatt2[][][] gross ist
  112.             {
  113.                 for(j=0;j<11;j++)                       //Schleife läuft so oft, wie die zweite Dimension von blatt2[][][] gross ist
  114.                 {
  115.                     memset(blatt2[i][j], 0, 80);        //blatt2 nullen
  116.                 }
  117.             }
  118.             if(datei == NULL)
  119.             {
  120.                 printf("Die Datei %s konnte nicht gefunden werden", dateipfad);
  121.             }
  122.             else
  123.             {
  124.                 j = 0;
  125.                 char tmp[80];                               //initialisiere ein temporäres Char-Array (Hier werden die Zeilen aus der Datei zur Überprüfung reingeschrieben)
  126.                 while(feof(datei) == 0)                     //Schleife solange durchlaufen, bist Ende der Datei erreicht ist
  127.                 {
  128.                     fgets(tmp, 80, datei);                  //Zeile aus Datei in temporäres array schreiben
  129.                     if(tmp[strlen(tmp)-1] == 10)            //Wenn letztes Zeichen der geschrieben Zeile im Array eine 10 ist (Zeilenumbruch)....
  130.                     {
  131.                         tmp[strlen(tmp) -1] = 0;            //...tausche Sie mit einer 0 aus (So werden die Zeilenumbrüche verhindert)
  132.                     }
  133.                     switch(tmp[0])                          //Was ist das erste Zeichen im temporären Array?
  134.                     {
  135.                         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))
  136.                         case 35 : strcpy(produkt, tmp); break;                      //Wenn 35 (=#), dann schreibe den Inhalt des temporären Arrays in das produkt-array
  137.                         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))
  138.                         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))
  139.                     }
  140.                     j++;
  141.                 }
  142.                 /*m = 0;                                //Zum Überprüfen des Codes die Kommetarzeichen entfernen. Dadurch wird dann das eingelesene aus den Arrays wieder ausgegeben
  143.                 for(m=0; m<11; m++)
  144.                 {
  145.                     for(n=0; n<11; n++)
  146.                     {
  147.                         puts(blatt2[m][n]);
  148.                     }
  149.                 }*/
  150.             }
  151.         }
  152.        
  153.         fclose(datei);              //Schliesse Datei
  154.     }
  155. }
  156.  
  157. 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
  158. {
  159.     int i, j;
  160.     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)...
  161.     {
  162.         printf("Es ist kein Fragebogen im Speicher vorhanden.\n");      //...dann ist scheinbar kein Fragebogen im Speicher vorhanden
  163.     }
  164.     else                                //...sonst
  165.     {
  166.         switch(blatt)                               //Switch für die übergebene Zahl (also, was augegeben werden soll)
  167.         {
  168.         case 1 :                                    //Wenn nur Blatt 1 ausgegeben werden soll
  169.             {
  170.                 i = 0;
  171.                 printf("[Blatt 1]\n\n");            //Schreibe erstmal die Überschrift für das erste Blatt
  172.                 while(blatt1[i][0] != 0)            //Durchlaufe die Schleife solange das erste Zeichen einer Zeile in blatt1 keine 0 ist
  173.                 {
  174.                     printf("%s\n", blatt1[i]);      //Gebe die Zeile aus
  175.                     i++;
  176.                 }
  177.                 break;
  178.             }
  179.         case 2 :                                    //Wenn nur Blatt 2 ausgegeben werden soll
  180.             {
  181.                 i = 1;     
  182.                 printf("[Blatt 2]\n\n");            //Schreibe erstmal die Überschrift für das zweite Blatt
  183.                 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)
  184.                 {
  185.                     printf("\n%s\n", blatt2[i][0]);     //Gebe die Kategorie aus
  186.                     j = 1;
  187.                     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])
  188.                     {
  189.                         printf("%s\n", blatt2[i][j]);       //Gebe die Frage aus
  190.                         j++;
  191.                     }
  192.                     i++;
  193.                 }
  194.                 break;
  195.             }
  196.         case 3 :                            //Wenn nur Blatt 3 ausgegeben werden soll
  197.             {
  198.                 printf("[Blatt 3]\n\n");        //Schreibe erstmal die Überschrift für das dritte Blatt
  199.                 if(blatt3_vis == 1)             //Ist Blatt3 auf sichtbar gestellt? (1 = Ja, 0 = nein)
  200.                 {
  201.                     printf("Blatt 3 wird im Fragebogen angezeigt\n");       //Gebe aus, das Blatt 3 im Fragebogen sichtbar ist
  202.                     i = 1;
  203.                     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)
  204.                     {
  205.                         printf("%s\n", blatt3[i]);      //Gebe die zeile aus
  206.                         i++;
  207.                     }
  208.                 }
  209.                 else                        //Wenn Blatt3 als nicht sichtbar gekennzeichnet ist...
  210.                 {
  211.                     printf("Blatt 3 wird im Fragebogen nicht angezeigt.");      //...gebe aus, das Blatt 3 im Fragebogen nicht angezeigt wird
  212.                 }
  213.                 break;
  214.             }
  215.         case 4 :                            //Wenn der komplette Fragebogen ausgegeben werden soll, mache alles wie oben, nur nacheinander mit ein paar Zeilenumbrüchen
  216.             {
  217.                 i = 0;
  218.                 printf("[Blatt 1]\n\n");
  219.                 while(blatt1[i][0] != 0)
  220.                 {
  221.                     printf("%s\n", blatt1[i]);
  222.                     i++;
  223.                 }
  224.                 i = 1;
  225.                 printf("\n\n\n[Blatt 2]\n\n");
  226.                 while(blatt2[i][0][0] != 0)
  227.                 {
  228.                     printf("\n%s\n", blatt2[i][0]);
  229.                     j = 1;
  230.                     while(blatt2[i][j][0] != 0)
  231.                     {
  232.                         printf("%s\n", blatt2[i][j]);
  233.                         j++;
  234.                     }
  235.                     i++;
  236.                 }
  237.                 printf("\n\n\n[Blatt 3]\n\n");
  238.                 if(blatt3_vis == 1)
  239.                 {
  240.                     printf("Blatt 3 wird im Fragebogen angezeigt\n");
  241.                     i = 1;
  242.                     while(blatt3[i][0] != 0)
  243.                     {
  244.                         printf("%s\n", blatt3[i]);
  245.                         i++;
  246.                     }
  247.                 }
  248.                 else
  249.                 {
  250.                     printf("Blatt 3 wird im Fragebogen nicht angezeigt.");
  251.                 }
  252.                 break;
  253.             }
  254.         }
  255.     }
  256. }
  257.  
  258. void speichern()
  259. {
  260.     int i, j, speichern = 0;        //Zählvariablen, sowie Überprüfungsvariable, ob gespeichert werden soll
  261.     char temp[] = "{2.6 Test";
  262.     strcpy(blatt2[2][6],temp);
  263.     FILE *datei;            //Dateizeiger initialisieren
  264.     datei = NULL;           //Dateizeiger nullen
  265.     memset(dateipfad, 0 , 264);             //Dateipfad nullen
  266.     strcat(dateipfad,verzeichnis);          //Verzeichnis in dateipfad schreiben
  267.     strcat(dateipfad,produkt);              //Produktnamen an dateipfad anhängen
  268.     strcat(dateipfad,".txt");               //Dateiendung hinzufügen
  269.     datei = fopen(dateipfad, "r+");         //Datei öffnen
  270.     if(datei == NULL)                       //Wenn Datei nicht vorhanden...
  271.     {
  272.         speichern = 1;      //...setze Überprüfungsvariable auf 1 (Es darf gespeichert werden)
  273.     }
  274.     else                //Wenn Datei vorhanden
  275.     {
  276.         printf("\nFragebogen bereits vorhanden. Soll dieser Überschrieben werden? (1 = Ja, 0 = nein\n");       //Frage nach, ob die Datei überschrieben werden soll
  277.         int speichern_temp;                     //Zur Sicherheit und zur Überprüfung der folgenden Eingabe, wird eine temp-variable inistialisiert
  278.         scanf("%d", &speichern_temp);           //Eingabe der Auswahl in temp-variable
  279.         if(speichern_temp == 1)                 //Wenn "1" (Ja) eingegeben worden ist....
  280.         {
  281.             speichern = 1;                      //...dann setze Überprüfungsvariable auch auf "1"
  282.         }
  283.     }
  284.     if(speichern == 1)              //Wenn gespeichert werden soll
  285.     {
  286.         if(datei != NULL)           //Wenn Datei vorhanden...
  287.         {
  288.             remove(dateipfad);      //...lösche sie
  289.         }
  290.        
  291.         datei = NULL;                   //Dateizeiger nullen
  292.         datei = fopen(dateipfad, "w+");         //Datei erstellen und öffnen
  293.         fputs(produkt,datei);           //Schreibe Produkt in Datei
  294.         i = 1;
  295.         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)
  296.         {
  297.             fputs(blatt2[i][0], datei);         //Schreibe Kategorie aus blatt2 in Datei
  298.             j = 1;
  299.             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])
  300.             {
  301.                 fputs(blatt2[i][j], datei);     //Schreibe Frage aus blatt2 in Datei
  302.                 j++;
  303.             }
  304.             i++;
  305.         }
  306.         char tmp[] = "%";           //Schreibe das Vorzeichen für die Sichtbarkeit in ein temporäres Array
  307.         //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
  308.         //tmp2[1] = (char)(blatt3_vis + 48);    //Schreibe den Wert aus blatt3_vis in das zweite temporäre Array (Als Ascii-Code. Daher +48)
  309.         //strcat(tmp, tmp2);            //Füge beide temporäre Arrays zusammen
  310.         //fputs(tmp, datei);            //Schreibe den Inhalt des temporären Arrays in die Datei
  311.     }
  312.  
  313. }
  314.  
  315. int main()
  316. {
  317.     char datei[] = "Persil";
  318.     einlesen(1, NULL);
  319.     einlesen(2, datei);
  320. //  speichern();
  321.     vorschau(2);
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement