Wie überprüfe ich beim Lesen aus Datei auf Zeilenende?? Wie geht fprintf



  • Moin

    Kann mir jemand verraten wie ich oben geschriebenen Vergleich umsetzen kann.
    while (temp != '\n') oder ist das gar nicht falsch.

    2. Kann fprintf beim Schreiben in eine Datei folgendes ab?:
    fprintf(fz, "\");--> \\ soll in eine Datei geschrieben werden "Stichwort" Quoting
    fprintf(fz, "\"");--> \"soll in die Datei geschrieben werden

    Danke



  • zu 1.: an sich schon richtig, musst nur schauen ob das file binär oder textmode liest, und ob es windows- oder unix-style hat (cr/lf oder nur lf)

    zu 2.: für zwei backslashes musst du "\\\" schreiben, "\" ist bloss einer...



  • Bei der Darstellung soll ein Zeichen aus einer Datei gelesen werden um es dann mit eventuellen Quotings in eine Datei zu schreiben.
    Erstellen etc. klappt auch ganz gut nur scheint mir mein Switch nicht ganz korrekt.

    1. Überprüfung auf Zeilenende
    2. \\ ausgeben
    3. \' ausgeben
    4. \" ausgeben
    5. %%
    6. das Zeichen welches in Temp steht ausgeben

    temp = getc(vorlage);
    	  while(temp != EOF)
    	  {
    		fprintf(fz, "printf(\"");
    			while ( (temp = getc(vorlage) != '\n')
    			{	
    				switch (temp)
    				{
    					case '\' : fprintf(fz, "\\\\");									   break;
    					case ''' : fprintf(fz. "\'");									   break;
    					case '"' : fprintf(fz, "\\"");									   break;
    					case '%' : fprintf(fz, "%%");									   break;
    					default :  fprintf(fz, temp);
    
    			}
    			}
    
    	}
    


  • Des Raetsels Loesung:

    '\' -> '\\'
    ''' -> '\''
    '"' -> '\"'
    "\\"" -> "\"" oder "\"\"", je nachdem was in der Datei stehen soll
    

    An der Hervorhebung kannst zum Teil schon erkennen wo ein Fehler sein koennte. Wenn Woerter ploetzlich farbig sind und es nicht sein sollten ist meist was falsch 😉 .

    So far

    Phil



  • ich glaub dein erstes case muss auch '\' statt '\' sein....

    //EDIT: zu langsam...



  • fprintf(fz, "printf(\"");
     while ( (temp = getc(vorlage)) != '\n')
      {	
       switch (temp)
        {
    	case '\\' : fprintf(fz, "\\\\");
    	            break;
            case '\'' : fprintf(fz. "\\'");
    		    break;
            case '\"' : fprintf(fz, "\\"");
    		    break;
            case '%' :  fprintf(fz, "%%");
             	    break;
    	default :   fprintf(fz, temp);
        }
      }
    fprintf(fz, "\\n\"\);");
    

    WAS WILL MIR DER COMPILER SAGEN????????????

    ope.cpp(66) : error C2059: Syntaxfehler : 'string'
    ope.cpp(68) : error C2228: Der linke Teil von '.fprintf' muss eine Klasse/Struktur/Union sein
    ope.cpp(68) : error C2001: Zeilenumbruch innerhalb einer Konstanten
    ope.cpp(69) : error C2143: Syntaxfehler : Fehlendes ')' vor 'break'
    ope.cpp(75) : warning C4129: ')' : Nicht erkannte Folge von Escape-Zeichen
    ope.cpp(102) : error C2109: Index benoetigt ein Array oder einen Zeigertyp
    ope.cpp(102) : error C2102: '&' erwartet L-Wert
    ope.cpp(106) : error C2109: Index benoetigt ein Array oder einen Zeigertyp
    ope.cpp(106) : error C2102: '&' erwartet L-Wert
    ope.cpp(110) : error C2109: Index benoetigt ein Array oder einen Zeigertyp
    ope.cpp(110) : error C2102: '&' erwartet L-Wert



  • Welche Zeile ist denn welche?

    Der Compiler meckert weil du falsche Zeichenketten hast (Siehe mein letztes Posting).

    meckert77 schrieb:

    case '\"' : fprintf(fz, "\\"");
    		    break;
    ...
    fprintf(fz, "\\n\"\);");
    

    Wird zu

    case '\"' : fprintf(fz, "\"");
    		    break;
    ...
    fprintf(fz, "\\n\");");
    

    Und schon stimmt die Hervorhebung und das sollte jetzt gehen.



  • Eben war nur ein Semikolon zu wenig und schon waren 9 Fehler weg. Nun meldet der Compiler keine Fehler mehr also gibts nur noch denkfehler.
    Kann mir jemand beim Denken helfen 😉

    {
    fprintf(fz, "#include <stdio.h>; \n");
    fprintf(fz, "int main (int argc, char *argv[]) {; \n");
    vorlage = fopen("head.txt", "r");
    
       while( (temp = getc(vorlage)) != EOF)
       {
         fprintf(fz, "printf(\"");
          while ( (temp = getc(vorlage)) != '\n')
          {	
            switch (temp)
            {
              case '\\' : fprintf(fz, "\\\\");
    	              break;
              case '\'' : fprintf(fz, "\\'");
    	              break;
              case '"' :  fprintf(fz, "\\\"");
    	              break;
              case '%' :  fprintf(fz, "%%");
    	              break;
              default :   fprintf(fz,"%c", temp);
    	}
         }
         fprintf(fz, "\\n\");");
      }
    
    fprintf(fz, "return 0; \n");
    fprintf(fz, "; \n");
    fprintf(fz, "}");
    fclose(fz);
    fclose(vorlage);
    }
    

Anmelden zum Antworten