Funktionssuche



  • Morgen,
    ich habe gestern eine Funktion geschrieben und frage mich ob es die nicht irgendwo in ANSI C schon gibt. Ich habe folgenden String: "Hello! World\r\n". \r und \n sind jeweils zwei Zeichen also eine Escape. Meine Funktion wandelt nun diese Blöcke in richtige Escape-Sequenzen um. Danke.



  • Herrmann schrieb:

    Meine Funktion wandelt nun diese Blöcke in richtige Escape-Sequenzen um

    also aus "\r\n" wird ESC+r+ESC+n oder wie?



  • OK net, habe mich vielleicht 🙂 etwas undeutlich ausgedrückt. Mein Funktion wandelt die beiden Zeichen "\" und "r" in das Carriage Return Zeichen "\r" um. Hoffentlich war es diesmal etwas verständlicher.



  • Du meinst, sie macht aus "Hello World\\r\\n" -> "Hello World\r\n"? Ne sowas gibts noch nicht, jedenfalls nicht in der Standardbibliothek. Schreibst du nen C-Compiler oder so? 😉



  • @Bashar, ja genau 🙂 . Das ganze wird ein kleiner Parser für Konfigurationsdateien. Der Nutzer kann dort auch Strings mit Zeilenumbrüchen ablegen. Damit es für den Nutzer editierbar bleibt schreibt er es halt in der Form \r direkt in die Datei. Beim Auslesen wandel ich das ganze dann in einen richtigen Zeilenumbruch um.

    Wenn der Parser fertig ist, wird er für
    jeden bei Sourceforge zu haben sein.

    PS: Dann habe ich mir also die Arbeit
    nicht umsonst gemacht 🙂 Danke.



  • Hi!

    @Herrman:
    So eine Funktion habe ich hier liegen. Geschrieben in C89. Ich sollte nämlich eine Bibliothek in C für ini-Dateien schreiben, zum auslesen eines virtuellen Dateisystems in Form einer ini-Datei, die eigentlich Biltiothek habe ich mittlerweile nach C++ konvertiert.
    Im Hauptprogramm sollte der Inhalt einer Datei ausgelesen werden. Den Inhalt habe ich später durch den parser hier gejagt, damit "\\r" zu '\r' wird.

    void parseEsc(char str[])
    {
    	const char* check[] = {"\\a", "\\b", "\\f", "\\n", "\\r", "\\t", "\\v"}; /* Escapezeichen, wie Sie im Dateisystem gespeichert sind */
    	const char* repl[] = {"\a", "\b", "\f", "\n", "\r", "\t", "\v"}; /* echte Escapezeichen */
    	size_t i = 0, anz = sizeof(check)/sizeof(*check); /* Anzahl Zeichenketten in check ermitteln */
    	for(; str[i]; ++i) {
    		size_t j=0;
    		for(; j<anz; ++j)
    			if(strncmp(&str[i], check[j], strlen(check[j]))==0) {
    				strcpy(&str[i], repl[j]);
    				strcpy(&str[i+1], &str[i+2]);
    			}
    	}
    }
    

    Code-Hacker



  • @Code-Hacker,
    wie gesagt eine Funktion hatte ich mir bereits selbst geschrieben. Ich wollte halt nur wissen ob es soetwas bereits in ANSI-C gibt...was sich ja jetzt erledigt hat. Trotzdem Danke.



  • Hi!

    Mir ist eben etwas aufgefallen, statt

    strcpy(&str[i+1], &str[i+2]);
    

    könnte man auch

    strcat(str, &str[i+2]);
    

    benutzen. Was wäre denn effizienter?

    Code-Hacker



  • Mach dir mal Gedanken, wie strcat und strcpy in etwa implementiert sind, dann kannst du dir die Frage selbst beantworten.



  • Hi!

    Hmmm, ok, dann vermute ich strcpy.

    Code-Hacker


Anmelden zum Antworten