Hilfsmittel zum mehrzeilige string literal bauen??



  • Hallo
    Ich programmiere in C ein Konsolen-Tool das ein langes VBS-Programm erstellt.
    Nun hab ich dazu zum teil sehr lange string-konstanten (literale) in meinen source-code eingebaut, die ich als VBS-Vorlage verwende..

    Frage:
    gibt es ein Tool oder Plug-in für Code::Blocks womit man eine Text-Vorlage in die richtige Form für eine mehrzeiligen String verwandeln kann???
    Es ist ziemlich mühselig alles in Anführungszeichn zu setzen und escapesequenzen einbauen ( \n \" \\ ..usw)...
    bei einer IDE kann mann ja ganze text-blöcke markieren und in einen kommentar verwandel... gibt es nicht was ähnliches für strings?

    Hab schon überlegt ein kleines Hilfs-Tool zu machen, aber es müsste doch schon was ähnliches geben oder??

    Auszug aus meiner Vorlage: VBS-Orginal
    -----------------------------------

    autECLSession.autECLOIA.WaitForAppAvailable
    autECLSession.autECLOIA.WaitForInputReady
    autECLSession.autECLPS.SendKeys "[home]"
    autECLSession.autECLOIA.WaitForInputReady
    autECLSession.autECLPS.SendKeys "peit"
    autECLSession.autECLOIA.WaitForInputReady
    autECLSession.autECLPS.SendKeys "[enter]"
    autECLSession.autECLPS.WaitForAttrib 4,10,"00","3c",3,5000
    autECLSession.autECLPS.WaitForCursor 4,11,10000
    autECLSession.autECLOIA.WaitForAppAvailable
    autECLSession.autECLOIA.WaitForInputReady
    

    Auszug aus meiner Vorlage: als C-String
    -----------------------------------

    "\n"
        "\n"
        "autECLSession.autECLOIA.WaitForAppAvailable\n"
        "autECLSession.autECLOIA.WaitForInputReady\n"
        "autECLSession.autECLPS.SendKeys \"[home]\"\n"
        "autECLSession.autECLOIA.WaitForInputReady\n"
        "autECLSession.autECLPS.SendKeys \"peit\"\n"
        "autECLSession.autECLOIA.WaitForInputReady\n"
        "autECLSession.autECLPS.SendKeys \"[enter]\"\n"
        "autECLSession.autECLPS.WaitForAttrib 4,10,\"00\",\"3c\",3,5000\n"
        "autECLSession.autECLPS.WaitForCursor 4,11,10000\n"
        "autECLSession.autECLOIA.WaitForAppAvailable\n"
        "autECLSession.autECLOIA.WaitForInputReady\n"
        "\n"
        "\n"
    


  • So hab jetzt schnell für mich selber ein Tool geschrieben..
    Wenn es jemand gebrauchen kann, kann er den code ja verbessern *gg*

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /*
    Kleines Hilfsprogramm um per drag and drop eine Textdatei
    in eine mehrzeilige Stringvorlage zu verwandeln.
    
    Programm ist freeware
    Autor: salvation
    
    Beispiel:
    Eingabe -> Datei test.txt
    autECLSession.autECLPS.SendKeys "[home]"
    autECLSession.autECLOIA.WaitForInputReady
    
    Ausgabe -> Datei test_neu.txt
    "autECLSession.autECLPS.SendKeys \"[home]\"\n"
    "autECLSession.autECLOIA.WaitForInputReady\n"
    
    */
    
    #define PUFFER_MAX 50000
    
    int main(int argc, char *argv[])
    {
    
        FILE *lesen_stream, *schreiben_stream;
        char dateipfad[255];
        char puffer[PUFFER_MAX];
        int zeichen_int;
        int z;
        int zeichen_zaehler_p;
        int puffer_status=2;
    
        if (argc == 1)
        {
            printf(
                "                    String-Builder   von salvation (FREEWARE)  \n"
                "--------------------------------------------------------------------------------\n"
                "    Mit diesem kleinen Programm kann eine Text-Datei in eine mehrzeilige\n"
                "    Stringvorlage fuer die Sprache C konvertiert werden.\n"
                "\n"
                "    Anwendung: Eine Text-Datei auf diese Exe-Datei ziehen (drag and drop) \n"
                "    und dann wird eine neue konvertierte Text-Datei erstellt.\n"
                "    -> Textdatei darf nicht groesser sein als 50kB \n"
                "\n");
    
        }
    
        if (argc == 2)
        {
            strcpy(dateipfad,argv[1]);
            strcpy(puffer,"\"");
            zeichen_zaehler_p=1;
    
            lesen_stream=fopen(dateipfad,"r");
            if (lesen_stream == NULL)
            {
                printf("\n\n\n Fehler: Konnte datei nicht oeffnen.  \n");
                printf(" Datei: %s  \n",dateipfad);
            }
            else
            {
                zeichen_int = fgetc(lesen_stream);
    
                while (zeichen_int != EOF && zeichen_zaehler_p != PUFFER_MAX-10)
                {
                    switch (zeichen_int)
                    {
                    case '\n':
                        puffer[zeichen_zaehler_p]='\\';
                        zeichen_zaehler_p++;
                        puffer[zeichen_zaehler_p]='n';
                        zeichen_zaehler_p++;
                        puffer[zeichen_zaehler_p]='\"';
                        zeichen_zaehler_p++;
                        puffer[zeichen_zaehler_p]=(char)zeichen_int;
                        zeichen_zaehler_p++;
                        puffer[zeichen_zaehler_p]='\"';
                        zeichen_zaehler_p++;
                        zeichen_int  = fgetc(lesen_stream);
                        break;
                    case '\"':
                        puffer[zeichen_zaehler_p]='\\';
                        zeichen_zaehler_p++;
                        puffer[zeichen_zaehler_p]='\"';
                        zeichen_zaehler_p++;
                        zeichen_int  = fgetc(lesen_stream);
                        break;
                    case '\'':
                        puffer[zeichen_zaehler_p]='\\';
                        zeichen_zaehler_p++;
                        puffer[zeichen_zaehler_p]='\'';
                        zeichen_zaehler_p++;
                        zeichen_int  = fgetc(lesen_stream);
                        break;
    
                    default:
                        puffer[zeichen_zaehler_p]=(char)zeichen_int;
                        zeichen_int  = fgetc(lesen_stream);
                        zeichen_zaehler_p++;
                    }
                }
    
                fclose(lesen_stream);
                puffer[zeichen_zaehler_p]='\0';
                strcat(puffer,"\\n\"");
                printf("Datei: %s -> gelesen.\n",dateipfad);
                puffer_status=1;
                if (zeichen_zaehler_p > PUFFER_MAX-12)
                {
                    puffer_status=2; /* datei war zu gross -> fehler */
                    printf("\n FEHLER: Text-Datei war zu gross -> max 50kb erlaubt. \n");
                }
            }
        }
    
        /* ********** ANFANG -  in Datei schreiben ******************* */
    
        if (puffer_status == 1)
        {
            z=strlen(dateipfad);
            dateipfad[z-4]='\0';
            strcat(dateipfad,"_neu.txt");
    
            if ((schreiben_stream=fopen(dateipfad,"w")) == NULL)
            {
                printf("\n Konnte Datei %s nicht schreiben.",dateipfad);
            }
            else
            {
                fprintf(schreiben_stream,"%s",puffer);
                fclose(schreiben_stream);
                printf(" Datei: %s -> wurde geschrieben.\n",dateipfad);
            }
        }
    
        /* ********** ENDE -  in Datei schreiben ******************* */
    
        printf("\n\n    Druecken Sie <Enter> um das Fenster zu schliessen. ");
        setvbuf(stdin,NULL,_IONBF,0);
        setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
        getchar();
    
        return 0;
    }
    

Anmelden zum Antworten