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; }